カーソルの位置の数字は何処の位置ですかNo.10016
可愛村龍滋 さん 22/11/22 15:26
 
UTF-8 BOM付きの下の文章を

「大漁唄い込み(斎太郎節・遠島甚句)」(唄)原田直之(2分42秒)<K30X218>
「秋田音頭」(演奏)滞空時間(2分53秒)<NESIA5>
「ラーガ・メグ・マルハール」(津軽三味線)上妻宏光(タブラ)U-zhaan(シター
ル)ヨシダダイキチ(3分04秒)<COCQ-85037>
「三春甚句」(唄)福本えみ(三味線)西英輔、上原潤之助(笛)佃康史(鳴物)美
鵬直三朗、美鵬マミ(はやし詞)新津幸子、新津美恵子(3分43秒)
「会津松坂」(唄)福本えみ(尺八)佃康史(はやし詞)新津幸子(3分04秒)
「秋田おばこ」(唄)福本えみ(津軽三味線)小山貢(尺八)佃康史(鳴物)美鵬直
三朗、美鵬マミ(はやし詞)新津幸子、新津美恵子(3分34秒)

下のように整形したいのです。行末の「(唄)****」は残したいんですが、解法
を思いつかないので( ! を使う?)保留しました。

「大漁唄い込み(斎太郎節・遠島甚句)」
「秋田音頭」
「ラーガ・メグ・マルハール」
「三春甚句」
「会津松坂」
「秋田おばこ」

次のマクロで整形できました。

// "」" から行末尾までを削除
gofiletop;
replaceallfast "\\」(.+\\$?", "\\」", regular;

下のマクロでも出来たのですが、初回の値が (x= 0 y= 9) と予想した (x=72 y=0)と
違うのです。最後のY座標は(4)で終わります。座標値は何処の位置を示している
のですか?

