ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

秀丸エディタコミュのこんなマクロは無いかしら?

  • mixiチェック
  • このエントリーをはてなブックマークに追加
ninninともうします。
秀丸マクロの掲示板が荒らしにあっていて、かなりな事態になっています。
http://hpcgi2.nifty.com/masema/bbs2/wforum.cgi?page=0&list=tree
そこで相談しようかなと思っていたのですが、ものすごいことになっているので、こちらで以下のような相談に乗ってくださる方はいらっしゃばとおもい、トピックを立ち上げてみました。
「こんなマクロがあるよ」とか、「ここへ行ってみろ」という情報をお持ちの方がいらしたら、是非よろしくお願いします。

スペイン語→日本語の辞書を作ろうと考えています。
要は西和辞典です。

辞書ファイルは単純なテキストです。
その形式は一語ごとに一行で以下の様になっています。
スペイン語[タブ]日本語文字列[改行]
という形式です。
[タブ]の前は半角アルファベット(大小有り)、半角スペース、数字です。あと記号は+'の二種類を見つけましたが、それ以外にもあるかもしれません。
全角文字はありません。
[タブ]の後は、全角文字、半角文字数字、記号入り乱れています。

こういう形式の単語リストを二つ合併させたいのです。
それぞれのリストはスペイン語の見出し語のABC順に並べられています。
その際、見出し語の重複に関しては二通りの考え方がありますが、私としてはどちらでも構いません。より容易にマクロが組める方で構いません。


考え方1
訳文の長い方を採用して短い訳文の文字列は削除する。

考え方2
訳文を並列する。
例えば
ファイルAに
hola\tこんにちは\n
という文字列があり、

ファイルBには
hola\t一般的な挨拶、おはよう、こんにちは\n
という文字列が有ったとすると

新しいファイルCには
hola\tこんにちは/一般的な挨拶、おはよう、こんにちは\n
という文字列が作られる。

ただ、こうすると、日本語の訳語に重複が出てきてしまいますが、仕方ないこととします。
というのは、訳語を比較してその訳語の重複削除はものすごい作業量になりそうですし、訳文の文脈を壊す削除の可能性がおおいにありえますから。

実際のファイルの一部を書き出してみます。

ファイルA


abofetear 平手で打つ
abogado, da 弁護士
abolengo 祖先


ファイルB

abofetear vt.平手で打つ
abogado [-da]s.弁護士
abogar vi.por弁護する


で合併と重複削除(とりあえず考え方1とします)した新たなファイルCはこうなるのでしょう。
順番は微妙に変わるかもしれません。

ファイルC

abofetear vt.平手で打つ
abogado [-da]s.弁護士
abogado, da 弁護士
abogar vi.por弁護する
abolengo 祖先


女性形の語尾変化をタブの後で書くか前で書くかで実質的には同じ見出し語が重複するのですが、これは私の方で事前にどちらかに統一した書き方にするべくがんばりますし出来なかったら、それはそれで仕方ないとあきらめますので無視してください。
ファイルCのソートは独力で出来ます。

私の環境
このデータを使用する辞書ソフトはMS-DOS用のeng2japです。
このデータを使用する機材はHP200LXです。
加工の為の秀丸(v.5.18)の環境は、XP、自作、2.8GHzのPEN3、メモリは768メガです。

コメント(37)

はじめまして。
表示>折り返し>固定

表示>折り返し>最大
にするマクロはないでしょうか?
----------------
config "w2000";
----------------
で桁数を変更するだけじゃ駄目ですか?
あろまさん
できました!ありがとうございます。わーい(嬉しい顔)

そしてすみません、もう一つ教えてください。涙
行の先頭に文字列を入れたいのですが、どうしたらいいですか?

マクロライブラリにあるような難しいものじゃなくて
文字列も決まったものなので簡単に書けないものでしょうか?



リンゴ
バケツ




青いリンゴ
青いバケツ
青い顔

などです。

すみませんがどなたか教えてください!がまん顔
a.sueさんのおっしゃる通り、正規表現で解決できると思います。
すこーしマクロや正規表現に慣れると、出来ることが百倍くらいになります。
楽しいですよー。
>>3
そーっすね・・・
いろいろやり方があるので、場合場合でいろいろ試してみるといいっすね

・a.sueさんのように、置換で正規表現を使う方法
このままだとファイル全体に追加されてしまうので、
範囲選択してから置換で「選択した範囲内のみ」をチェックして置換すれば、
特定の範囲に対して適用できます。

