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

时间:2016-04-05 16:22:32

标签: excel vba excel-vba replace filesystemobject

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

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

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

因此我想写另一个宏,它可以再次打开所有这些.s2p文件,遍历这些行,并用空格替换任何双引号,以及任何带有单个空格的选项卡。我计划在每个文件上使用.OpenAsTextStream,但似乎TextStream对象不支持覆盖行,但只能写新行......

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

1 个答案:

答案 0 :(得分:2)

您不需要文本流,只需要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
  

编辑以逐行显示最终写入。