■ QGREP ■

132 にジャンプ
No. 128 題名 : マッチした場所に文字列を出力 投稿者 : さと
No. 129 題名 : Re:マッチした場所に文字列を出力 投稿者 : CINEPHILE
No. 130 題名 : Re^2:マッチした場所に文字列を出力 投稿者 : さと
No. 131 題名 : Re^3:マッチした場所に文字列を出力 投稿者 : CINEPHILE
No. 132 (130へのコメント)投稿者: CINEPHILE日付: 2003/01/22 21:13:35
題名 : Re^3:マッチした場所に文字列を出力

>また、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

No. 133 題名 : Re^3:マッチした場所に文字列を出力 投稿者 : CINEPHILE
No. 134 題名 : Re^4:マッチした場所に文字列を出力 投稿者 : さと

全テキストを表示
順番に表示(No. 132 から)


メールアドレスを表示するにはURLの後ろに &m=6947ef7c をつけてください。
フォーラム一覧

http://www2k.biglobe.ne.jp/~araken/
http://0ban.com/araken/