文件包含以下数据:
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;
但是这个脚本引发了一个错误。
Use of uninitialized value in print at another.pl line 12, <$FILE> line from 1 to 11..
如何解决此错误?
答案 0 :(得分:1)
错误消息表示该列为空。这就是它未定义的原因。您需要添加一个检查并处理它为空的情况。你可以用两种方式做到这一点:
添加条件,而不是输出空列
print $columns[$column_number], "\n" if $columns[$column_number];
如果未定义值,则输出空行
print( ( $columns[$column_number] // q{} ), "\n");
以下是一些评论:您use
正在使用Text :: CSV,但之后您没有使用它来阅读任何内容。
您所做的是逐行读取文件,但您需要添加和更改一些内容:
所有这些都会产生以下代码。
open(my $FILE,">>","$file") or die "$!";
while (<$FILE>) {
chomp;
my @columns = split(/$column_separator/);
print ( $columns[$column_number] // q{} ), "\n";
}
您还应该阅读Text::CSV并学会使用它,因为它将有助于解决CSV文件的许多常见问题。