>また、2行にまたっがった単語の場合、QXでは検索や置換はできないのではないでしょうか。
QGREP はおそらく行末の改行を読み込んでいないので、2行を連結した時に、
あたかも途中の改行が無いかのように検索することができるんだと思います。
普通に検索すればこの改行が挟まれるので、これを無視して検索するのは案外
やっかいです。
とりあえず試作品程度ですが、カーソル位置以降を検索して、ヒットした位
置の直前に指定した文字列を挿入します。正規表現は使用できません。大文字
・小文字は区別されます。一度のアンドゥでもとに戻せるので心配ないとは思
いますが、あらかじめ安全なファイルで試してみてください。
通常の検索機能を使用していないので、巨大なファイルで実行すると処理に
時間がかかるかもしれませんが、QGREP の出力程度であれば何とか我慢できる
かと思います。いろいろ制限が多いので、使いにくいかもしれませんが。
const c$ = "◎" '挿入する文字列
proc main
dim w$,s$,length,pos,ret,i
if @hwnd = 0 then exit proc
dialog "検索語入力",150,100,150,12,0,"MS ゴシック",-14
control "",100,"EDIT",ES_AUTOHSCROLL|WS_TABSTOP,0,0,150,12
control "",IDOK,"BUTTON",0,0,0,0,0
control "",IDCANCEL,"BUTTON",0,0,0,0,0
do while 1
ret = dialog(1)
if ret = IDCANCEL then exit proc
if ret = IDOK then
if dlgtext$(100) <> "" then
w$ = dlgtext$(100)
call dialog(0)
exit do
end if
end if
loop
@Redraw = 0:@UndoBlock = 1
do while @Line < @LastLine
pos = 1:i = 0
s$ = @TextCr$(@Line)
length = lenb(s$)
@MoveNextLineCr
s$ = s$+@TextCr$(@Line)
@MovePrevLineCr
do while instrb(pos,s$,w$) > 0
pos = instrb(pos,s$,w$)
if pos > length then exit do
@BytePosCr = pos+lenb(c$)*i++
@Insert c$
pos = pos+1
loop
@MoveNextLineCr
loop
@Redraw = 1:@UndoBlock = 0
end proc |