• 締切済み

【windowsバッチ】CSVの編集

とあるCSVファイル(先頭行はヘッダー項目)において、個人コード(先頭列)に文字列を含むレコードを除外したいです。 (個人コードに文字列を含まないレコードを読み込んで、新たにCSVファイルを作成でも可) 出来ればVBS等は用いず、バッチのみで行いたいのですが… 恐れいりますが、どなたかご教示いただけますでしょうか。 よろしくお願いいたします。

みんなの回答

noname#223623
noname#223623
回答No.4

> 恐れいりますが、コマンド出力結果をCSVファイルにする実装例もご教示いただけますでしょうか… 先の回答にも書いたけど、ファイルにリダイレクトでいいんじゃないか。 C:\XXX>findstr "^[^a-z"] sample.csv > out.csv これまでの質問文や補足などからは、バッチファイルでやる理由が読み取れない。

uma-taro
質問者

お礼

masa_peeさま 既存のバッチファイル内にその処理を追加したかったためです。 言葉不足で申し訳ございません。 なお、お陰様で改修、テスト共に無事完了しました。 この度は丁寧にご教示してくださり、本当にありがとうございました。

noname#223623
noname#223623
回答No.3

> 大変恐縮ですが、実装例をご教示いただけますでしょうか… 了解です。コマンドの実行例だけ書きます。バッチファイルにする必要があるのかな? まずはサンプルの CSV ファイル。次のファイルを処理する。C:\XXX は適当なディレクトリに読み替えてください。  C:\XXX>type sample.csv  12345678,foo  a2345678,bar  123b5678,baz  87654321,ほげ  c7654321,piyo 最初は、「a~z が含まれる行」を出力してみる。  C:\XXX>findstr "[a-z"] sample.csv  12345678,foo  a2345678,bar  123b5678,baz  c7654321,piyo オプション /B を付けると、「行頭が a~z で始まる行」のみ出力できる。  C:\XXX>findstr /B "[a-z"] sample.csv  a2345678,bar  c7654321,piyo さらにオプション -V を付けて結果を反転。つまり「「行頭が a~z ではない行」のみ出力できる。  C:\XXX>findstr /B /V "[a-z"] sample.csv  12345678,foo  123b5678,baz  87654321,ほげ オプションを使わないで、正規表現だけでやるならこう。  C:\XXX>findstr "^[^a-z"] sample.csv  12345678,foo  123b5678,baz  87654321,ほげ あとはファイルにリダイレクトするなりご自由にどうぞ。

uma-taro
質問者

お礼

masa_peeさま ご教示本当にありがとうございます。 それでなんですが… 恐れいりますが、コマンド出力結果をCSVファイルにする実装例もご教示いただけますでしょうか… (対象行出力→CSVファイル生成までをバッチファイルにした実装例ですと非常に助かります) 実は別途やらなければならない作業があり、本件について調べている余裕がなかなかなくて… 度々お手数おかけして本当申し訳ございません。 何卒よろしくお願いいたします。

noname#223623
noname#223623
回答No.2

> 個人コードの先頭にアルファベット(a~z)を含むレコードを除外したいです。 要するに、「行の先頭が a~z ではない行のみ出力する」でいいんだろうか。だったら、findstr で簡単にできる。ただし、Windows のバージョンによっては使えない、あるいは挙動が異なるかもしれない。 findstr の説明は以下を参照。  findstr - 文字列や正規表現を使って文字列を検索する  http://www.k-tanaka.net/cmd/findstr.php 実行例が必要ならリクエストください。

uma-taro
質問者

お礼

masa_peeさま 夜分に失礼します。 ご教示ありがとうございます。 〉要するに、「行の先頭が a~z ではない行のみ出力する」でいいんだろうか。 ご認識のとおりです。 a.csvの2行目以降(1行目は項目名ヘッダー)を、各行の先頭がa~zではない行のみの形にして出力したいです。 大変恐縮ですが、実装例をご教示いただけますでしょうか… お手数おかけしますが、何卒よろしくお願いいたします。

  • hue2011
  • ベストアンサー率38% (2801/7249)
回答No.1

ストリーム操作なんだからawkの出番ですね。 dos用にgawkというのが出回っていますのでそれを使ってください。 バッチでつくるというかシェルで組むわけです。

uma-taro
質問者

お礼

hue2011さま ご教示ありがとうございます。 すいません、障害対応なんですが、今の客先ですぐにそれを取り入れるのは困難です。。 バッチのみで実装したいと書きましたが、やはりVBSで実装して、それをバッチ側で呼び出すのが一番無難な気がしています。。 ただ…VBSでの実装方法がよくわかりません… わざわざ回答してくださったのに申し訳ございません。

uma-taro
質問者

補足

個人コード(先頭列)に含まれる文字列についての詳細が判明しましたので補足します。 個人コードの先頭にアルファベット(a~z)を含むレコードを除外したいです。 何卒よろしくお願いいたします。

関連するQ&A

専門家に質問してみよう