・キー操作の記録を使う方法
範囲が狭いようであれば、これも手っ取り早いです。応用も利きます。
"リンゴ"の先頭にカーソルを置いておいて、
「マクロ→キー操作の記録開始/終了」
→"青い"と入力→Homeを押して行の先頭へ移動→下を押して次の行へ移動
→「マクロ→キー操作の記録開始/終了」で記録終了。
→「マクロ→キー操作の再生」で、先ほどの一連の操作が繰り返されます。
記録開始/終了は、Shift+F1
記録再生は、Shift+F2
に割り当てられているはずです。デフォルトだと。

・BOX選択を使用する方法
とりあえずVer 6以降であれば、BOX選択中の文字入力で、各行に文字を一括挿入できるようになっています。
BOX選択は、CtrlやAltを押しながらマウスをドラッグすればおkです。
これは、説明するより実際に試した方が直感的に理解できると思います。
フォルダ内のテキストファイルすべてに対して文字列検索ができるマクロをご存じないでしょうか?
できればその文字列が含まれる行と、ファイル名をテキストファイルに出力できるようなものがいいです。
よろしくお願いします。
‭>‭リョー☆さん
それはまさにgrep機能のことだと思いますが。
[検索]→[grepの実行]をすると、そのようなテキストができあがります。
最近のバージョンアップで、検索後置換もできるようになりましたね。
みなさまありがとうございます。
正規表現の本を買って勉強していますがなかなか面白いですね!
もっとがんばります・
GREP機能すごいです。感激しました目がハート
ところで 2つのキーワードを含む行をGREPをつかってさがせないでしょうか?
あと連番保存マクロはあったのですが、元のファイルを上書きしないようなものはないでしょうか?
よろしくお願いします。
>>10
2つ限定であれば、正規表現で
(ABC.*DEF)|(DEF.*ABC)
これで ABC と DEF が同じ行に混在している行を探すことが出来ます。

キーワード3つ以上で任意の順序となると・・・
すぐには出てこないです;

連番保存とは・・・具体的にどういう処理でしょうか。
なべ様
ありがとうございます。正規表現の本に載っていなかったもので困っていました。
本当にありがとうございます。
保存用のマクロというのは
ファイル1.txtを編集中にマクロを実行することによって
ファイル1編集中001.txt
さらに編集してマクロ実行
ファイル1編集中002.txt
のように保存したいのです
上書きしますか?のダイアログが出れば最後の数字はなくても良いです
ただファイル1を上書き保存しないようにしておきたいのです。
現在はファイル1のコピーを作ってそちらを編集していて、このようなマクロがあれば
ファイル名を変えたりしなくて済みそうなもので、探していました。
連番マクロというものがマクロライブラリにあったのですが、そちらは元ファイルを上書きしてしまうので
・・・
>>12 ‭リョー☆さん

こんな感じでどうでしょうか。
作りが少し難しくなってしまいましたが、
一つ一つの意味を考えながら読んでみてください。


//// 拡張子を取り除く ////////
//
$orgFileNameAll = filename;
$orgFileType = filetype;

if( leftstr( $orgFileType, 1 ) == "." )
{
#orgTypeLength = strlen( $orgFileType );
}
else
{
$orgFileType = "";
#orgTypeLength = 0;
}

