VB脚本或批处理文件,用于将文本文件的特定行拖到单独的文件中

时间:2017-03-02 15:51:25

标签: batch-file vbscript

我希望程序通过文本文件查看以“F(”开头的行,然后将这些行复制到单独的文本文件中,然后在关闭括号后删除任何内容并在之前添加固定的文本字符串line。(该字符串为“CALL EXTERN / DMIS,M,(DMIS_MACRO_FOR_FILTERING)”,))

我想要复制的整行看起来像这样。

F(Top_OD)=FEAT/CIRCLE,OUTER,CART,0,0,-0.2,0,0,1,0.99975

将有多行遵循相同的格式,以及其他我不感兴趣的行。

我最终想要看起来像

CALL EXTERN/DMIS,M,(DMIS_MACRO_FOR_FILTERING),Top_OD

添加难度,我想要复制的名称的长度可能会有所不同,并且该行中逗号的数量可能会发生变化。

我不是一个交易程序员,但我通常可以把我需要的东西拼凑起来,但这让我受到了一些可能明显的原因的阻碍。任何帮助将不胜感激。 求助 - 以下是代码

DIM FEATURE_LIST_FILENAME,MACRO_CALL_LIST
Dim RegEx : Set RegEx = New RegExp
Dim Matches
RegEx.IgnoreCase = True
RegEx.Global = FALSE
RegEx.Pattern = "F\((\w+)\)\="

FEATURE_LIST_FILENAME = "hardcoded filename"
MACRO_CALL_LIST = "hardcoded filename"
Set AN_INSTANCE_OF_A_FILESYSTEM_OBJECT =         CreateObject("Scripting.FileSystemObject")
Set FILE_TO_READ =     AN_INSTANCE_OF_A_FILESYSTEM_OBJECT.OpenTextFile(FEATURE_LIST_FILENAME,1)

Set AN_INSTANCE_OF_A_FILESYSTEM_OBJECT =     CreateObject("Scripting.FileSystemObject")
Set FILE_TO_WRITE = AN_INSTANCE_OF_A_FILESYSTEM_OBJECT.CreateTextFile     (MACRO_CALL_LIST,1)

'Set  = CreateObject("Scripting.FileSystemObject")
'Set FILE_TO_WRITE =      AN_INSTANCE_OF_A_FILESYSTEM_OBJECT.CreateTextFile(MACRO_CALL_LIST,1)

    Do Until FILE_TO_READ.AtEndOfStream

        CURRENT_LINE_IN_TEXT = FILE_TO_READ.ReadLine

    Set Matches = RegEx.Execute(CURRENT_LINE_IN_TEXT)
     If Matches.Count = 1 then FILE_TO_WRITE.Writeline "CALL EXTERN/DMIS,M,    (DMIS_MACRO_FOR_FILTERING)," + Matches(0).Submatches(0)


 'objFile.Writeline (CURENT_LINE_IN_TEXT)  


    Loop
FILE_TO_READ.Close

2 个答案:

答案 0 :(得分:1)

这是一个简单的批处理文件

FOR /F "tokens=1,2 delims=()" %%G IN (file.txt) DO (
     IF "%%G"=="F" echo CALL EXTERN/DMIS,M,(DMIS_MACRO_FOR_FILTERING^),%%H>>newfile.txt
)

答案 1 :(得分:0)

Regular expression in VBScript可能是一个很好的方法。此示例中的正则表达式模式将查找以' F开头的内容(' +一个或多个单词字符,包括下划线+')='。如果未检测到该模式,则不会写入任何内容。

Set RegEx = New RegExp
RegEx.Pattern = "F\((\w+)\)\="

Do Until WScript.stdin.AtEndOfStream
    Set Matches = RegEx.Execute(WScript.stdin.ReadLine)
    If Matches.Count = 1 then WScript.echo "CALL EXTERN/DMIS,M,(DMIS_MACRO_FOR_FILTERING)," + Matches(0).Submatches(0)
Loop

您可以通过输入输入文件从命令行调用脚本:

cscript reg.vbs //nologo <in.txt >out.txt