【问题标题】:vbscript replacing text without overwriting in a text filevbscript 替换文本而不覆盖文本文件
【发布时间】:2015-11-10 16:18:28
【问题描述】:

以下是我已经编写的脚本的一部分:

For i = 1 to arrsize 
    strText=""
    Set objFile = objFSO.OpenTextFile(filetable(i), ForReading)
    wscript.echo filetable(i)
    On Error Resume Next
        Do Until objFile.AtEndOfStream
            strline = objFile.ReadLine
            If instr(strline, source_string) > 0 Then
                wscript.echo strline
                Do Until instr(strline, " TEXT ") > 0 or instr(strline, Chr(9) & "TEXT ") 
                    strline = objFile.ReadLine
            Loop
                strNewText = Replace(strline, "TEXT " & Chr(34), "TEXT " & Chr(34) & "Critical: ",1,-1,0)
                wscript.echo strNewText
'up to here everything is OK

            Set objFile = objFSO.OpenTextFile(filetable(i), ForWriting)
                objFile.WriteLine strNewText
                objFile.close
'The three line above are overwriting the text file
            End If`enter code here`
        Loop
Next

我的脚本是在文件数组中搜索在 source_string 变量中注册的特定字符串,然后如果匹配,则应搜索以空格或制表符开头的“TEXT”单词,当匹配时,它将替换按照以下格式使用同一行: 文本“关键:****”。 我希望它很清楚,并提前感谢

【问题讨论】:

    标签: vbscript


    【解决方案1】:

    我认为在这里您再次打开文本文件,然后从流的开头开始,因此是第一行(而不是找到的行):

            Set objFile = objFSO.OpenTextFile(filetable(i), ForWriting)
                objFile.WriteLine strNewText
                objFile.close
    

    也许您应该尝试打开文件进行读写,readline,当您找到 str 时,然后更改该行并继续...

    【讨论】:

    • 对不起,请您核实一下;我是 vbscript 的新手。无论如何要替换找到的文本而不是覆盖所有内容
    • 是的,当你开始阅读你的文件时,Readline 返回一个字符串,所以当你搜索你的目标字符串然后你得到strNewText。现在,你还在同一行,不要关闭文件或跳转到下一行,只需writeline(strNexText)然后跳转到下一行,直到到达EndofStream
    • 我试过这种方式,但是脚本没有继续(没有提示)并且没有任何内容写入文件
    • 抱歉,它确实写入了文件;再次,脚本不会继续,它会用 strNewText 覆盖文件的内容
    • 你打开的是什么文件?他们有换行吗?
    【解决方案2】:
    For i = 1 to arrsize
    Set objFile = objFSO.OpenTextFile(filetable(i), ForReading)
    wscript.echo filetable(i)
    On Error Resume Next
    Dim filearray()
    Linenb = 0
    Do Until objFile.AtEndOfStream
        Linenb = Linenb + 1
        Redim Preserve filearray(Linenb)
        filearray(Linenb) = objFile.ReadLine
    '       wscript.echo filearray(Linenb)
            If instr(filearray(Linenb), source_string) > 0 Then
    '           wscript.echo filearray(Linenb)
                Do Until instr(filearray(Linenb), " TEXT ") > 0 or instr(filearray(Linenb), Chr(9) & "TEXT ") 
                    Linenb = Linenb + 1
                    Redim Preserve filearray (Linenb)
                    filearray(Linenb) = objFile.ReadLine
    '               wscript.echo filearray(Linenb)
                Loop
                filearray(Linenb) = Replace(filearray(Linenb), "TEXT " & Chr(34), "TEXT " & Chr(34) & "Critical: ",1,-1,0)
    '           wscript.echo filearray(Linenb)
            End If
    Loop
    For j = 1 to Linenb
        Set objFile = objFSO.OpenTextFile(filetable(i), ForWriting)
        objfile.WriteLine filearray(j)
    Next
    Redim Preserve filearray (1)
    

    下一个

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 2012-04-15
      • 2020-03-28
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多