整形が目的通りにできない間違いはどこでNo.09126
可愛村龍滋 さん 19/12/08 13:48
 
ホームページの情報を下記のように整形しました。(Ver8.88 32bit)

哀愁子守唄
和田 青児
 POPS 歌謡曲・演歌・フォーク
\561
鬼灯
上杉 香緒里
 POPS 歌謡曲・演歌・フォーク
\561
みれん岬
松原 のぶえ
 POPS 歌謡曲・演歌・フォーク
\561

最終の目標は下記のように整形したいのです。

哀愁子守唄 和田 青児  POPS 歌謡曲・演歌・フォーク \561
鬼灯 上杉 香緒里  POPS 歌謡曲・演歌・フォーク \561
みれん岬 松原 のぶえ  POPS 歌謡曲・演歌・フォーク \561

そこで、マクロを考えたのですが、文法的な間違いはないようなのですが、いっこう
に動作しません。何が間違いなのでしょうか?

gofiletop;
while(1){
 searchdown2 "^\\", regular;
 if( result == false ) break;
 {
 down;
 insertreturn;
 golineend;
 tab;
 delete;
 golineend;
 tab;
 delete;
 golineend;
 tab;
 delete;
 }
 }

[ ]
RE:09126 整形が目的通りにできない間違いNo.09127
でるもんたいいじま さん 19/12/08 15:05
 
こんにちは。秀丸愛用者の「でるもんた・いいじま」です。

> そこで、マクロを考えたのですが、文法的な間違いはないようなのですが、
> いっこうに動作しません。何が間違いなのでしょうか?
>
> gofiletop;
> while(1){
>  searchdown2 "^\\", regular;

マクロで正規表現を書くときには原則として、\ の数を2倍にする必要があります。
"..." の中で \ は、\t、\n、\" のような形で特別な意味を持つからです。

たとえば、
message "^\"";
mesaage "^\\";
を試してみてください。

なので、ここのsearchdown2は、次のいずれかで書くことになります。
searchdown2 "^\\\\", regular;
searchdown2 @"^\\", regular; // V8.66以上が必要
searchdown2 R"xxx(^\\)xxx";  // これもV8.66以上が必要

詳細はマクロヘルプの「目次→式について→文字列」というページを
ごらんください。マクロヘルプのキーワード検索で「文字列」と入れても
最初にこのページがヒットします。

☆ ☆ ☆

以下は別解です。

編集作業はいちいち1文字ずつやらなくても、replace文を使って正規表現だけで
完結させることができます。

while (1)
{
replacedown @"^\s*(.+?)\s*\n\s*(.+?)\s*\n\s*(.+?)\s*\n\s*(\\\d+)\s*\n",
 @"\1\t\2\t\3\t\4\n", ask, regular;
if ( !result) break;
}

この中に4つある (.+?) を、置換先文字列のほうで \1〜\4 として参照しています。

それとおまけで、括弧の前後に \s* を入れてあります。
これは行頭・行末の余計な空白類にヒットさせるためのものです。
置換先のほうにはその空白を入れていませんので、これで余計な空白が
除去できます。

[ ]
RE:09127 整形が目的通りにできない間違いNo.09128
でるもんたいいじま さん 19/12/08 15:35
 
でるもんた・いいじまです。すみません追記。

> while (1)
> {
> replacedown @"^\s*(.+?)\s*\n\s*(.+?)\s*\n\s*(.+?)\s*\n\s*(\\\d+)\s*\n",
>  @"\1\t\2\t\3\t\4\n", ask, regular;
> if ( !result) break;
> }
> この中に4つある (.+?) を、

よく見たら4つめの括弧の中身は (.+?) じゃないですね(^^)失礼しました。

で、その4つめの括弧の中身ですが、もしかしたら (\\[\d,]+) としたほうが
いいかもしれません。こう書けば、金額の中にコンマが入っていても
(例:\3,000)そのまま処理されます。

あるいは、行頭の円記号だけを目印にしてその後の文字は何でもありにするので
あれば(例:\3,000+税、\3,300(税込)、etc)、この括弧の中身は (\\.+?) と
してください。

[ ]