■ QGREP ■

前へ 次へ
No. 131 (130へのコメント)投稿者: CINEPHILE日付: 2003/01/22 21:12:10
題名 : Re^3:マッチした場所に文字列を出力

>しかし、複雑な検索<例えば、「( A or B or C ) and ( D or E or F )」のような>
>をやっているためなにぶん手間がかかります。

 QGREP.INI から最新の履歴を取得して、すべての文字列に関して一括置換を
実行するという手順で半自動化することは、理屈の上では可能だとは思います
が、これだけ条件が複雑だと、まず文字列をすべて取り出すのが大変かもしれ
ません。
 QGREP が取り出せるのだから、マクロで取り出せないはずはありませんが、
文字列には当然正規表現が含まれる可能性もあるので、あれこれ考えると、や
はりかなりハードルが高そうです。

# ちょっと長くなるので、いったん切ります。

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 (130へのコメント)投稿者: CINEPHILE日付: 2003/01/23 18:36:07
題名 : Re^3:マッチした場所に文字列を出力

 一応こんなの作ってみましたが、どうでしょうか?



'QGREPの検索語の直前に文字列を挿入

#comment
・QGREP.INIから自動的に最新の履歴を取得するので、検索終了後、検索結果
  をQXで開いた状態で実行する。
・2行連結には対応していない。
#comment

const c$ = "◎"  '挿入する文字列

proc main
	dim ini$,case,regexp
	dim s$,ss$,item$[10],i,case_sensitive,line,byte,top
	if @hwnd = 0 then exit proc
	'QGREPをQXと別のディレクトリにインストールしている場合は
	'QGREP.INIをフルパスで指定する。(例)ini$ = "C:\QGREP\QGREP.INI"
	ini$ = @@QxDirectory$+"\QGREP.INI"
	if dir$(ini$) = "" then
		call msgbox("QGREP.INIがありません。",MB_ICONINFORMATION)
		exit proc
	end if
	s$ = getprofile$("search","string0",ini$)  '最新の検索履歴を取得
	if s$ = "" then
		call msgbox("履歴がありません。",MB_ICONINFORMATION)
		exit proc
	end if
	case = val(getprofile$("search","Case",ini$))
	regexp = val(getprofile$("search","Regular",ini$))
	i = 1
	do while s$ <> ""
		if instr(s$," ") = 0 then
			ss$ = s$
			s$ = ""
		else
			ss$ = left$(s$,instr(s$," ")-1)
			s$ = mid$(s$,instr(s$," ")+1)
		end if
		if ss$ <> "and" and ss$ <> "or" and ss$ <> "not" \
				and ss$ <> "(" and ss$ <> ")" then
			item$[i++] = ss$
		end if
	loop
	@@ReplaceStringMulti
	case_sensitive = @@FindCaseSensitive
	if case = 0 then
		@@FindCaseSensitive = 1
	else
		@@FindCaseSensitive = 0
	end if
	i = 1
	if regexp = 1 then
		@@FindRegExp = 1:@@FindRegExp = -2
		do while item$[i] <> ""
			@@ReplaceStringMulti "\("+item$[i]+"\)",c$+"\1"
			i++
		loop
	else
		do while item$[i] <> ""
			@@ReplaceStringMulti item$[i],c$+item$[i]
			i++
		loop
	end if
	@Redraw = 0:@UndoBlock = 1
	line = @Line:byte = @BytePos:top = @TopLine
	@MoveFileTop  'ファイルの先頭から実行
	@ReplaceStringMultiExec 1
	@Line = line:@BytePos = byte:@TopLine = top
	@Redraw = 1:@UndoBlock = 0
	@@FindCaseSensitive = case_sensitive
end proc

No. 134 (133へのコメント)投稿者: さと日付: 2003/01/27 02:12:48
題名 : Re^4:マッチした場所に文字列を出力

CINEPHILEさん、ありがとうございました。

マクロのことはあまり分からないのですがトライしてみます。

No. 135投稿者: Ywei日付: 2003/05/25 22:44:37
題名 : タグジャンプ

Ywei です。こんばんわ。

タグジャンプすると同時に、目的の文字列にカーソルを移動させるマクロについて
教えてください。下記(1)のマクロ(QACLICK.MACよりコピー)を削除して
下記(2)のマクロを挿入すればよいのでしょうか?
(2)のマクロは、かぶねこさん紹介の「QXの導入(2)−付属ツール」よりコピーしました。


(1)
proc AutoClicked
	'stopdestroykey 3
	if @@ClickableURL then
		if fdbl = 0 then httpJump
	end if
