ダブルコーテーションマークの削除

CSVファイル(カンマ区切りファイル)の各フィールドを 囲んだ
ダブルコーテーションマーク(二重引用符)を 削除する

同等のawkプログラムへ

プログラム

プログラムは以下のように多少本格的になっています。これは ただ単純にダブルコーテーションを消去するのではなく、 各フィールドの先頭と末尾がダブルコーテーションかどうか をきちんと判定し、そのダブルコーテーションだけを削除している ためです。 以下をタイプして、適当な名前でセーブしてください。ここでは rdouble.pl という名前でセーブしたことにして話を進めます。
while(<>) {
	s/[\r\n]//g;

	@field = split( /,/, $_ );

	for ( $i = 0; $i <= $#field; $i++ ) {

		$len = length( $field[$i] );

		if ( substr( $field[$i], 0, 1 ) eq "\"" ) {
			$tmpstr[$i] = substr( $field[$i], 1, $len - 1 );
		}
		else {
			$tmpstr[$i] = $field[$i];
		}

		$len = length( $tmpstr[$i] );

		if ( substr( $tmpstr[$i], $len - 1, 1 ) eq "\"" ) {

			$tmpstr[$i] = substr( $tmpstr[$i], 0, $len - 1 );
		}

	}

	for ( $i = 0; $i < $#field; $i++ ) {
		printf( "%s\t", $tmpstr[$i] );
	}
	
	printf( "%s\n", $tmpstr[$#field] );
}
exit;

入力データ

入力データは、ダブルコーテーションマーク付きCSVファイルならなんでも よいのですが、せっかく細かくチェックしているので、以下のように データ中にダブルコーテーションを含んでいるデータで動作確認します。 以下のようなファイルが dat3.txt として存在するとします。
"田中","好きな文字*"
"佐藤","好きな文字="
"鈴木","好きな文字""

実行結果

OSはWindowsを利用していると 仮定します。 DOS prompt 上で、
c:\perl> perl rdouble.pl dat3.txt
とタイプします。
田中	好きな文字*
佐藤	好きな文字=
鈴木	好きな文字"
と出力されるはずです。 鈴木さんの好きな文字(")が消えていないところに注目してください。
メニューに戻る
Tkensaku

TKENSAKU top へ

Copyright © 2004 TKEN