$orgFileName = leftstr( $orgFileNameAll, (strlen($orgFileNameAll) - #orgTypeLength) );

//// 最も若い番号を探す ////////
//
#suffixCnt = 1;
$currentNumber = rightstr( ("00" + str( #suffixCnt )), 3 );
$newFileNameAll = $orgFileName + "_" + $currentNumber + $orgFileType;
while( existfile( $newFileNameAll ) == true )
{
#suffixCnt = #suffixCnt + 1;
if( #suffixCnt == 1000 )
{
beep;
message( "連番の最大数(999)を超えたので保存できませんでした.");
endmacro;
}
$currentNumber = rightstr( ("00" + str( #suffixCnt )), 3 );
$newFileNameAll = $orgFileName + "_" + $currentNumber + $orgFileType;
}

//// 保存する ////////
//
saveas $newFileNameAll;
changename $orgFileNameAll;


// ここまで


…自分からも質問いいっすか?
……。
mixiに書き込むとインデント消されちゃうのどうにかならないでしょうか;;orz
>13 なべ@生きる死亡FLAG さん
はじめまして。

> mixiに書き込むとインデント消されちゃうのどうにかならないでしょうか;;orz

mixiに限らず、HTMLの仕様で、
連続する半角スペースやTabは1つの空白に纏められてしまいます。

ですので、全角でインデントすれば避けられます。
(2バイト文字圏でしか通用しないですがw)
>>14 Naoyukiさん

どうもです。

>ですので、全角でインデントすれば避けられます。

あ、ホントだ。インデントつけられますね。
昔試してダメだったのは気のせいでしたか・・・

if( leftstr( $orgFileType, 1 ) == "." )
{
  #orgTypeLength = strlen( $orgFileType );
}
else
{
  $orgFileType = "";
  #orgTypeLength = 0;
}

でもコピペしてもそのままでは動作しない罠が発動orz
まあ、置換すれば良いわけですが。
<pre>タグみたいな機能があればなぁ・・・要望書いてみます;

わざわざありがとうございました。
>>15 なべ@生きる死亡FLAG さん

> でもコピペしてもそのままでは動作しない罠が発動orz

あ、今度はそうなっちゃいますよね。 失礼しました。 (^^;
なべ@生きる死亡FLAGさん
感謝です!!ありがとうございます!!!
返事が遅くなって済みませんでした!!!
じっくり読んで試してみます!!!!
本当にありがとうございます!!!
はじめまして。

http://abc.com/def.html (改行)
http://ghi.com/jkl/
http://zzz.abc.com/mno.html
http://www2.pqr.com/

などのようにたくさんのURLのリストがあるのですが、

http://abc.com/
http://ghi.com/
http://pqr.com/

のようにドメインのみにしたいのですがなかなかうまくいきません。
ABC順に並び替える→文字列スラッシュまでを消す→wwwと数字があればとコンマまでを消す
→よくわからない→スラッシュ以降改行まで消す

という手順になると思うのですが、私にはちょっと難しすぎてうまくいかないのです
どなたか教えてください。よろしくお願いします。
泣き顔
マクロじゃなくても出来そうな気がしますけど……。

並び替えはソート機能を使えば出来ますよね。

正規表現でwwwと数字を選択して消す(置換)。
正規表現でスラッシュ以降を選択して消す(置換)。

スリーステップで終わりです。
あろまさん
ありがとうございます。
書き忘れてしまいましたが、サブドメイン等を含むurlもあるのと
wwwのあと数字があるものとないものがあるのですが、wwwと+で良いのですよね。
スラッシュも3つ目以降を消すという事で大丈夫ですよね。
サブドメインある物とない物が混同していますので、コンマ2個目と指定できないので
なかなか出来ないのです、よろしくお願いします。
すみませんさらに追記です。
サブドメインに関しては
sd.fgh.asd.co.jp/
などコンマが複数ある場合もあり、.comなどはいいのですが、.co.jpなどのドメインもあるため、
3つ目のスラッシュから一個前のドットまでという指定もできないので
非常にむずかしく感じています。
どなたか良いアイデアをおもちでしたら、是非教えてだけないでしょうか?よろしくおねがいします。
gfrさん:

 実際にそういう風に動いてる(と思う)秀丸マクロを書いたんですが、ここに貼るにはサイズが大きい気がするので、自分とこの日記にトピックを立てました。ご覧くださいまし。

http://mixi.jp/view_diary.pl?id=1398307324&owner_id=106191


ALL:
 何となく漠然と、なんかもっと格好いいやり方があるような気がしています(^^;;;。
 お気づきの点などありましたら突っ込んでいただけると助かります。
る印/おりくらはじめさま

ありがとうございます!
早速マクロの方試してみました!
当方あまり詳しくない(勉強中)なもので、日記に載っていました
物をそのままコピーして先頭にあるスペースをすべて削除して使わさせて頂きました
(これであってるのでしょうか…)

非常に素早く動いています!なんだか良さそうな感じなのですが、リストが結構長い物ですのでまだ作動中です。
リストを50件くらいにして実行してみたところ、
ソートがうまく行かないのとwwwが取れないものがありましたが、
きっと私の設定が悪いのだとおもいます。

あとはサブドメインに関してはとても難しいのですね、
ne.jp やco.jp などは あらかじめ登録しておいて
それ以前の物でドットがある物は最後のドットまでを抜き出すなんて事は出来ないのでしょうか。
まだあまりよくマクロでできることを解っていませんので、とんでもない事を言っているかもしれません。
よろしくお願いします。
おせわになります。
る印/おりくらはじめさまのマクロを使いURLリストに
マクロをかけていたのですが、
最終的に何もない状態になってしまいました。(つまり全部削除)
私の\tの逆変換というか削除したのがいけなかったのか、
URLに予想外の物が入っていたのか、途中でおかしくなってしまったんだと思います。
しばらくして見た感じですと、wwwについても削除できたものとそのままのものがあったり
してしまいました。
多分ですが、やはりURLリスト内にエラーとなるものがあったのだと思います
次にやったのがマクロを途中で止めて、WWW.を置換で削除
それをコマンドラインでソートして、他のマクロで重複行削除という感じで行ってみましたが、
やはりサブドメインのものが結構あり、このサブドメインをどうにか削除できないものか
考えています。
る印/おりくらはじめさまのマクロをさらに改造したらできるかもしれないのですが、
ただいま本を読んで勉強しています。どなたか良いアイデアがあったら教えていただきましたら
幸いです。
gfrさん:

 使い方は「日記に載っていました物をそのままコピーして先頭にあるスペースをすべて削除」で合ってます。

・ソートがうまく行かない
 については、よくわかりません(^^;;;。
 実はこのコマンド初めて使うので仕様とか知らないのですがそれはさておき、「ソートが失敗している」のか「ソートの前提となるデータの仕上がりが正しくない」のかを切り分ける必要があります。‥‥‥というか、元々のリストが何行あるのかよく知らないのでそちらについては何ともいえませんが、たかだか50行が扱えないような貧弱なソート処理とも思えないので、多分「ソートの前提となるデータの仕上がりが正しくない」んだと思うんですけど。


・wwwが取れないものがある
 取れてないのはどういうwwwでしょうか?
 提示されたサンプルから、現在の仕組みが削除するのは"任意の個数のw""任意の個数の数字""ピリオド"の組み合わせとしています。ですから、

http://wwwwwwwwwwwwwwwwwwwwwwwwww1234567890._pqrx.com → http://_pqrx.com/
http://www2x.pqr.com → http://www2x.pqr.com/

 のようになります("www2x"は消えない)。これでは不味いのであれば検索のパターンを変える必要があります。


・結果として何も残らないことがある
 そもそもの話に戻るんですが、どういうデータが何行あるんでしょうか。

>URLに予想外の物が入っていたのか、途中でおかしくなってしまったんだと思います。
>しばらくして見た感じですと、wwwについても削除できたものとそのままのものがあったり
>してしまいました。
>多分ですが、やはりURLリスト内にエラーとなるものがあったのだと思います

 このあたりの漠然とした書きっぷりから察するに、もしかしてgfrさん自身もデータの中身を知らないのではないかという懸念があるのですが、もしそうだとすると、データに起因する問題として何を心配したらいいのか、こちら側としては全然わかりませんので追いかけようがありません。
 処理側としては、取り敢えず内容をやや簡単にしました。改訂はを日記のレスとして直接書いてあります。割と細かくコメントも入れていますので、おかしいところを自分で改造するなり、要る部分だけ抜き出して別のマクロを作るなりしてみてください。

 それと、どこまでがドメインでどこからがサブドメインかというのは、多分、秀丸自体の機能では判断できないんじゃないかと思います(whoisに訊いたりとかすればできるのか?)。
る印/おりくらはじめさま

お返事が遅くなってしまってすみません。
そして言葉足らずで、不快な思いをさせてしまった事をお詫びいたします。
もうしわけございません。

リスト作成の目的なのですが、HP作成にあたって
リンク集を作りたいと思っていまして、千葉県の家具屋さん一覧
やアジア雑貨を売っているお店一覧といった具合で作りたいと思っていたのです。
そこで、ソフトを探していましたら、キーワードに当てはまるURLを自動でさがす
ツールだったんですね、ただそのツールのは
単純にgoogleキーワード検索から出てきた順に1000件拾ってくるツールでして、
サブドメインやスラッシュ以下を全部リスト化してしまう物だったんです。

そのようなリストですので、重複(元のドメイン以下もしくはサブドメイン)
ニ関しては必要ないと思ったので、そのリストから秀丸を使ってどうにか奇麗な形に整形できない物かと考えていたのです。

予想外のURLというのは、ソフトウェアのバグによる物(http://以下がないものを確認しました)なのか、日本語ドメインもありました。
そのような物かもしれません。

サブドメインにかんしては
.com(.co.jpに関しては精密には.co以前はサブドメインになるらしいです)等の直前の文字列までがメインのアドレスとなるという前提で考えておりました。

る印/おりくらはじめさまのご親切な御対応には本当に感謝しております。
そして不快な思いをさせてしまった事を、今一度お詫びいたします。
大変申し訳ございませんでした。
gfrさん:

 すみませんマクロにバグがありました。
 "www9."のように数字のついた文字列は消えるんですが、何もついていない"www."が消えてなかった筈です。テストデータのバリエーションが足りませんでしたというか、当たり前な文字列なので却って見落としてました。申し訳ありません。


>リスト作成の目的なのですが、HP作成にあたって
>リンク集を作りたいと思っていまして、千葉県の家具屋さん一覧
>やアジア雑貨を売っているお店一覧といった具合で作りたいと思っていたのです。
>そこで、ソフトを探していましたら、キーワードに当てはまるURLを自動でさがす
>ツールだったんですね、ただそのツールのは
>単純にgoogleキーワード検索から出てきた順に1000件拾ってくるツールでして、
>サブドメインやスラッシュ以下を全部リスト化してしまう物だったんです。

 というコトでしたので、「千葉 家具」で検索したら出てきたURL(http://kagu.prnet.jp/area/13/)を、適当に入手したURL収集ソフト(http://download.goo.ne.jp/software/contents/soft/win95/net/se391158.html)に渡し、URLを収集させたらいつまで経っても終わらないので途中で切り上げた結果(笑)手元に残った、バグデータも込みで3550行のデータを上記修正後のマクロに掛けたところ、32秒ほどで処理を終え、124行に減りました。
 全部なくなっちゃうとかそういう挙動はなかったので、そのあたりは多分gfrさんがお持ちのデータに起因する問題なのかな、と思います。


>予想外のURLというのは、ソフトウェアのバグによる物(http://以下がないものを確認しました)なのか、日本語ドメインもありました。
>そのような物かもしれません。

 見たところ、手元のデータで「有意なURLでない」ものには下記のようなものがありました。

 ・恐らく日本語ドメインの成れの果て(http://以降が化けてる)
 ・空行(改行コードだけ)
 ・ダブルクォートだけ

 また、別に「有意なURLでない」ワケではないですが、他とは違うパターンには下記がありました。

 ・ダブルクォートで始まっているデータ

 gfrさんがお持ちのデータもこんなことであるとしたら、整形開始前の下拵えに

 ・シングルクォート・ダブルクォートを削除( replaceallfast "[\'\"]", "", regular; )

 などを追加するのがいいかも知れません。


>サブドメインにかんしては
>.com(.co.jpに関しては精密には.co以前はサブドメインになるらしいです)等の直前の文字列までがメインのアドレスとなるという前提で考えておりました。

 例えばAAA.BBB.jpとAAA.BBB.co.jpが両方あるような時に、「.jpのひとつ前のピリオド以降」みたいなルールで捌くと、残るデータはそれぞれBBB.jpとco.jpですが、co.jpだけ残っても仕方ないワケで(苦笑)。この辺が上手くルール化できればマクロにする余地もあるかとは思いますが、「それでよいかどうかはデータ次第」です。例えば中のURLが全部〜.co.jpで終わってるなら「.co.jpのひとつ前のピリオド以降」みたいな簡単なルールで構わないでしょう。
 まあともあれ、お手元のデータをよく観察してみてください。
る印/おりくらはじめさま

ありがとうございます。

リストを良く見ていましたら、ダブルクウォートありました!
先頭に削除する処理を加え、うまく行きました。
私のリストの場合、なかなか処理が終わりませんが、パソコンの性能と
ソフトがどのようなURLを拾うかによるのですね、
私の使っているソフトはサブドメインを含んだURLばかり拾ってしまうんです。
なのでサブドメインをどうにかしたいなと思っているのです。

>.co.jpのひとつ前のピリオド以降」みたいな簡単なルールで構わないでしょう。
やはりこのへんが私にはちょっと難しくて、、、他にもne.jpなどのドメインもありますし、むずかしいです。

しかし それ以外は、る印/おりくらはじめさま から頂きましたマクロ完璧に動いています!本当にありがとうございます。
る印/おりくらはじめさま

日記拝見させていただきました。ご迷惑をおかけいたしまして大変申し訳ございません。

http://uproda11.2ch-library.com/11222821.txt.shtml

ダウンロードパス 9999

上記がソフトから抽出したURLをつなぎ合わせて長いURLリストを作ったものです。
る印/おりくらはじめさま の最後に書いていただいたマクロなのですが、
if(0 <= #SeparatorPosition) このあたりでコンマがないといわれてしまいます。

今回頼りっぱなしになってしまって、本当にご迷惑をおかけし、申し訳なく思っています。
自分でも本を読みながらやっていましたが、予期しないエラー(予期しないURL等)
があったり、サブドメインのことがあったりでどうにもならなくなってしまったんです。

私の勉強が足りなくて本当にお手数をおかけして、本当に申しわけありません。
gfrさん:

http://mixi.jp/view_diary.pl?id=1398307324&owner_id=106191

 最後のレスにzipファイルのURLを書いています。
 環境に違いがあるので手元でソートは試していませんが、渡された入力ファイルに対してソート以外の全作業を行い、処理を完走できることまでを自環境にて確認したマクロファイルそのものが、テストデータ等々と一緒に入っています。

 このトピック自体はマクロ発注/受注の場ではないと思いますので、本件についてこれ以上のフォローは控えます。
 可能な限り、あとはご自分で何とかしてください。
る印/おりくらはじめさま

本当にいろいろとありがとうございます。そして、私の非常にわがままな
コメントに優しく本当に親切に対応いただいて本当に感謝しております。

>このトピック自体はマクロ発注/受注の場ではないと思いますので、本件についてこれ以上のフォローは控えます。

そうですね、私も勉強して自分でなんとかしようとおもいます。

自分でもいろいろと実験したのですが、思ったもの以外の物が削除されたり
難しく書いてみたものよりもシンプルに書いたらできたとか、
非常に奥が深く面白いですね。

これ以上はもっと勉強して、なんとかしてみようとおもいます。

私のパソコン(秀丸のバージョン?)のせいでコンマのエラーが出てしまうのですが
いろんなパソコンやバージョンで試してみようと思います。
出来なくても、なんとかマクロを理解して自分なりにやってみます。

この度は本当にありがとうございます。
マクロのことでお一つ質問なのですが。

関数($fld_name)にとあるフォルダ(例:C:\test)のパスを取得したとします。
そこから関数($fld_name)を使って一つ上の階層(C\:)に移動することってマクロで可能でしょうか?
htmlとかなら「../」で行けちゃいますが、マクロだとそうも行かないようで困ってます。
よろしくお願いいたします┏○
ひろ坊さん:

>関数($fld_name)にとあるフォルダ(例:C:\test)のパスを取得したとします。
>そこから関数($fld_name)を使って一つ上の階層(C\:)に移動することって
>マクロで可能でしょうか?
>htmlとかなら「../」で行けちゃいますが、マクロだとそうも行かないようで
>困ってます。

 上位のディレクトリパス(「C:\test」に対する「C:\」)をその後何度も使うのであれば、パス文字列に対して「最後の\以降を削除する」的な文字列操作をする方が後々格好いいかな、とは思います。

 もっとお手軽な方法としては、そのパス文字列に「..\」を書き足す方法でも、上位のディレクトリパスを扱うことができました。
 下記のマクロとバッチファイルの組み合わせは、僕の手元では動いています。
 実行すると、C:\temp\macro\test\dirlist.logが作成され、次にC:\temp\macro\dirlist.logが作成されますが、欲しい動作は例えばこういうこと(C:\temp\macro\直下に某かの操作ができること)ですよね?

---- マクロ本体
$Path_Root = "C:\\temp\\macro\\test\\";
$Command = "\"" + macrodir + "\\dirlist.bat\" \"" + $Path_Root + "\"";
message($Command);
runsync $Command;

$Path_Root = $Path_Root + "..\\";
$Command = "\"" + macrodir + "\\dirlist.bat\" \"" + $Path_Root + "\"";
message($Command);
runsync $Command;
----

---- macrodir + "\\dirlist.bat"の中身
if not exist %1 goto end_batch
pushd %1
dir>dirlist.log
popd
:end_batch
----

 ちなみに。
 上記はまさに、ひろ坊さんの仰る『htmlとかなら「../」で行けちゃいますが』のアプローチです。
 それが上手く行かなかったのは、多分ですが、下記のどちらかを失念されていたせいではないかと思います。
 ・「..\」を書き足す前のパス文字列が「\」で終わっていないと正しいパス文字列にならない
 ・マクロの中で「\」自体を文字列中の値として扱うには「\\」のように書く必要がある

 以上、参考になれば幸いです。
ちょっと補足してみます。

今βテスト中の Ver.8 であれば、
strrstr 関数が追加になっていて、文字列の最後からの検索が可能になったようです。
なので、「最後の\以降を削除する」が比較的簡単にできそうです。

//// (例)
$src = "d:\\foo\\bar\\baz\\";

if( rightstr( $str, 1 ) == "\\" )
{
$ret = leftstr( $src, strlen( $src ) - 1 );
}
else
{
$ret = $src;
}

#posCut = strrstr( $ret, "\\" );
$ret = leftstr( $ret, #posCut + 1 );

message( $ret );
>る印/おりくらはじめさん
ご回答ありがとうございます。
やりたいことは(下記参照)取りあえずは
?パス取得→?binfo.xmlの文字列を置換→?一つ上の階層に移動して拡張子.htmのファイルを秀丸で開く
をやりたいのですが、「message $fld_ue;」で見てもただ「$fld_name」に「\..\」が追加されてるだけで
上位フォルダには移動出来てないようでした。

// フォルダ名取得
 $fld_name = input("立読み化するフォルダを指定して下さい。","");

// フォルダ名が入力されていなければ終了。
 if($fld_name==""){
  message "処理を中止します。";
  endmacro;
 }

//binfoに「【立読み版】」を追加。
 openfile $fld_name + "\\binfo.xml";
  if (result == false) { // ファイルが開けなかった場合終了
  message "開けませんでした。";
  endmacro;
  }

 searchdown "タチヨミバン|【立読み版】" , regular, nocasesense;
  if (result == 0){
  replaceallfast "<title reading=\".*?\\f\">.*?\\f</title>" , "\\0タチヨミバン\\1【立読み版】\\2" , regular, nocasesense;
  save;
  }

 $fld_ue = $fld_name + "\\";
 $fld_ue = $fld_ue + "..\\";
 message $fld_ue;

る印/おりくらはじめさんのマクロが私にはちょっと高度でして
理解出来てないのだと思うのですが、間違いなどありましたらご指摘下れば幸いです。
>なべ@LethalFlagさん
何気にいつもお世話になっております。
回答ありがとうございます。

>strrstr 関数が追加になっていて、文字列の最後からの検索が可能になったようです。
わぉ、為になる情報ありがとうございます。
私の仕事でも何かしらに使えそうです。メジャーリリースが楽しみですね。

なべ@LethalFlagさんのマクロですが、関数のお勉強がまだまだ不足でして
マクロヘルプと睨めっこしながら勉強させていただきます。
本当にありがとうございます┏○
ひろ坊さん:

 続きがないので何ともいえませんが、$fld_ueという変数はこの後何に使うんでしょう?


 ここに書いてある通り「message($fld_ue);で表示しておしまい」などの、要するに、$fld_ue自体に「正しいフォルダ名(D:\foo\bar\baz\を与えたら、D:\foo\bar\)が」格納されていないと困るような使い方をするのであれば、なべ@LethalFlagさんが提示されている方法を使うか、秀丸のバージョンが上げられないならそれに相当する処理を自分で作るしかありません。


 僕が提示した方法論は、元のパスを「1階層上を指す相対パス」に書き換える操作であり、D:\foo\bar\baz\を与えたら、できあがるのはD:\foo\bar\baz\..\です。
 これがどう使えるかというと、例えば、与えたパスのひとつ上の階層にあるファイルを開いて何か加工することなどが目的なのでしたら、ひろ坊さんが書かれたマクロの末端(「message $fld_ue;」)のさらに下にこういうのを付け加えると弄れます、というようなことですね。

/////1階層上のフォルダにあるsample.txtを編集する
  openfile $fld_ue + "sample.txt";
  setactivehidemaru findhidemaru($fld_ue + "sample.txt");
  insert "編集しました\n";
  save;
/////


 あとはこの変数の目的次第です。
 『$fld_ue自体に「正しいフォルダ名」が格納されていないと困る』のかどうか、ということによって、どちらの方法論をベースにするべきかが変わるでしょう。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

秀丸エディタ 更新情報

秀丸エディタのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング