- 締切済み
バッチで118項目のCSVを処理したいですが。。。
バッチファイルで一行に、118項目のあるCSVファイルを読み込んで、必要な項目を抽出して、新しいCSVを作りたいです。 いろいろ調べたら for /f "delims=, tokens=1-3" %%I in (sample.csv) do ( echo %%I %%J %%K>> new.csv ) で実現できると思っていましたが、tokensに値の制限があって、tokens=1-118にすると、うまくいかないです。 どなたかいい方法をご存知でしたら、教えていただきたいですが。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- pita-gora
- ベストアンサー率70% (102/145)
過去に同様の質問で回答しています→ http://okwave.jp/qa/q4939331.html の A No.3 の内容を再掲します。 for文の2重ループで分解する方法で、2,32,33,35項目を抜き出しているところが echo ![2]!,![32]!,![33]!,![35]! になります。 echo off setlocal ENABLEDELAYEDEXPANSION for /F "delims=" %%A in (sample.csv) do ( set n= for %%a in (%%A) do ( set /a n=n+1 set [!n!]=%%a ) echo ![2]!,![32]!,![33]!,![35]! ) endlocal
- いけだ ひろし(@ike-2000)
- ベストアンサー率53% (69/129)
その他プログラミングの方がよさそうな質問ですね。 テキスト処理であればawkが良いと思います。Windows版もあるようですが、cygwinにも入っています。 cygwinを導入したとして説明します。 sh後 cat 対象ファイル名 | awk \ 'BEGIN { } { split $0,A,"," Print A[1] "," A[3] "," A[118: } END { }' > 出力ファイル名.csv とすれば、1,3,118列目が出力されます。 ご検討あれ。 ※最近のcygwinは改行コードが\n(0x0a)になっています。ファイルにする場合には注意してください。
- Tacosan
- ベストアンサー率23% (3656/15482)
for のヘルプを見ればわかるんだけど, 1つの for では最大 26個しか使うことができません (%a~%z, あるいは %A~%Z まで). だから「118個を同時に扱う」ことは「バッチファイル」では不可能です. 「バッチファイルでは」というのは, PowerShell では多分できるから. VBScript でもできるかも.
- Tacosan
- ベストアンサー率23% (3656/15482)
本当に 118個全部必要なの? もし必要なら, (少なくとも「バッチファイル」では) 不可能.
お礼
ありがとうございます。もとのCSVファイルは118項目が有りますので、それを順番で読み込み、特定の列を新たなCSVに吐き出したいですね。バッチ以外で考えないといけないみたいですね。