Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
CSVの値取得
[go: Go Back, main page]

CSVの値取得


 取得用の関数を作ってみました。単にカンマで区切るだけで良いのであればsplitで簡単に取得できます。
######
# カンマ区切りのデータを分割するための関数と
# この関数を使用するサンプル
######

$MODE_DQ_OFF = 0;	# "で囲まれたデータの"を削除する
$MODE_DQ_ON = 1;	# "で囲まれたデータの"をそのままにする

######
# カンマでデータを分割する関数
######
sub csv_split {
	my ($line, $mode) = @_;
	my @data = ();
	my $tmp;
	while ($line =~ m/"([^"]*(("")+[^"]*)*)"(?:,|$)|([^,]+)(?:,|$)|(),/g) {
		if (defined $1) {
			$tmp = $1;			# "で囲まれたデータ
			if ($mode == $MODE_DQ_OFF) {
				$tmp =~ s/""/"/g;	# "で囲まれたデータは"を""であらわす
			} else {
				$tmp = qq("$tmp");	# "で囲みなおす
			}
		} elsif (defined $4) {
			$tmp = $4;			# 普通のデータ
		} else {
			$tmp = $5;			# 空データ
		}
		push @data, $tmp;
	}
	if ($line =~ m/,$/) {
		push @data, "";	# ,が最後にきているときは空データを追加
	}
	return @data;
}

######
# サンプルプログラム
######
my @data = <>;
chomp @data;

my @items;
print "----- ダブルクォート削除 -----\n";
foreach $line (@data) {
	print "[$line]\n";
	@items = csv_split($line, $MODE_DQ_OFF);	# ダブルクォート削除
	print "\t";
	foreach $item (@items) {
		print "($item)";
	}
	print "\n";
}
print "\n";

print "----- ダブルクォートそのまま -----\n";
foreach $line (@data) {
	print "[$line]\n";
	@items = csv_split($line, $MODE_DQ_ON);	# ダブルクォートそのまま
	print "\t";
	foreach $item (@items) {
		print "($item)";
	}
	print "\n";
}
print "\n";

print "----- 単純にカンマで分割 -----\n";
foreach $line (@data) {
	print "[$line]\n";
	@items = split(/,/, $line);	# 単純にカンマで分割
	print "\t";
	foreach $item (@items) {
		print "($item)";
	}
	print "\n";
}

exit 0;
サンプルデータと出力結果

関連項目

split関数