- ベストアンサー
テキストファイルを読み込み 偶数行の特定の文字を置換するには?
お世話になります。 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
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
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
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
'一度に書き込み 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
<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 関数を利用しています。 ※が、基本的なルーチンは変らないと思います。
お礼
ありがとうございます。 非常にわかりやすかったです。
お礼
ありがとうございます。 fileをセーブする関数はどうやってやるんでしょうか? 教えて下さい。