2011年5月18日水曜日

windowsコマンド(バッチ)で階層構造の分析を行う

簡単な階層構造をもったファイルを分析して、必要な行を抽出する方法。
普通のプログラムであれば、FORをまわしながら1階層目の文字が見つかったら、2階層目の文字をチェックするという処理にすると思いますが、windowsコマンドではFORを階層化すると遅延環境変数のせいで記載方法が色々めんどくさい。
というわけで、ファイルを解析して必要な部分を切り出し、その中を検索するという方法で該当行を抽出する。
【お題】
以下のようなファイルから、X階層でかつ"a"を含んだ行を抽出する。

【ファイル内容】

Y
abc
def
X
ade
bfg
Z
aef
vhj
【コマンドファイル】

以下のコマンドは
1.Xが何行目に出てくるか調べる。
2.Xまでの行を省いた結果をテキストに出力する。
3.出力したテキストからaが含まれている行を抽出する。
という流れで処理を行っています
--------------------------------------------------------
@ECHO OFF
setlocal enabledelayedexpansion
findstr /N "X" C:\Users\hogehoge\Desktop\test.txt>out.txt
pause
FOR /F "delims=: " %%I IN (out.txt) DO (
SET GYO=%%I
)
ECHO %GYO%行目
pause
FOR /F "skip=%GYO%" %%I IN (C:\Users\n0155\Desktop\test.txt) DO (
ECHO %%I>>out2.txt
)

TYPE out2.txt|FIND "a"
endlocal
pause
--------------------------------------------------------


【出力結果】
ade
aef
この結果をテキストに出力して1行目を取得すればOK。
aの行が複数ある場合は、別で

0 件のコメント:

コメントを投稿