如何从String中提取行

时间:2016-02-04 04:36:39

标签: vbscript

我正在使用此代码完成Thing。

save()

这没关系。 我觉得这不对。如何使这段代码正确。

问题是

如果您看到代码,您会注意到我首先将字符串保存为文件并打开相同内容以便再次阅读。 无论如何我们可以从字符串中提取包含特定字符串的行,以避免它被保存。

修改2

让我在错误的步骤中缩小问题范围。

步骤1.打开文件进行阅读,并将文本作为字符串。工作正常

步骤2.多个正则表达式在字符串中查找和替换。工作正常

步骤3.从具有Left(line,4)=“mmrk”的字符串中提取行,以将所需的行作为字符串。不工作

步骤4.进一步处理行以获得包含所需行的最终字符串.-如果步骤3有效,将起作用。 (它实际上适用于假设的例子)

步骤5.将字符串写入文件。如果第3步有效,将起作用(为假设的例子工作

如何从文件中执行该操作已获得here

2 个答案:

答案 0 :(得分:1)

您使用readlineInstr()

您的代码是针对极端问题的。

这是我使用你的技术过滤线条,以便它可以处理困难的情况。

Set Arg = WScript.Arguments
set WshShell = createObject("Wscript.Shell")
Set Inp = WScript.Stdin
Set Outp = Wscript.Stdout
    'Remove ^ from quoting command line. Quote, ampersand and brackets
    Pttn = Replace(Arg(2), "^(", "(")
    Pttn = Replace(Pttn, "^)", ")")
    Pttn = Replace(Pttn, "^&", "&")
    Pttn = Replace(Pttn, "^""", """")
    Set regEx1 = New RegExp
    If Instr(LCase(Arg(1)), "i") > 0 then
        regEx1.IgnoreCase = True
    Else
        regEx1.IgnoreCase = False
    End If 
    If Instr(LCase(Arg(1)), "v") > 0 then
        IncExc = False
    Else
        IncExc = True
    End If 
    regEx1.Global = False
    regEx1.Pattern = Pttn 
    Do Until Inp.AtEndOfStream
        Line=Inp.readline
        If RegEx1.Test(Line) = IncExc then
            outp.writeline Line
        End If
    Loop

仅对标准输入和标准输出进行读写。这些仅在命令提示符中可用。

filter <inputfile >outputfile
filter <inputfile | other_command
other_command | filter >outputfile
other_command | filter | other_command

过滤

filter filter {[i][v]|n} expression
filter filt {[i][v]|n} expression

通过正则表达式过滤文件中的行。它比Windows的Findstr更灵活。

表达式中的&符号和括号必须使用插入符进行转义。不要逃避插入。使用十六进制代码\ x22作为引号。

SearchOptions

i - ignore case
v - include non-matching lines
n - none

表达

正则表达式参考

实施例

提取所有节标题,即没有等号的行

filter filter iv "=" < "%systemroot%\win.ini"

提取以小写字母开头的所有部分标题

filter filter n "\[[a-z].+" < "%systemroot%\win.ini"

这显示插入符号用于转义CMD.EXE的左括号和反斜杠转义为RegEx引擎的开始括号

过滤器过滤器n“\ ^(”&lt;“%systemroot%\ win.ini”

这表示正在搜索引号字符

filter filter n "\x22" < "%systemroot%\win.ini"

答案 1 :(得分:0)

通常情况下,如果您想从输入文件中提取特定行,替换其中的某些内容,并将生成的(修改过的)行写入输出文件,您只需执行以下操作:

uuid_to_bin()

如果您想要使用“mmrk”添加多个模式,则可以使用替换(由管道符分隔的多个模式):

Set fso = CreateObject("Scripting.FileSystemObject")

Set re = New RegExp
re.IgnoreCase = True
re.Pattern    = "^\{\\\w{4}\\\w{4}\\\w{11}"

Set inFile  = fso.OpenTextFile("C:\path\to\input.txt")
Set outFile = fso.CreateTextFile("C:\path\to\output.txt", True)
Do Until inFile.AtEndOfStream
    line = inFile.ReadLine
    If re.Test(line) Then outFile.WriteLine re.Replace(line, "mmrk$&")
Loop
inFile.Close
outFile.Close

^pattern|pattern|pattern|... 将表达式锚定在字符串/行的开头。