質問: 置換?について いつもお世話になっております。sako77です。 今回は置換?について質問させていただきます。 ファイルa(テキストファイル)に以下のような文章があります。 例) おはようございます。今日も●●●です。こんにちは。今日も◆◆◆◆です。おやすみ今日も■■です。・・・ 上記のようなテキスト文章から「今日も」から「です」の間の文字列を抽出し、別テキストファイルbに ●●●● ◆◆◆◆ ■■ のように出力したいのですが、こんなことはできるのでしょうか? エクセルかアクセス又はこんなことができるソフトがあれば教えてください。 よろしくお願い致します。
回答: こんばんは。 すでに回答は出ていますが、こんな風な感じにしてみたらいかがでしょうか。なお、excel2000などの下位バージョンでは、この方法は、処理行が大量の場合は、うまく行かないことがあります。 実際、 >エクセルかアクセス又はこんなことができるソフトがあれば教えてください。 テキスト -> テキストで、あえて、excelなどのvbaを使う必要性はないようには思います。 vbscript でも可能です。 なお、「今日もxxxx axxaxです。」の xxxx axxax は、抜き出せても、 「今日もxxxx axxaxです」は、抜き出せないようなパターンになっています。出力側が予め決められていて、アペンドモードになっています。入力側は、このマクロではダイアログ選択になっています。 sub regexptest() dim matches as object 'matchcollection dim match as object 'match dim filename as string dim textline as string dim buf as string dim infno as integer dim outfno as integer dim outfname as string '出力用ファイル名(要設定--質問中のテキストファイルb) outfname = application.defaultfilepath & "\" & "outtest.txt" if dir(outfname) = "" then msgbox outfname & vbcrlf & "出力ファイルがありません。", 48 exit sub end if '検索用ファイル(質問中のテキストファイルa) filename = application.application.getopenfilename _ ("テキストファイル(*.txt),*.txt") if filename = "false" then exit sub if strcomp(filename, outfname, 1) = 0 then msgbox "出力ファイルは選べません。", 48 exit sub end if with createobject("vbscript.regexp") .pattern = "今日も([^(です)]+)です。" .global = true infno = freefile() open filename for input as #infno do while not eof(infno) line input #infno, textline if .test(textline) then set matches = .execute(textline) for each match in matches buf = buf & vbcrlf & .replace(match, "$1") next end if loop close #infno buf = mid$(buf, 3) outfno = freefile() if len(buf) > 1 then open outfname for append as #outfno print #outfno, buf close #outfno beep end if end with end sub