0

WindowsのバッチファイルまたはvbscriptでファイルAを2つ(ファイルBとファイルC)に分割する方法を探しています。サンプルコードを提供していただければ幸いです。

File A
------------------------------
'H',123,'1st'
'D',123,'1st'
'D',123,'2nd'
'D',123,'3rd'
'H',456,'2nd'
'D',456,'1st'
'D',456,'2nd'
'D',456,'3rd'
------------------------------

File B
------------------------------
'H',123,'1st'
'H',456,'2nd'
------------------------------

File C
------------------------------
'D',123,'1st'
'D',123,'2nd'
'D',123,'3rd'
'D',456,'1st'
'D',456,'2nd'
'D',456,'3rd'
------------------------------
4

3 に答える 3

2
findstr /bl "'H'" a.txt >b.txt
findstr /bl "'D'" a.txt >c.txt
于 2012-09-20T20:40:24.120 に答える
0

そして、完全性または教育目的のために、VBSソリューション。
見つかった各文字の出力ストリームオブジェクトは、辞書の値として保持されます。

Option Explicit
Dim fso, dic, ts_in, ts_out, s, key, INFILE, OUTDIR
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
Set dic = CreateObject("scripting.dictionary")

INFILE = "c:\temp\infile.txt"
OUTDIR = Left (INFILE, InstrRev (INFILE, "\"))  'same folder as INFILE's

Set ts_in = fso.OpenTextFile (INFILE)
Do Until ts_in.AtEndOfStream
    s = ts_in.ReadLine
    key = Replace (Left (s, InStr (s, ",")-1), "'", "")
    If Not dic.Exists (key) Then
        Set ts_out = fso.CreateTextFile (OUTDIR & key & ".txt")
        dic.Add key, ts_out
    End If
    Set ts_out = dic(key)
    ts_out.writeLine s
Loop
ts_in.Close

For Each ts_out In dic.Items
    ts_out.Close
Next
于 2012-09-24T19:30:27.090 に答える
0

次のようにプログラムで実行することもできます。

for /f "tokens=1-3 delims=," %%a in (File_A) do (
  if "%%a"=="'H'" echo %%a,%%b,%%c>>File_B
  if "%%a"=="'D'" echo %%a,%%b,%%c>>File_C
)

この方法はおそらく遅くなると思いますが、REGEX(FINDSTR実装が不十分)を学習しなくても、条件の微調整やデータの操作が可能になります。

于 2012-09-21T02:35:50.280 に答える