我有超过一千个.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”。
答案 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
编辑以逐行显示最终写入。