2017-03-02 7 views
0

"F"で始まる行のテキストファイルを見て、その行を別のテキストファイルにコピーする閉じ括弧の後に何かを削除し、行の前に固定文字列を追加する(その文字列は "EXTERNAL/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 

ようになりますで終わるしたいのですが、私はコピーしているよ名前の長さを変えることができ、かつライン缶でコンマ数変化する。

私は貿易によってプログラマーではありませんが、私は通常、私がGoogleから必要としているものをまとめることができますが、これはおそらく明らかな理由のために私を苦しめています。どんな助けでも大歓迎です。 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オプションを使用します。あなたはちょうど最初の2つのトークンが必要で、区切り文字は両方ともかっこになります。最初のトークンがFと等しいかどうかをチェックするのに 'IF'コマンドを使用してください。 – Squashman

答えて

0

Regular expression in VBScriptです。この例の正規表現パターンは、 'F(' +アンダースコア+ 'を含む1つ以上の単語文字)='で始まるものを探します。そのパターンが検出されない場合は、何も書き込まれません。

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スクリプトを使う方が快適です。これを追求していますが、"ハンドルが無効です "というエラーが表示されますこの行 – 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 
) 
関連する問題