// "」" から行末尾までを削除
gofiletop;
golinetop;
while(1){
 searchdown "」", regular;
 if (result == 1){
  #x = selendx;
  #y = selendy;
  message "x= " + str(#x);
  message "y = " + str(#y);
  right 1;
  beginsel;
  golineend2;
  delete;
  }
 else
  break;
 }

[ ]
RE:10016 カーソルの位置の数字は何処の位No.10017
Iranoan さん 22/11/22 16:37
 
可愛村龍滋さんこんにちは Iranoan です
> 下のマクロでも出来たのですが、初回の値が (x= 0 y= 9) と予想した (x=72 y=0)
>と違うのです。最後のY座標は(4)で終わります。座標値は何処の位置を示してい
>るのですか?
前もマクロ例を書きましたが、
>   #x = selendx;
>   #y = selendy;
はあくまで、選択範囲の最後なので検索動作の設定依存です
foundendx, foundendy に置き換えたほうが良いでしょう
検索で選択範囲を広げることもできるので、カーソル位置が変わっても選択の開始/
終了位置が変わらないことも有りえます

また
>   right 1;
>   beginsel;
>   golineend2;
>   delete;
のルーチンだと」が行末に有った時、"「行末<->次の行の先頭」移動の禁止" でなけ
れば次行を削除するので危険です

[ ]
RE:10016 カーソルの位置の数字は何処の位No.10018
でるもんたいいじま さん 22/11/22 16:56
 
こんにちは。秀丸愛用者の「でるもんた・いいじま」です。


私ならシンプルに
・カギカッコでくくった曲名
・"(唄)誰それ"
の部分を残して、それ以外の余計な情報(この例であれば楽器奏者の列挙、曲の長さ、
CDの型番)をreplaceallfastで除去する、という方法を採ります。

というわけで、作ってみました。

- - - - キリトリセン - - - -

setcompatiblemode 0x20000; //これはもう決まり文句です
if ( !selecting ) selectall;

//マクロ完成後は下の1行を有効にすると便利です
//disabledraw; begingroupundo;

// 動作確認のために ask をつけてあります。確認が取れたら削ってください。
replaceallfast @"\s*<[-A-Za-z0-9]+>", "", inselect, regular, ask;
replaceallfast @"\s*((\d+分)?(\d+秒))", "", inselect, regular, ask;
replaceallfast @"\s*(?<=」.*)([^唄].*?)[^(\n]+", "", inselect, regular, ask;

//上記の「マクロ完成後は…」を有効にする時は同時に下の1行も有効にします。
//endgroupundo; enabledraw;

endmacro;

- - - - キリトリセン - - - -  

まず前提として、本文中
・CDの型番の<>、曲名のカギカッコ、「(12分34秒)」「(唄)」「(三味線)」
などの丸括弧は全角
・型番のデータと、演奏時間の数字は半角
としています。もしそうなっていないデータを扱う可能性がある場合は、追加のコー
ドを書きますのでご用命ください。

最初のreplaceallで、型番のデータを取り除きます。
次のreplaceallは演奏時間の情報です。

3つめがカギです。
"(?<=」.*)" は「"」" があり、それに引き続いて何か文字列があるかもしれない(が、
何もないかもしれない)」という意味です。
"([^唄].*?)" は、全角の括弧で囲まれたテキストで、左括弧の直後の文字が "唄"
 ではないもの、という意味です。
..*? と .* の違いはhmjre.dllのヘルプや、一般の正規表現解説資料などでご確認く
ださい。
そのあと "[^(\n]+" とすることで、次の "(**)" の直前までをヒット対象にし
ます。
なお、[…] の中に \n も入れておかないと、行末の改行文字が削除されてしまうの
で注意が必要です。・

とりあえずこれで、示していただいたデータはうまく処理できることを確認済みです。

---- Original Message ----

> 「大漁唄い込み(斎太郎節・遠島甚句)」(唄)原田直之(2分42秒)<K30X218>
> 「秋田音頭」(演奏)滞空時間(2分53秒)<NESIA5>
> 「ラーガ・メグ・マルハール」(津軽三味線)上妻宏光(タブラ)U-zhaan(シ
>タール)ヨシダダイキチ(3分04秒)<COCQ-85037>
> 「三春甚句」(唄)福本えみ(三味線)西英輔、上原潤之助(笛)佃康史(鳴物)
>美鵬直三朗、美鵬マミ(はやし詞)新津幸子、新津美恵子(3分43秒)
> 「会津松坂」(唄)福本えみ(尺八)佃康史(はやし詞)新津幸子(3分04秒)
> 「秋田おばこ」(唄)福本えみ(津軽三味線)小山貢(尺八)佃康史(鳴物)美鵬
>直三朗、美鵬マミ(はやし詞)新津幸子、新津美恵子(3分34秒)
>
> 下のように整形したいのです。行末の「(唄)****」は残したいんですが、解
>法を思いつかないので( ! を使う?)保留しました。
>
> 「大漁唄い込み(斎太郎節・遠島甚句)」
> 「秋田音頭」
> 「ラーガ・メグ・マルハール」
> 「三春甚句」
> 「会津松坂」
> 「秋田おばこ」

[ ]
RE:10016 カーソルの位置の数字は何処の位No.10019
igus さん 22/11/23 06:27
 
可愛村龍滋さん、こんにちは。
選択する前にmessage文を出しちゃってますね。
選択したからmessageで確認するようにしてみました。

//行末尾まで削除.mac
// "」" から行末尾までを削除
begingroupundo;
gofiletop;
while(1){
  searchdown "」(?!$)",regular;//行末を除外
  if (!result)break;
  right 1;beginsel;golineend2;
  #x=selendx;#y=selendy;
  message "x= " + str(#x)+"\ny = " + str(#y);
  delete;
}
endgroupundo;

[ ]
RE:10018 カーソルの位置の数字は何処の位No.10020
可愛村龍滋 さん 22/11/24 14:30
 
でるもんたいいじま さん、お世話になりました。初めて目にするコマンドが有り、
マクロヘルプを読み直しています。
秀丸のマクロ命令の豊富さは魅力であるのでしょうが、初心者は適当な命令を探すの
に苦労しています。( message )を連発してマクロの動きを追っていますが、(ask)
のような使い方もあるのですね。
 正規表現の便利さを利用したいので、これもボチボチと勉強します。

[ ]