2017-03-02 77 views
0

我正在尋找一個程序,通過文本文件查找以「F(」開頭的行,並將這些行復制到單獨的文本文件,然後刪除關閉括號後的任何內容,並在該行前添加一個固定的文本字符串(該字符串爲「CALL EXTERN/DMIS,M,(DMIS_MACRO_FOR_FILTERING)」)VB腳本或批處理文件,將文本文件的特定行拖到單獨的文件

我正在尋找的完整行看起來是這樣的。

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 

添加到困難,我期待複製可以改變名稱的長度和逗號的數量在該行可以更改。

我不是一個交易程序員,但我通常可以將我需要的東西從谷歌拼湊到一起,但是這讓我對一些可能很明顯的原因產生了阻礙。任何幫助將不勝感激。 SOLVED-下面是代碼

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 
+0

使原來只有部分你正在使用的是什麼被括在括號內? – Squashman

+0

把你可以測試的東西拼湊在一起,然後將它張貼在這裏與你卡在哪裏以及實際和預期的行爲是什麼。這就是這個網站應該如何工作。 – Compo

+2

基本上你要使用的是一個'FOR/F'命令並使用TOKENS和DELIMS選項。您只需要前兩個令牌,而您的分隔符將會是括號。使用IF命令檢查第一個標記是否等於F. – Squashman

回答

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 
+0

我比使用VB腳本更適合使用Batch,所以我一直在追求這個,但是我得到一個「句柄無效」錯誤這條線 – Thub

+0

明白了。謝謝您的幫助 – Thub

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 
) 
相關問題