• ベストアンサー

テキストファイルを読み込み 偶数行の特定の文字を置換するには?

お世話になります。 vb6なんですけどテキストファイルを読み込んで 偶数行のある文字を置換したいんですけど このサンプルをどういう風に改変して偶数行の文字列をある文字列に 置換するコードを書いてよいのかわかりません。 置換するのはreplace関数を使うと思うのですが。 教えて下さい。お願いします。 Dim n As Long, tmp As String n = FreeFile Open "D:\Test.txt" For Input As #n Line Input #n, tmp Close #n

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

Sub Test()   Dim l_strBuff  As String     '一度に読み込み   l_strBuff = ReadFile("C:\test.txt")      '偶数行の置き換え   l_strBuff = Replase偶数(l_strBuff, "AA", "ZZ") End Sub '偶数行の置き換え Private Function Replase偶数(p_strBuff As String, str1 As String, str2 As String) As String   Dim l_varBuff  As Variant   Dim i      As Long      l_varBuff = Split(p_strBuff, vbCrLf)      For i = LBound(l_varBuff) + 1 To UBound(l_varBuff) Step 2     l_varBuff(i) = Replace(l_varBuff(i), str1, str2)   Next i      Replase偶数 = Join(l_varBuff, vbCrLf) End Function '一度に読み込み Private Function ReadFile(p_strPath As String) As String   Dim l_fsoObj  As Object  'Scripting.FileSystemObject   Dim l_rstTxt  As Object  'Scripting.TextStream   Dim l_strRet  As String      Set l_fsoObj = CreateObject("Scripting.FileSystemObject")   Set l_rstTxt = l_fsoObj.OpenTextFile(p_strPath, 1)      l_strRet = l_rstTxt.ReadAll()   l_rstTxt.Close         ReadFile = l_strRet End Function

mixiho
質問者

お礼

ありがとうございます。 fileをセーブする関数はどうやってやるんでしょうか? 教えて下さい。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

Sub test01() Dim ln As Long, tmp As String ln = 0 Open "C:\Documents and Settings\XXXX\My Documents\test.txt" For Input As #1 Open "C:\Documents and Settings\XXXX\My Documents\Testo.txt" For Output As #2 While Not EOF(1) Line Input #n, tmp ' MsgBox tmp ln = ln + 1 ' MsgBox Ln - 2 * Int(Ln / 2) If ln - 2 * Int(ln / 2) = 0 Then tmpx = Replace(tmp, "bbb", "CCCC") Else tmpx = tmp End If Print #2, tmpx Wend Close #1 Close #2 End Sub 旧いスタイルですが、良ければ。 例 aaabbbxxx ssddbbbgggg ddcvbbb ffghbbbbmmm ↓ aaabbbxxx ssddCCCCgggg ddcvbbb ffghCCCCbmmm

回答No.3

'一度に書き込み Private Sub WriteFile(p_strPath As String, p_strBuff As String)   Dim l_fsoObj  As Object  'Scripting.FileSystemObject   Dim l_wstTxt  As Object  'Scripting.TextStream   Set l_fsoObj = CreateObject("Scripting.FileSystemObject")   '第二引数:1は読み込み   '第二引数:2は書き込み   '第二引数:8は追加   '第三引数:Trueは、ファイルが存在していなければ作成する   Set l_wstTxt = l_fsoObj.OpenTextFile(p_strPath, 2, True)   l_wstTxt.Write p_strBuff   l_wstTxt.Close End Sub

noname#22222
noname#22222
回答No.1

<C:\Temp\Test.txt> 001: AABBCC 002: AABBCC 003: AABBCC 004: AABBCC 1 001: AABBCC 2 002: AABBCC 3 003: AABBCC 4 004: AABBCC 5 行カウンターとデータを上のように表示するコードは次のようです。 Private Sub コマンド0_Click()   Dim I    As Integer   Dim strData As String      Do     strData = FileRead("C:\Temp\Test.txt")     I = I + 1     Debug.Print I     Debug.Print strData   Loop Until strData = "" End Sub 表示を偶数行だけに限定する。 無行もスキップする。 などの条件を付加したコードは以下のようです。 Private Sub コマンド0_Click()   Dim I    As Integer   Dim strData As String      Do     strData = FileRead("C:\Temp\Test.txt")     I = (I + 1) Mod 2     If I = 0 And strData <> "" Then       Debug.Print I       Debug.Print Replace(strData, "AA", "ZZ")     End If   Loop Until strData = "" End Sub <実行結果> 0 002: ZZBBCC 0 004: ZZBBCC 少し、判定ルーチンを工夫すれば、次のように書くことも可能です。 (strData = "")の減算でIのカウントに狂いが出ますが、どうせ終了するので不具合は発生しません。 Private Sub コマンド0_Click()   Dim I    As Integer   Dim strData As String      Do     strData = FileRead("C:\Temp\Test.txt")     I = (I + 1) Mod 2 + (strData = "")     If I = 0 Then       Debug.Print I       Debug.Print Replace(strData, "AA", "ZZ")     End If   Loop Until strData = "" End Sub ※ここでは、1行づつ読み込む 自作の FileRead 関数を利用しています。 ※が、基本的なルーチンは変らないと思います。

mixiho
質問者

お礼

ありがとうございます。 非常にわかりやすかったです。

関連するQ&A