- 締切済み
テキストの読み込みと置換について
どなたかご教授ください。 VBでテキストファイルを読み込ませ、指定した部分を置換させて、保存したいのです。そんなことできますか。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ARC
- ベストアンサー率46% (643/1383)
VBのバージョンによって、少し異なります。 VB6でしたら、Replace関数が使えるかと思いますので、置換は楽チンですね。VB5以前でしたら、Replace関数を自作してやらなくてはいけません。 とりあえず、VB5でも動作可能なプログラムです。(手元にあるのがVB5なんで) 特定の範囲だけ置換したいとかの特殊な要望があるときは、適宜書き換えてください。 Private Sub Command1_Click() Dim Dat As String 'ファイルから読み込んだ内容を格納する変数 Dim InFile As Integer, OutFile As Integer 'ファイル番号 Dim Counter As Long '対象ファイルをバックアップ(バックアップから読み込んで、元のファイル名で書き出す。) on error resume next FileCopy "c:\…\xxxx.txt", "c:\…\xxxx.bak" if err<>0 then msgbox "ファイルが使えない" exit sub end if Kill "c:\…\xxxx.txt" 'ファイルを開く(読み込むファイルと書き出すファイル) InFile = FreeFile() 'ファイル番号の空きを取得 Open "c:\…\xxxx.bak" For Input As #InFile OutFile = FreeFile() Open "c:\…\xxxx.txt" For Output As #OutFile 'ファイルの末尾に達するまで1行ずつ読み込み、置換し、書き出す Counter = 0 Do Until EOF(InFile) Line Input #InFile, Dat 'ファイルから1行読み込み、変数Datに格納する Counter = Counter + ReplaceString(Dat, "置換前の文字", "置換後の文字") '置換 Print #OutFile, Dat '書き出す Loop 'ファイルを閉じる Close #InFile Close #OutFile 'バックアップを削除 Kill "c:\…\xxxx.bak" '終了 MsgBox "完了!!" & vbNewLine & Counter & " 回置換しました。" End Sub Private Function ReplaceString(ByRef SrcString As String, FndStr As String, RepStr As String) As Long '文字列を置換する。戻り値は置換した個数。 Dim DelStrPos As Long Dim SrcStart As Long Dim RepLen As Long Dim FndLen As Long '検索開始位置を設定 SrcStart = 1 'ループの外に出せる計算式は、あらかじめ計算しておく RepLen = Len(RepStr) FndLen = Len(FndStr) Do '置換対象文字列の位置を検索 DelStrPos = InStr(SrcStart, SrcString, FndStr, vbBinaryCompare) '見つからなかったら(置換完了で)ループを抜ける If DelStrPos = 0 Then Exit Do 'カウンタの値(置換個数)を1つ増やす ReplaceString = ReplaceString + 1 '置換 SrcString = Left$(SrcString, DelStrPos - 1) & RepStr _ & Right$(SrcString, Len(SrcString) - DelStrPos - FndLen + 1) '検索開始位置を設定し直す(置換後の文字列を検索しないため) SrcStart = DelStrPos + RepLen Loop End Function
- mfuku
- ベストアンサー率50% (173/345)
可能です。 Openステートメントでテキストファイルを開き、 テキストを読み込み、 Replace関数で文字列の置換を行い、 テキストを書き戻し、 Closeステートメントでテキストファイルを閉じる という手順です。
お礼
ありがとうございます。とりあえずやってみます。また解らないことがあったらよろしくお願いします。
お礼
ありがとうございます。私の環境はVB6の方なので、Replace関数の方を使わせていただきます。 自分の環境を説明せずに質問して大変ご迷惑おかけしました。ただ構文の考え方が大変参考になりました。