[前の記事]« よりUNIXライクで高機能なコマンド・プロンプト環境にできないか
[次の記事][NT系]引数から拡張子を除きたい  »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「FOR .. IN ( ) DO..」索引へ
▲カテゴリー「文字列の操作」索引へ

csv内の連続カンマが1つのデリミタとして処理されてしまう

494.
CSVファイルの空文字について
2004年06月08日(火) 12時54分
よいこ
以下の例のようなCSVファイルをあったとします。
(3行目の2項目目に空文字あり)

〔CSVファイル〕
 ファイル名:a.csv

 内容 :  aaaaa,bbbbb,ccccc,ddddd
             eeeee,fffff,ggggg,hhhhh
             iiiii,,kkkkk,lllll,mmmmm

このファイルで各行の3項目目を取得し表示させたいのですが、
forを使って以下のように記述した場合

  for /F "delims=, tokens=3" %%A in (a.csv) do echo %%A

表示される項目は

 ccccc
  ggggg
  lllll

となってしまいます。
3行目をkkkkkと表示させたいのですが、おそらく空文字はtokenの個数にカウント
されていないものと思われます。

何かよい方法はありますでしょうか?
498.
Re:CSVファイルの空文字について
2004年06月08日(火) 18時05分
oo
>このファイルで各行の3項目目を取得し表示させたいのですが、
>forを使って以下のように記述した場合
>  for /F "delims=, tokens=3" %%A in (a.csv) do echo %%A
....
>3行目をkkkkkと表示させたいのですが、おそらく空文字はtokenの個数にカウント
>されていないものと思われます。

>何かよい方法はありますでしょうか?

for /f のデリミタは、複数個連続しても1つのデリミタと見なされるのでその機能だけでは無理です。
データが特殊記号を含んでいないなら、
setlocal enabledelayedexpansion
for /f "delims=" %%A in (zok.txt) do (
 set A=%%A
 for /l %%i in (1,1,2) do set A=!A:*,=!
 for /f "delims=," %%B in ("!A!") do echo %%B
)
のようにあらかじめ前から(3-1)個のカンマまでを除去しておく方法で出来ます。
こういう処理が多いなら、awk/perl/ruby等のツールを使ったほうが楽でしょうね。
500.
Re2:CSVファイルの空文字について
2004年06月08日(火) 20時46分
よいこ
>for /f のデリミタは、複数個連続しても1つのデリミタと見なされるのでその機能だけでは無理です。
>データが特殊記号を含んでいないなら、
>setlocal enabledelayedexpansion
>for /f "delims=" %%A in (zok.txt) do (
> set A=%%A
> for /l %%i in (1,1,2) do set A=!A:*,=!
> for /f "delims=," %%B in ("!A!") do echo %%B
>)
>のようにあらかじめ前から(3-1)個のカンマまでを除去しておく方法で出来ます。
>こういう処理が多いなら、awk/perl/ruby等のツールを使ったほうが楽でしょうね。


うまくいきました。ありがとうございます。
もうひとつお聞きしたいのですが、

set A=!A:*,=!

の*,=はどのような展開式なのでしょうか?
501.
Re3:CSVファイルの空文字について
2004年06月09日(水) 00時46分
oo
>もうひとつお聞きしたいのですが、

>set A=!A:*,=!

>の*,=はどのような展開式なのでしょうか?

set /? の3ページ目から4ページ目にかけて説明があります。
この場合は、「最初に現れるカンマまでを削除」です。
 
 


カテゴリー「FOR .. IN ( ) DO..」索引へ
カテゴリー「文字列の操作」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2004年06月08日 13:29に投稿されたエントリーのページです。

ひとつ前の投稿は「よりUNIXライクで高機能なコマンド・プロンプト環境にできないか」です。

次の投稿は「[NT系]引数から拡張子を除きたい 」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート