使用textstream object 将制表符替换为空格并删除字符

Using textstream object to replace tab with spaces and delete characters

我有超过一千个 .s2p 文件(电气测试设备使用的带分隔符的文本文件)由 VBA 宏编辑,它在 Excel 中打开每个原始文件作为 tab-and-space分隔的文本文件,并用另一个文件中的数据列替换了一些列,然后将它们保存为原始格式(.s2p)并关闭它们。这是我用来打开每个文件的调用:

    Call Application.Workbooks.OpenText(Filename:=(path & filename & ".s2p"), Origin:="437", DataType:=xlDelimited, ConsecutiveDelimiter:=True, Tab:=True, Space:=True, TextQualifier:=xlTextQualifierNone)

现在,当我在记事本中打开 .s2p 文件查看它们时,原来的单个 space 分隔列现在是一个完整的选项卡,并且一些双引号 (") 字符被添加到一些文件 header 行(尽管将 TextQualifier 参数设置为 xlTextQualifierNone...)

因此,我想编写另一个宏,它可以再次打开所有这些 .s2p 文件,遍历各行,并将所有双引号替换为空格,将所有制表符替换为单个 spaces。我打算在每个文件上使用 .OpenAsTextStream,但 TextStream object 似乎不支持覆盖行,但只能写新行...

有没有比从原始文件中读取行并将它们写入新创建的文件更好的方法来实现我正在尝试做的事情?我必须将最终文件保存为“.s2p”而不是“.txt”。

您不需要文本流,只需要 VBA 中可用的基本输入输出操作。

Option Explicit

Sub test()
    FixFile "c:\temp\mytestfile.s2p"
End Sub

Sub FixFile(filename As String)
    Dim fnum As Integer
    Dim fileText As String
    Dim finalText As String

    fnum = FreeFile
    On Error Resume Next
    Open filename For Input As #fnum
    If Err.Number <> 0 Then
        Debug.Print "Critical error attempting to open " & filename & _
                    ". Error #" & Err.Number & ": " & Err.Description
        Exit Sub
    End If

    finalText = ""
    Do Until EOF(fnum)
        Line Input #fnum, fileText
        fileText = Replace(fileText, """", " ", , , vbTextCompare)
        fileText = Replace(fileText, vbTab, " ", , , vbTextCompare)
        finalText = finalText & fileText & vbCrLf
    Loop
    Close fnum

    fnum = FreeFile
    Open filename For Output As #fnum
    Print #fnum, finalText
    Close fnum

End Sub

Edited to show line by line read with a final write.