我有一个内容为
的csv文件xyz.csv
name,age,place,phone
xyz,12,ohio,7372829
sed,23,hrh,9890908
我需要解析csv文件并检查它是否为空文件,即它没有提供标题的值。
空文件xyz.csv
仅包含标题(标题no可能会减少或增加),例如降低:
name,age,place,phone
增加:
name,age,place,mob,phno,ht
如何在下面的代码中检查空文件并打印是否为null?
我开发了以下脚本来解析csv
open(my $data, '<', $file_c) or die "Could not open '$file_c' $!\n";
while (my $line = <$data>)
{
next if ($. == 1);
chomp $line;
my @fields = split "," , $line;
print"$fields[0] fields[1]";
}
答案 0 :(得分:2)
如果我是你,我会查看其中一个CSV处理CPAN模块,例如: Text::CSV
,Tie::CSV_File
或DBD::CSV
。
要检查文件是否为空,将是计算文件中已解析行数的简单情况。使用DBI
和DBD::CSV
,您可以使用SELECT COUNT(*) FROM table_name
SQL语句。
以下链接提供了使用perl解析CSV文件的快速教程:http://perlmeme.org/tutorials/parsing_csv.html
答案 1 :(得分:1)
您可以使用范围运算符搜索不是第一行的任何行。这应该非常有效:
while (<$data>)
{
unless (1..1) { print "not null\n"; exit 0; }
}
print "null\n";
exit 1;
或者你可以逐个拔掉线 - 如果第二个被定义,那么它不是空的:
<$data>;
print (defined <$data> ? "not null" : "null");
答案 2 :(得分:0)
你可以检查行数,如果你确定存在标题,那么第一行总是标题。
所以如果第2行不存在或第2行的长度为0则为空文件。
答案 3 :(得分:0)
这应该可行。从shell提示符检查wc -l < FNAME
是否仅返回行cnt。
print "empty" if chomp(my $dummy = `wc -l < FNAME`) == 1;
但可能效率不高。