|
いつもお世話になっております。
マクロで、指定文字列の並び替えを実行しようと考え以下の通りマクロを書いたので
すが、繰り返しが上手くいかず悩んでおります。
マクロの対象となる文
--------------------------------------------------------
@タイトル@@http://URL01,http://URL02,http://URL03,http://URL04,line_
height:説明01,line_height:説明02,line_height:説明03,line_height:説明0
4,http://URL11,http://URL12,http://URL13,http://URL14,http://URL1
5,line_height:説明11,line_height:説明12,line_height:説明13,line_heigh
t:説明14,line_height:説明15,
--------------------------------------------------------
作成したマクロ
//---------------------------------------------------
setcompatiblemode 0x00020000;
disabledraw;
begingroupundo;//一撃で元に戻すためにグループ化
//--------------------------------------
gofiletop;
#i = 0;
while( 1 )
{
searchdown2 "@(.+?)@@", regular;
if( !result ) break; // while() ループの終了
$about[#i] = gettext( foundtopx, foundtopy, foundendx, foundendy );
searchdown2 "(?\\2)(http:)(.+?)(,)", regular;
if( !result ) { message "http:が見つかりません"; goto END; }
$voice[#i] = gettext( foundtopx, foundtopy, foundendx, foundendy );
searchdown2 "(?\\2)(line-height:)(.+?)(,)", regular;
if( !result ) { message "line-height:が見つかりません"; goto END; }
$message[#i] = gettext( foundtopx, foundtopy, foundendx, foundendy );
#i = #i + 1;
}
#data_cnt = #i; // テキストデータの総数を格納
gofileend;
#i = 0;
while( #i < #data_cnt )
{
//「,」を区切り文字としてデータを分割し配列に格納 ※3
#c1 = split( $a, $voice[#i], "," );
#c2 = split( $p, $message[#i], "," );
if( #c1 != #c2 )
{
message "データ個数が違います";
goto END;
}
// 見出しを追加
$s = "\n●DATA" + str( #i + 1 ) + "\n";
//「@タイトル@@」の整形
$s = $s + $about[#i] + "\n";
#j = 0;
while( #j < #c1 )
{
// データの並び替え
$s = $s + "\"" + $a[#j] + "\"\n\"" + $p[#j] + "\"\n";
#j = #j + 1;
}
// データの書き込み
insert $s;
#i = #i + 1;
}
END:
//--------------------------------------
endgroupundo;
enabledraw;
endgroupundo;
//---------------------------------------------------
結果
--------------------------------------------------------
@タイトル@@http://URL01,http://URL02,http://URL03,http://URL04,line_
height:説明01,line_height:説明02,line_height:説明03,line_height:説明0
4,http://URL11,http://URL12,http://URL13,http://URL14,http://URL1
5,line_height:説明11,line_height:説明12,line_height:説明13,line_heigh
t:説明14,line_height:説明15,
@タイトル@@
"//URL01"
"説明01"
--------------------------------------------------------
となります。マクロの結果の理想は
@タイトル@@
"//URL01"
"説明01"
"//URL02"
"説明02"
"//URL03"
"説明03"
"//URL04"
"説明04"
"//URL11"
"説明11"
"//URL12"
"説明12"
"//URL13"
"説明13"
"//URL14"
"説明14"
"//URL15"
"説明15"
となることですが、
今のマクロはサンプルで言えば、9個のデータ個数を格納、書き込みして欲しいとこ
ろを1回のみで終わってしまいます。
http:から始まる項目、line_height:から始まる項目は必ず , で区切られているた
め、先に改行処理を行ってからでも問題ありません。
また並び替え元の文は最終的に削除する予定ですが、並び替えが上手く動作してから
削除する予定です。
アドバイスやもっと綺麗なマクロ表記があれば、ご助言いただけますでしょうか。
|
|