В файле есть такие данные:
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..
Как исправить эту ошибку?
1 ответ
Сообщение об ошибке означает, что столбец пуст. Вот почему он не определен. Вам нужно добавить чек и обработать случай, когда он пуст. Вы можете сделать это двумя способами:
добавить условие и вообще не выводить пустые столбцы
print $columns[$column_number], "\n" if $columns[$column_number];
вывести пустую строку, если значение не определено
print( ( $columns[$column_number] // q{} ), "\n");
Вот еще несколько комментариев: Вы используете use
Text :: CSV, но не используете его для чтения.
Вместо этого вы читаете файл построчно, но есть несколько вещей, которые вам нужно добавить и изменить:
- измените режим вызова
open
с>>
на<
, потому что>>
означает добавить , но вы хотите прочитать chomp
ввод для удаления завершающих символов новой строки
Все это приводит к следующему коду.
open(my $FILE,">>","$file") or die "$!";
while (<$FILE>) {
chomp;
my @columns = split(/$column_separator/);
print ( $columns[$column_number] // q{} ), "\n";
}
Вам также следует ознакомиться с Text :: CSV и научиться использовать его, поскольку он поможет с много распространенных ошибок для файлов CSV.
print (...) interpreted as function at another.pl line 13. Useless use of a constant in void context at another.pl line 13. Unknown open() mode '' at another.pl line 9.
,
, но в вашем примере ввода столбцы выровнены с использованием пробелов ....
Похожие вопросы
Новые вопросы
perl
Perl - это процедурный высокоуровневый динамический язык программирования общего назначения, известный своей собственной поддержкой регулярных выражений и возможностей синтаксического анализа строк. Пожалуйста, используйте этот тег для вопросов о Perl в целом. Для вещей, связанных с новым (но связанным) языком Raku (ранее «Perl 6»), используйте тег raku. Для регулярных выражений в стиле Perl на других языках используйте тег regex или, если они основаны на библиотеке PCRE, тег pcre.