Данные, которые мне предоставили, являются дампом из базы данных mysql, и в некоторых файлах отсутствуют заголовки столбцов.
Когда я пытаюсь извлечь строку, скажем, Dumper $ parser-> fetch; возвращает неопределенное значение для файлов без заголовков столбцов. Я сделал if (-e $ file), и он видит файл. Я также попробовал
names => 1
и
names => ['id', 'description']
и оба раза вывод был неопределенным, хотя для последних имен $ parser-> он вывел id и description (имена, а не значения столбцов).
Правильно ли я присваиваю имена столбцам? Если так, то почему он возвращает undefined?
#!/usr/bin/perl
use v5.24.3;
use strict;
use warnings;
# Modules
use Data::Dump; # dd \%hash
use Data::Dumper; # say Dumper(\%hash)
use Spreadsheet::ParseXLSX;
use Text::CSV_XS;
use Parse::CSV;
my $path = './path/to/data/';
my $vendor = 'fwd';
my $ext = '.csv';
my @f = (
'spring_categories',
'prod_descriptions',
'feature_bullets',
'category_mapping'
);
my $file = $path . $vendor . '/' . $f[1] . $ext;
my $parser = Parse::CSV->new(
"file" => $file,
"names" => ['id', 'description'],
"csv_attr" => {
"sep_char" => ',',
"quote_char" => "'"
}
);
# Not triggering error
if ( $parser->errstr )
{
say "There was an error";
}
else
{
say $parser->names; # outputs | iddescription
say Dumper $parser->fetch; # outputs | $VAR1 = undef
# Doesn't reach while
while ( my $value = $parser->fetch )
{
say Dumper $value;
say $parser->row;
# my @names = $parser->names;
# dd \@names;
# say $names[0];
die;
}
Вот временный тестовый файл, который я сделал, чтобы поделиться без конфиденциальных данных, который имеет ту же проблему для меня.
4732947234,"Lorem ipsum dolor sit amet, consectetur adipiscing elit"
6732947274,"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo"
7657657274,Nemo enim ipsam voluptatem quia voluptas
3993007274,magnam aliquam quaerat voluptatem
2449049474,"laboriosam, nisi ut aliquid ex ea commodi consequatur"
4732947273,"laboriosam, nisi ut aliquid ex ea commodi consequatur"
8732947270,"ntium doloremque laudantium, totam rem aperiam, eaque ipsa "