【问题标题】:How check whether csv file with header is empty or not in perl如何在perl中检查带有标题的csv文件是否为空
【发布时间】:2012-08-30 21:54:25
【问题描述】:

我有一个包含内容的 csv 文件 xyz.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]";
 }

【问题讨论】:

  • 您可以使用标量来表示文件的第一行并检查它是否已定义。然而,这确实推进了文件句柄,其余的阅读内容将从第二行开始。
  • @squiguy...我该怎么做...我只是想跳过标题并检查下一行是否为空或有任何值...请建议
  • 您可以检查它是否仅包含换行符或是否为空白。最后一个如果没有定义 $line;最后一个 if $line eq "\n";
  • pen(my $data, ') { next if ($. == 1);我的@fields = split "," , $line;打印 "\n ***** @fields"; if(@fields eq " \n"){ 打印 "空文件"; } 它不是 printng 空文件...你可以请检查 }

标签: perl csv perl-module


【解决方案1】:

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

检查文件是否为空将是一个简单的情况,即计算文件中已解析的行数。对于DBIDBD::CSV,您可以使用SELECT COUNT(*) FROM table_name SQL 语句。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • @sarathi...我是 perl 新手...您能帮我提供一个示例脚本以进行相同的检查...
    【解决方案3】:

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

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

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

    <$data>;
    print (defined <$data> ? "not null" : "null");
    

    【讨论】:

    • 如果标题之外的所有行都只是\n,将打印“not null”
    • 其实如果连第一个也是。 RFC4180 规定所有行都应具有相同数量的字段,但 OQ 没有指定字段编号检查,因此将应该读作“非必须”是合理的,在这种情况下,空白行不为空。
    【解决方案4】:

    这应该可行。从您的 shell 提示符检查 wc -l &lt; FNAME 是否仅返回第 cnt 行。

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

    不过,它可能效率低下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-30
      • 2017-07-21
      • 2021-10-27
      • 2021-03-21
      • 1970-01-01
      • 2017-03-04
      • 2011-02-05
      • 1970-01-01
      相关资源
      最近更新 更多