アプリ版:「スタンプのみでお礼する」機能のリリースについて

バッチファイルで一行に、118項目のあるCSVファイルを読み込んで、必要な項目を抽出して、新しいCSVを作りたいです。
いろいろ調べたら
for /f "delims=, tokens=1-3" %%I in (sample.csv) do (
echo %%I %%J %%K>> new.csv
)
で実現できると思っていましたが、tokensに値の制限があって、tokens=1-118にすると、うまくいかないです。
どなたかいい方法をご存知でしたら、教えていただきたいですが。

A 回答 (4件)

過去に同様の質問で回答しています→

http://oshiete.goo.ne.jp/qa/4939331.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
    • good
    • 1

その他プログラミングの方がよさそうな質問ですね。



テキスト処理であれば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)になっています。ファイルにする場合には注意してください。
    • good
    • 0

for のヘルプを見ればわかるんだけど, 1つの for では最大 26個しか使うことができません (%a~%z, あるいは %A~%Z まで). だから「118個を同時に扱う」ことは「バッチファイル」では不可能です.


「バッチファイルでは」というのは, PowerShell では多分できるから. VBScript でもできるかも.
    • good
    • 0

本当に 118個全部必要なの?


もし必要なら, (少なくとも「バッチファイル」では) 不可能.
    • good
    • 1
この回答へのお礼

ありがとうございます。もとのCSVファイルは118項目が有りますので、それを順番で読み込み、特定の列を新たなCSVに吐き出したいですね。バッチ以外で考えないといけないみたいですね。

お礼日時:2010/11/29 01:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています