Почему DBD :: CSV жалуется на "бесполезную незапятнанную цитату"? - PullRequest
3 голосов
/ 23 февраля 2010

Почему чтение из __DATA__ работает, а чтение из файла - нет (пустая неэкранированная цитата)?

#!/usr/bin/env perl
use warnings; use strict; use 5.010;
use DBI;

my $table = 'klassik_CD.csv';
print qx(cat $table);

print qq{\n"data" or "Enter" : };
chomp( my $aw = <> );

if ( $aw eq 'data' ) {
    $table = 'te_mp_fi_le.csv';
    open my $fh, '>', $table or die $!;
    while ( defined( my $row = <DATA> ) ) {
    print $fh $row;
    }
    close $fh or die $!;
}

my $dbh = DBI->connect( "dbi:CSV:", { RaiseError => 1 } );
$dbh->{csv_tables}{$table} = { col_names => [], sep_char => ';' };

my $sth = $dbh->prepare( "SELECT * FROM $table" );
$sth->execute;
while ( defined( my $row = $sth->fetchrow_hashref ) ) {
    say $row->{col1};
}

__DATA__
1;"Kammermusik fuer Blaeser";16;"DG";"eloquence";"dc129610"
2;"Requiem – Laudate Dominum Exultate, jubilate";19;"DG";"eloquence";"0a11f513"

Вывод: «данные»
1; "Kammermusik fuer Blaeser"; 16; "DG"; "красноречие"; "dc129610"
2; "Requiem - Laudate Dominum Exultate, jubiate"; 19; "DG"; "Красноречие"; "0a11f513"

«данные» или «ввод»: данные
Каммермусик Фуэр Блейзер
Реквием - Laudate Dominum Exultate, юбилей


Выход: «Enter»
1; "Kammermusik fuer Blaeser"; 16; "DG"; "красноречие"; "dc129610"
2; "Реквием - Laudate Dominum Exultate, jubiate"; 19; "DG"; "Красноречие"; "0a11f513"

«данные» или «ввод»:
DBD :: CSV :: st выполнить не удалось:
ОШИБКА выполнения: Ошибка 2034 при чтении файла ./klassik_CD.csv: EIF - Свободная неэкранированная цитата в /usr/local/lib/perl5/site_perl/5.10.1/DBD/CSV.pm строка 220
,

[для оператора "SELECT * FROM klassik_CD.csv"] в строке ./zzzzzzzzzz.pl 27.
DBD :: CSV :: st fetchrow_hashref завершилась неудачно: попытка получить строку без предшествующего вызова execute () или из оператора, не являющегося SELECT [для оператора «SELECT * FROM klassik_CD.csv»] в строке ./zzzzzzzzzz.pl 28.

1 Ответ

0 голосов
/ 23 февраля 2010

Когда я переименовываю файл из «klassik_CD.csv» в «klassik_cd.csv» (все строчные), он работает (хотя не было такого сообщения, как «файл не найден»).

...