2016-03-26 14 views
0

。 ファイルにはサイズ変更可能なヘッダーがあり、削除する必要があります。特定の文字列が見つかると他の行を保持します この場合、「Date」という文字列の後に行を保持したいだけです。 以下のファイルの例:削除ヘッダー

CSV: 
---- 

Report,Begin Date,End Date,Currency,Change Currency 
Financial Report,2016-03-26 00:00:00.000 -0600,2016-03-27 00:00:00.000 -0600,USD,Change Currency 

Method,Deposits,Withdrawals,Reversepayouts,Reversedeposits,Net 
PAYPAL,200.00,0.00,0.00,0.00,200.00 
VISA2,1650.00,0.00,0.00,0.00,1650.00 
VISA3,190.00,0.00,0.00,0.00,190.00 
DISCOUNT,200.00,0.00,0.00,0.00,200.00 
Total:,2240.00,0.00,0.00,0.00,2240.00 

Date,Affiliate,Username,Account Id,Method,Type,Amount,Transaction Id,Note 
2016-03-26 00:36:01.746 -0600,JamesX,ad123,30153,VISA2,Deposit,32.0000,244258410,VISA2 
2016-03-26 01:25:53.680 -0600,JamesX,ad123,30153,VISA2,Deposit,32.0000,244263044,VISA2 
2016-03-26 02:26:05.776 -0600,ChristineY,Sar,30887,ARESYS,Deposit,200.0000,244267597,PAYPAL 
2016-03-26 03:53:28.313 -0600,ChristineY,doo15,35088,VISA2,Deposit,100.0000,244271237,VISA2 
2016-03-26 05:01:14.420 -0600,ChristineY,doo15,35088,VISA2,Deposit,320.0000,244273790,VISA2 
2016-03-26 08:40:38.593 -0600,JamesX,ad123,30153,VISA2,Deposit,33.0000,244290455,VISA2 
2016-03-26 10:08:43.230 -0600,xAZER,veso,36504,VISA3,Deposit,90.0000,244302244,VISA3 
+0

jrepl "[\S\s]*?^Date,.*\n?([\S\s]*)" "$1" /m /f test.txt /o output.txt 

は、ヘッダ行を保持。最初の行を削除したいだけでしたか、または日付で始まる行を保持したいだけでしたか? – SomethingDark

+0

あなたは "DATE"で始まる行からのみ聞くことができます。 –

答えて

2

私はa regular expression find/replace utility called JREPL.BATを使用します。 JREPL.BATは、純粋なスクリプト(ハイブリッドJScript /バッチ)で、XP以降の任意のWindowsマシンでネイティブに実行されます。

溶液を見つける/ユーザのビットと交換基本的な正規表現では、廃棄する行のロジックを処理するためのJScriptを供給する。

あなたは「日付、...」ヘッダ行、破棄する場合:

jrepl "^(Date,)?.*" "($1?i++:i)?$0:false" /jmatch /jbeg "var i=0" /f test.txt /o output.txt 

を使用すると、ヘッダ行を保持したい場合は、わずかな変更が必要とされている:

jrepl "^(Date,)?.*" "($1?++i:i)?$0:false" /jmatch /jbeg "var i=0" /f test.txt /o output.txt 

元のファイルを結果に上書きする場合は、/o -を使用します。

使用call jreplあなたはバッチスクリプト内のコマンドを入れた場合。

ユーザーが提供するJScriptを使用せずに解決することは可能です。それにはファイル全体をメモリにロードする/m(マルチライン)スイッチが必要なため、最大ファイルサイズは約1GBに制限されています。

破棄ヘッダー行:列 "日付" が最初の行にある

jrepl "[\S\s]*?(^Date,[\S\s]*)" "$1" /m /f test.txt /o output.txt 
+0

おめでとうございます。非常にストレートな解決策! –

+0

あなたの専門知識が再び私を助けることができました!私は以下のこのファイルで同じ問題を抱えていますが、最初の列に日付を挿入する必要があります –

+0

@RenaudDUGERT - これは新しい質問のようです。しかし、JREPL.BATを使いたい場合は、初歩的なJScriptだけでなく、正規表現も学ぶ必要があります。完全なJREPL.BATのドキュメントは、コマンドラインから 'jrepl /? 'を介して入手できます。質問をする前に自分で解決しようとするべきです。 – dbenham

2
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
SET "destdir=U:\destdir" 
SET "filename1=%sourcedir%\q36240256.csv" 
SET "outfile=%destdir%\outfile.csv" 
SET "reproduce=" 
(
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
IF NOT DEFINED reproduce (
    ECHO(%%a|FINDSTR /b /L /c:"Date," >NUL 
    IF NOT ERRORLEVEL 1 SET "reproduce=y" 
) 
IF DEFINED reproduce ECHO(%%a 
) 
)>"%outfile%" 

GOTO :EOF 

あなたは、あなたの状況に合わせてsourcedirdestdirの設定を変更する必要があります。

私は私のテストのためにあなたのデータを含むq36240256.csvという名前のファイルを使用していました。

reproduceフラグを設定%OUTFILE%として定義ファイルを生成し(それは未定義である)

各ファイルの行を読みます。 reproduceが定義されていない場合は、ライン/bは、任意の出力を処分、「日付」、/Lでリテラル/c:定数文字列を開始するかどうかを確認するためにfindstrを使用しています。

findstrから生成されたエラーレベルが> 1(つまり0)でない場合は、reproduceに何かを設定します。 reproduceが設定されている場合、ラインを逆流し、より多くの盲検化フィテッセのために遅いfindstrについてさらに心配しないでください

...

関連する問題