0

我有一个xyz.csv包含内容的 csv 文件

name,age,place,phone
xyz,12,ohio,7372829
sed,23,hrh,9890908

我需要解析 csv 文件并检查它是否为空文件,即它没有提供的标题的值。

一个空文件xyz.csv将只包含标题(标题可能会减少或增加),例如减少:

name,age,place,phone

增加:

name,age,place,mob,phno,ht

如何在下面的代码中检查空文件并打印是否为空?

我开发了下面的脚本来解析 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

4 回答 4

2

如果我是你,我会研究处理 CPAN 的 CSV 模块之一,Text::CSV例如Tie::CSV_FileDBD::CSV.

检查文件是否为空将是计算文件中已解析行数的简单案例。你可以使用SQLDBI语句。DBD::CSVSELECT COUNT(*) FROM table_name

以下链接提供了使用 perl 解析 CSV 文件的快速教程:http: //perlmeme.org/tutorials/parsing_csv.html

于 2012-09-06T06:18:31.473 回答
1

您可以使用范围运算符搜索不是第一行的任何行。这应该非常有效:

while (<$data>) 
{
  unless (1..1) { print "not null\n"; exit 0; }
}
print "null\n";
exit 1;

或者你可以一根一根地拔掉这些线——如果定义了第二个,那么它就不是空的:

<$data>;
print (defined <$data> ? "not null" : "null");
于 2012-09-06T07:40:00.860 回答
0

你知道如何检查行数,如果你确定总是存在标题。那么第一行总是标题。

所以如果第 2 行不存在或第 2 行的长度为 0,那么它是一个空文件。

于 2012-09-06T07:19:38.620 回答
0

这应该可行。从您的 shell 提示符检查是否wc -l < FNAME只返回行 cnt。

print "empty" if chomp(my $dummy = `wc -l < FNAME`) == 1;

不过,它可能效率低下。

于 2012-09-06T07:53:10.983 回答