Найти и заменить строку в файле .txt с помощью VBscript

Я пытаюсь выяснить, как использовать vbscript, чтобы:
1 – открыть файл .csv как файл .txt
 2 – найти определенную строку текста, расположенную случайным образом в тексте 3 – заменить ее строка с другой строкой.

Я нашел статью, которая помогла мне узнать, как заменить всю строку в документе .txt, но до сих пор мне не удавалось найти что-либо о замене только определенных символов в строке.

Спасибо!

Вот код, который я использую в настоящее время:

Const ForReading = 1
Const ForWriting = 2

'Setting up our objects and focusing on the text file.
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Users\Documents\Script Practice\TextFiles-2-4-15-Folder\ReadandWrite\Textlook.txt", ForReading)


Do Until objFile.AtEndOfStream

    strLine = objFile.ReadLine


    If strLine = "Myer" Then
        strLine = "Mike"
    End If

    strContents = strContents & strLine & vbCrLf

Loop



objFile.Close


Set objFile = objFSO.OpenTextFile("C:\Users\Documents\Script Practice\TextFiles-2-4-15-Folder\ReadandWrite\Textlook.txt", ForWriting)


objFile.Write(strContents)
objFile.Close

Текстовый файл, на который он ссылается, гласит:
Ken Myer
Fabrikam

Пилар Акерман
Wingtip Toys

Джефф Хэй
Fabrikam

Эллен Адамс
Торговцы Northwind

Майер

(Конец текстового файла). По сути, я получил код для успешного изменения «Майер», который находится в отдельной строке, на «Майк». С чем у меня проблемы, так это с заменой «Майер» в первой строке на «Майк». Надеюсь, это поможет немного прояснить ситуацию... Я очень новичок в этом, поэтому не уверен, какой язык следует использовать для описания проблемы.


person M199463    schedule 05.02.2015    source источник
comment
Пожалуйста, продемонстрируйте, что вы пробовали до сих пор, и, возможно, мы сможем помочь вам понять, что вы делаете неправильно.   -  person rory.ap    schedule 05.02.2015
comment
Я добавил некоторые изменения в свой вопрос, чтобы, надеюсь, помочь.   -  person M199463    schedule 06.02.2015


Ответы (2)


Используйте Заменить содержимое файла, полученное с помощью .ReadAll(), и .Запишите результат обратно. В коде:

Option Explicit

Dim goFS  : Set goFS  = Createobject("Scripting.FileSystemObject")
Dim goWAU : Set goWAU = WScript.Arguments.Unnamed

WScript.Quit main()

Function main()
  main = 1 ' assume error
  If 3 = goWAU.Count Then
     If goFS.FileExists(goWAU(0)) Then
        Dim s : s = goFS.OpenTextFile(goWAU(0)).ReadAll()
        If 0 < Instr(s, goWAU(1)) Then
           goFS.CreateTextFile(goWAU(0)).Write Replace(s, goWAU(1), goWAU(2))
           WScript.Echo "done"
           main = 0
        Else
           WScript.Echo goWAU(1), "not found"
        End If
     Else
        WScript.Echo goWAU(0), "does not exist"
     End If
  Else
     WScript.Echo "need 3 args: fspec, find, replacement"
  End If
End Function

вывод:

copy con 28350055.csv
1,2,3
4,5,6
^Z

cscript 28350055.vbs 28350055.csv 5 4711
done

type 28350055.csv
1,2,3
4,4711,6

cscript 28350055.vbs 28350055.csv 5 4711
5 not found

cscript 28350055.vbs 28350055.cs 5 4711
28350055.cs does not exist

Используйте эту демонстрацию, чтобы определить, что необходимо для решения вашей реальной проблемы.

person Ekkehard.Horner    schedule 05.02.2015

Я тоже очень новичок, поэтому я не понял, что делает другой ответ в коде, но я понял в последнем ответе о Замените и используйте в своем коде, чтобы делать то, что вам нужно, и результат будет таким:

Const ForReading = 1
Const ForWriting = 2

'Setting up our objects and focusing on the text file.
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Users\Documents\Script Practice\TextFiles-2-4-15-Folder\ReadandWrite\Textlook.txt", ForReading)


Do Until objFile.AtEndOfStream

    strLine = objFile.ReadLine


    strLine = Replace(strLine,"Myer","Mike")

    ' If strLine = "Myer" Then
        ' strLine = "Mike"
    ' End If

    strContents = strContents & strLine & vbCrLf

Loop



objFile.Close


Set objFile = objFSO.OpenTextFile("F:\BIBLIOTECAS\Archivos\TEST.txt", ForWriting)


objFile.Write(strContents)
objFile.Close
person José Luis Zarabanda Díaz    schedule 24.07.2021