|
URL末尾の余分な文字列(index.***や?以降に続く文字列)を削除するマクロを自
作中なのですが、なぜかループを途中で抜けてしまって全てのURLを処理できません。
原因などのご教授をいただきたく、よろしくお願いします。
==================== サンプルテキスト =============================
https://news.yahoo.co.jp/categories/domestic/index.php 2020
https://news.yahoo.co.jp/categories/domestic/? 2020
https://news.yahoo.co.jp/categories/domestic/index.htm 2020
https://news.yahoo.co.jp/categories/domestic/? 2020
==================== 試作マクロ1 =============================
// URL修正マクロ
// gofiletop ;
call URL ;
message "Macro end." ;
gofiletop ;
enabledraw ;
endmacro ;
URL:
gofiletop ;
while( 1 ) {
searchdown2 "https?://", regular, nocasesense, nohilight ;
if( false == result ) break ;
##hy = y ; ##hx = x ;
// beginsel ;
// selectline ;
// message "un=" + str( ##un ) + ", hy=" + str( ##hy ) + ", hx=" + str( ##h
x ) + ", " + $$url[ ##un ] ;
call DeleteURLparameta ;
// escape ;
message "Returned. y=" + str( y ) + ", x=" + str( x ) + " hy=" + str( ##hy
) + ", hx=" + str( ##hx ) ;
moveto ##hx + 1, ##hy ;
}
endmacro ;
DeleteURLparameta:
message "DeleteURLparameta" ;
$$target[ 0 ] = "/index\\..+" ;
$$target[ 1 ] = "\\?" ;
##tc = 0 ; ##ty = y ; ##tx = x ; ##sx = 0 ;
while( 1 ) {
if ( 2 == ##tc ) break ;
moveto ##tx, ##ty ;
beginsel ;
searchdown2 "\\s| ", regular, nocasesense, nohilight ;
##sx = x ;
message "URL end. y=" + str( y ) + ". sx=" + str( ##sx ) ;
// searchdown2 $$target[ ##tc ], regular, nocasesense, nohilight ;
searchdown2 $$target[ ##tc ], regular, nocasesense, inselect, nohilight ;
if ( false == result ) message "Target not found. tc=" + str( ##tc ) + ".
y=" + str( y ) ;
if ( false == result ) goto NextTarget ;
if ( 0 == ##tc ) moveto x + 1, y ;
beginsel ;
searchdown2 "\\s| ", regular, nocasesense, nohilight ;
message "HTTP selected. tc=" + str( ##tc ) + ". y=" + str( y ) + ". x=" +
str( x ) ;
escape ;
NextTarget:
// escape ;
##tc = ##tc + 1 ;
}
// escape ;
message "Complete DeleteURLparameta. y=" + str( y ) + ", x=" + str( x ) ;
endmacro ;
==================== 試作マクロ2 =============================
// URL修正マクロ
// gofiletop ;
call URL ;
message "Macro end." ;
gofiletop ;
enabledraw ;
endmacro ;
URL:
gofiletop ;
while( 1 ) {
searchdown2 "https?://", regular, nocasesense, nohilight ;
if( false == result ) break ;
##hy = y ; ##hx = x ;
beginsel ;
selectline ;
message "un=" + str( ##un ) + ", hy=" + str( ##hy ) + ", hx=" + str( ##hx
) + ", " + $$url[ ##un ] ;
// call DeleteURLparameta ;
escape ;
message "Returned. y=" + str( y ) + ", x=" + str( x ) + " hy=" + str( ##hy
) + ", hx=" + str( ##hx ) ;
moveto ##hx + 1, ##hy ;
}
endmacro ;
DeleteURLparameta:
message "DeleteURLparameta" ;
$$target[ 0 ] = "/index\\..+" ;
$$target[ 1 ] = "\\?" ;
##tc = 0 ; ##ty = y ; ##tx = x ; ##sx = 0 ;
while( 1 ) {
if ( 2 == ##tc ) break ;
moveto ##tx, ##ty ;
beginsel ;
searchdown2 "\\s| ", regular, nocasesense, nohilight ;
##sx = x ;
message "URL end. y=" + str( y ) + ". sx=" + str( ##sx ) ;
// searchdown2 $$target[ ##tc ], regular, nocasesense, nohilight ;
searchdown2 $$target[ ##tc ], regular, nocasesense, inselect, nohilight ;
if ( false == result ) message "Target not found. tc=" + str( ##tc ) + ".
y=" + str( y ) ;
if ( false == result ) goto NextTarget ;
if ( 0 == ##tc ) moveto x + 1, y ;
beginsel ;
searchdown2 "\\s| ", regular, nocasesense, nohilight ;
message "HTTP selected. tc=" + str( ##tc ) + ". y=" + str( y ) + ". x=" +
str( x ) ;
escape ;
NextTarget:
// escape ;
##tc = ##tc + 1 ;
}
// escape ;
message "Complete DeleteURLparameta. y=" + str( y ) + ", x=" + str( x ) ;
endmacro ;
=========================================================================
『サンプルテキスト』が動作確認用サンプルテキストです。
現在は全ての行がURL文字列で始まっていますが、本番ではURL文字列の前にHP名など
が存在する場合があります。
URL文字列の後ろには記事公開日やライター名などが追加されることが有ります。
『試作マクロ1』が試作中のマクロです。
サブルーチンURLがURL文字列を検索する無限ループになっています。
URL文字列が見つからない場合にループを抜け、サブルーチンからも抜け、試作マク
ロからも抜けます。
URL文字列を見つけると、サブルーチンDeleteURLparametaを呼び出します。
サブルーチンDeleteURLparametaから帰ってくるとカーソルを一つ進めて次のURL文字
列を探します。
URL末尾の余分な文字列を削除するのがサブルーチンDeleteURLparametaです。
writeデバッグ用message文が各所にあるのはご愛嬌と言う事で。
実行すると、何故か2番目の
https://news.yahoo.co.jp/categories/domestic/? 2020
の?が選択された後にサブルーチンURLから抜けてしまいます。
抜けた後にもマクロから抜けたことを知らせるmessage文があるのですが、なぜかこ
れが実行されないのも謎です。
そしてマクロが終了してしまいます。
サブルーチンURLとDeleteURLparametaのどちらにバグがあるのかを切り分けるため、
サブルーチンURLのコメント位置を移動させたのが『試作マクロ2』です。
サブルーチンDeleteURLparametaを呼び出さないようにコメントアウトしてあります。
これを実行すると、4行すべてのURL文字列を見つけていることを確認できます。
なのでDeleteURLparametaにバグがあるように見えるのですが、『試作マクロ1』の実
行結果ではURLにバグがあるように見えます。
宜しくお願いします。
|
|