Как заменить строку в строке текстового файла с помощью FileSystemObject в VBA?

Я пытаюсь использовать методы filesystemobject, чтобы найти определенную строку в текстовом файле, и в этой строке заменить определенную строку. Я относительно новичок в этом, так как мой текущий код excel открывает текстовый файл и заменяет то, что мне нужно, чтобы заменить, а затем сохранить и закрыть его. Этот способ больше не является опцией, так как открытие текстового файла excel занимает слишком много времени и задерживает файл.

вот как далеко я зашел далеко.

-

Sub FindLines()

Const ForReading = 1

Set FSO = CreateObject("Scripting.FileSystemObject")

Set objFSO = FSO.OpenTextFile("C:UsersCarella HomeDesktopboomboom.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:UsersCarella HomeDesktopboomboom.txt", 2)

End Sub

-

лучшее, что я могу сделать, это открыть файл для записи, но я понятия не имею, как найти строку и заменить ее на строку, что мне нужно, чтобы заменить его.

пожалуйста, дайте мне знать, если, в случае, если вы готовы помочь/направить меня в правильном направлении, вам нужна дополнительная информация. Я много искал и видел, как люди предлагают другие способы сделать это. Мне нужно научиться редактировать строки таким образом. Может кто-нибудь пожалуйста, помогите мне?

спасибо заранее!

-Энтони С.

2 ответов


не уверен, что это самый эффективный метод, но одной из идей было бы использовать 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

вот гораздо более быстрый и короткий метод по сравнению с FileSystemObject

Sub Sample()
    Dim MyData As String, strData() As String

    '~~> Read the file in one go!
    Open "C:\Users\Carella Home\Desktop\boomboom.txt" For Binary As #1
    MyData = Space$(LOF(1))
    Get #1, , MyData
    Close #1
    strData() = Split(MyData, vbCrLf)
End Sub

все ваши данные текстового файла теперь в массиве strData просто цикл, хотя массив и найти текст, который вы хотите заменить и записать его обратно в то же самое.