使用perl从csv读取单个列

使用perl从csv读取单个列,perl,csv,Perl,Csv,文件包含如下数据: S_No S_Name Acc_Num Total_Amount 1 Larry 1521 18000 为了从csv中读取一列,我编写了以下脚本: #!/usr/bin/perl -w use strict; use warnings; use Text::CSV; my$column_separator = qr/,/; my $column_nu

文件包含如下数据:

S_No        S_Name          Acc_Num     Total_Amount
1            Larry            1521          18000           
为了从
csv
中读取一列,我编写了以下脚本:

#!/usr/bin/perl -w
use strict;
use warnings;

use Text::CSV;
my$column_separator = qr/,/;
my $column_number = "3";
my$file = "/home/Admin/Documents/new (copy).csv";
open(my$FILE,">>","$file") or die "$!";
while (<$FILE>){
  my @columns = split(/$column_separator/);
  print $columns[$column_number] ,"\n";
}
close $FILE;
#/usr/bin/perl-w
严格使用;
使用警告;
使用Text::CSV;
我的$column_separator=qr/,/;
我的$column_number=“3”;
my$file=“/home/Admin/Documents/new(copy).csv”;
打开(我的$FILE,“>>”,“$FILE”)或死“$!”;
而(){
my@columns=split(/$column_separator/);
打印$columns[$column\u number],“\n”;
}
关闭$FILE;
但是这个脚本抛出了一个错误

Use of uninitialized value in print at another.pl line 12, <$FILE> line from 1 to 11..
在另一个.pl第12行(从1到11的行)的打印中使用未初始化值。。

如何解决此错误?

错误消息表示列为空。这就是为什么它没有定义。您需要添加一个检查并处理它为空的情况。您可以通过两种方式实现这一点:

  • 添加一个条件,并且根本不输出空列

    print $columns[$column_number], "\n" if $columns[$column_number];
    
  • 如果未定义值,则输出空行

    print( ( $columns[$column_number] // q{} ), "\n");
    

这里还有一些注释:您正在
使用
ing Text::CSV,但是您没有使用它来阅读任何内容

您要做的是逐行读取文件,但有几件事需要添加和更改:

  • 将您的呼叫模式从
    >
    更改为
    ,因为code>表示追加,但您想阅读
  • 删除尾随换行符的输入
所有这些都会产生以下代码

open(my $FILE,">>","$file") or die "$!";
while (<$FILE>) {
  chomp;
  my @columns = split(/$column_separator/);
  print ( $columns[$column_number] // q{} ), "\n";
}
打开(我的$FILE,“>>”,“$FILE”)或死亡“$!”;
而(){
咀嚼;
my@columns=split(/$column_separator/);
打印($columns[$column_number]//q{}),“\n”;
}

您还应该仔细阅读并学会使用它,因为它有助于解决CSV文件的许多常见陷阱。

您展示的程序没有27行。请显示您的实际代码。我编辑了我的问题,请参见另一个.pl行13中解释为函数的oncheshow错误
print(…)。在另一个.pl行13的void上下文中无用地使用常量。另一个.pl第9行的未知打开()模式“”。
print(…)被解释为另一个.pl第13行的函数。在另一个.pl第13行的void上下文中无用地使用常量。我不知道第13行中有什么。现在可以正常工作了。。。但将分隔符设置为
,并不是提取第三列值,而是在示例输入中,使用空格对齐列。。。。