如何在perl中检查带头的csv文件是否为空

时间:2012-09-06 06:13:21

标签: perl csv perl-module

我有一个内容为

的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]";
 }

4 个答案:

答案 0 :(得分:2)

如果我是你,我会查看其中一个CSV处理CPAN模块,例如: Text::CSVTie::CSV_FileDBD::CSV

要检查文件是否为空,将是计算文件中已解析行数的简单情况。使用DBIDBD::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;

但可能效率不高。