end proc

(2)
proc AutoClicked
    dim s$, n
    if @Pathname$ = "(無題)" then
        s$ = @TextCr$(@Line)
        '次行で QGREP の設定「その他」のファイル名見出しを設定
        if left$(s$,1) = "◆" and right$(s$,1) = ":" then
            s$ = @TextCr$(@Line + 1)
        '次行で QGREP の設定「その他」のマッチした場所文字列を設定
            n = instrb(s$, "◆")
            @Tagjump
            @BytePosCr = n
            if @Code > &h7E then
                imemode 1
            else
                imemode 2
            end if
            exit proc
        end if
    end if
end proc

以上よろしくお願いします。

No. 136投稿者: sawada HP日付: 2003/05/26 11:27:44
題名 : 検索結果出力テキストの書式

はじめまして
QGREPを使用させて頂いている者です。
EUCコード等に対応したGREPソフトが見つからない為、大変重宝しております。

当方では現在、他のエディタ(EmEditor ver3.34)と組み合わせて使用しているのですが、EmEditorでは行番号が括弧閉じでないとタグジャンプが出来ない使用のようです。

そこで誠に勝手なのですが、出力するテキストの書式を編集できるようになればと考えております。
(QXエディタを使えと怒られますね)

もし今後バージョンアップする予定がございましたら、御一考くだされば幸いです。

No. 137 (135へのコメント)投稿者: かぶねこ HP日付: 2003/05/27 16:17:07
題名 : Re:タグジャンプ

これは QGrep についての質問ではありません。QGrep を QX エディタからどう
使うかについての問題です。マクロについては、基本的にそのマクロを書いた個
人以外への質問は的はずれになります。

また、この方法については、わたしの「QXの導入(2)−付属ツール」のページ
で説明してありますが、説明を読んでよくわからない段階では自動マクロの設定
でミスがあったときに自力で復旧ができない、などの問題もあり、使用の推奨を
していません。

No. 138 (136へのコメント)投稿者: かぶねこ HP日付: 2003/05/27 16:19:35
題名 : Re:検索結果出力テキストの書式

ちょっとご希望の動作とは違うかもしれませんが、EmEditor でもマクロがある
んじゃなかったでしょうか。だとしたら、行数のところをまとめて書き換えてか
らタグジャンプすればよいのでは。タグつき正規表現の置換とかでもできそうで
す。

No. 139 (137へのコメント)投稿者: Ywei日付: 2003/05/28 18:43:20
題名 : Re^2:タグジャンプ

>これは QGrep についての質問ではありません。QGrep を QX エディタからどう
>使うかについての問題です。マクロについては、基本的にそのマクロを書いた個
>人以外への質問は的はずれになります。
>
実は、この質問を掲載する場所についてしばし考えましたが、関連するものと思いここに掲載いたしました。

>また、この方法については、わたしの「QXの導入(2)−付属ツール」のページ
>で説明してありますが、説明を読んでよくわからない段階では自動マクロの設定
>でミスがあったときに自力で復旧ができない、などの問題もあり、使用の推奨を
>していません。

上記の説明でよく分かりました。かぶねこ さん、有難うございます。ところで、質問があるのですが、Hidemaru Editor の場合、GGREP実行したあと、タグジャンプの機能がついていますが、QX Editor上で、これと似たようなことはできるのでしょうか?是非教えてください。

No. 140 (139へのコメント)投稿者: Ywei日付: 2003/05/28 18:50:31
題名 : Re^3:タグジャンプ

>>これは QGrep についての質問ではありません。QGrep を QX エディタからどう
>>使うかについての問題です。マクロについては、基本的にそのマクロを書いた個
>>人以外への質問は的はずれになります。
>>
>実は、この質問を掲載する場所についてしばし考えましたが、関連するものと思いここに掲載いたしました。
>
>>また、この方法については、わたしの「QXの導入(2)−付属ツール」のページ
>>で説明してありますが、説明を読んでよくわからない段階では自動マクロの設定
>>でミスがあったときに自力で復旧ができない、などの問題もあり、使用の推奨を
>>していません。
>
>上記の説明でよく分かりました。かぶねこ さん、有難うございます。ところで、質問があるのですが、Hidemaru Editor の場合、GGREP実行したあと、タグジャンプの機能がついていますが、QX Editor上で、これと似たようなことはできるのでしょうか?是非教えてください。

自己レス。タイプミスがありましたので、訂正します GGREP → GREP が正解です。

次へ
現在の既読番号は 0  既読を


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

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