excel - 如何在 VBA 中使用 FileSystemObject 替换文本文件行中的字符串?

标签 excel file vba text filesystemobject

我尝试使用 FileSystemObject 方法在文本文件中查找特定行,并在该行中替换特定字符串。我对此相对较新,因为我当前的代码已使用 Excel 打开文本文件并替换我需要替换的内容,然后保存并关闭它。这种方式不再是一种选择,因为用 Excel 打开文本文件需要太长时间并占用文件。

这就是我到目前为止所取得的进展。

-

Sub FindLines()

Const ForReading = 1

Set FSO = CreateObject("Scripting.FileSystemObject")

Set objFSO = FSO.OpenTextFile("C:\Users\Carella Home\Desktop\boomboom.txt", ForReading,     False)

Do Until objFSO.AtEndOfStream = True

    go = objFSO.ReadLine

    If InStr(1, go, "ant", vbTextCompare) > 0 Then

        bo = Replace(go, "t", "wow")

    End If

Loop

objFSO.Close

Set objFSO = FSO.OpenTextFile("C:\Users\Carella Home\Desktop\boomboom.txt", 2)

End Sub

-

我能做的最好的事情就是打开文件进行写入,但我不知道如何找到该行并将其替换为我需要替换的行。

如果您愿意帮助/指导我正确的方向,请告诉我您是否需要更多信息。我进行了很多搜索,并看到人们提出了其他方法来做到这一点。我需要学习如何以这种方式编辑线条。有人可以帮我吗?

提前致谢!

-安东尼·C.

最佳答案

不确定这是否是最有效的方法,但一个想法是使用 CreateTextFile FileSystemObject 的方法,创建另一个可以写入的文件。

我已经在一个小文件上对此进行了测试,并且似乎按预期工作。

接受答案后进行修改以避免 .ReadLine.WriteLine 循环

Sub FindLines()
'Declare ALL of your variables :)
Const ForReading = 1    '
Const fileToRead As String = "C:\Users\david_zemens\Desktop\test.txt"  ' the path of the file to read
Const fileToWrite As String = "C:\Users\david_zemens\Desktop\test_NEW.txt"  ' the path of a new file
Dim FSO As Object
Dim readFile As Object  'the file you will READ
Dim writeFile As Object 'the file you will CREATE
Dim repLine As Variant   'the array of lines you will WRITE
Dim ln As Variant
Dim l As Long

Set FSO = CreateObject("Scripting.FileSystemObject")
Set readFile = FSO.OpenTextFile(fileToRead, ForReading, False)
Set writeFile = FSO.CreateTextFile(fileToWrite, True, False)

'# Read entire file into an array & close it
repLine = Split(readFile.ReadAll, vbNewLine)
readFile.Close

'# iterate the array and do the replacement line by line
For Each ln In repLine
    ln = IIf(InStr(1, ln, "ant", vbTextCompare) > 0, Replace(ln, "t", "wow"), ln)
    repLine(l) = ln
    l = l + 1
Next

'# Write to the array items to the file
writeFile.Write Join(repLine, vbNewLine)
writeFile.Close

'# clean up
Set readFile = Nothing
Set writeFile = Nothing
Set FSO = Nothing

End Sub

然后,根据您是否想要删除“原始”文件,您可以执行以下操作:

'# clean up
Set readFile = Nothing
Set writeFile = Nothing
'# Get rid of the "old" file and replace/rename it with only the new one
Kill fileToRead
Name fileToWrite As fileToRead
End Sub

关于excel - 如何在 VBA 中使用 FileSystemObject 替换文本文件行中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19371990/

相关文章:

java - 与 Java 的 XML 文件比较

regex - 在 word/VBA 中查找超过一个大写字母的单词

vba - 在运行时隐藏 Excel 应用程序

vba - 在vba中更改工作簿后如何保留剪贴板数据?

arrays - Excel VBA - 将数字数组的值移动一个常量而不循环

vba - 如何动态填充自定义功能区上的菜单控件?

Excel VBA,工作表中的代码不起作用

python - Pandas :如何在导出到 Excel 后格式化单元格

r - 根据内容确定R中的文件类型

java - Java中通过分隔符行分割文件