2010-02-23 7 views
3

Почему чтение из __DATA__ работы и чтения из файла не выполняется (Loose unescaped quote)?Почему DBD :: CSV жалуется на «Loose unescaped quote»?

#!/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; "Реквием - Laudate Dominum Exultate, ликовать"; 19 ; "DG", "красноречие", "0a11f513"

"данные" или "Enter": данные
Kammermusik Fuer Blaeser
Реквием - Laudate Dominum Exultate, ликовать


Выход: "Enter"
1; "Kammermusik Fuer Blaeser"; 16; "Д.", "красноречие"; "dc129610"
2; "Реквием - Laudate Dominum Exultate, ликовать"; 19; "DG"; "красноречие", "0a11f513"

"данные" или "Enter":
DBD :: CSV :: ул EXECUTE не удалась:
Execution ОШИБКА: Ошибка 2034 при чтении файла ./klassik_CD.csv: РКРП - Сыпучие неосуществленная цитата на странице /usr/local/lib/perl5/site_perl/5.10.1/DBD/CSV.pm строка 220
.

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

+0

'использовать UTF8;', возможно? – Zaid

+0

@rjh Thx, я не собирался писать «printf». –

+0

@ Zaid Использует ли «использование utf8» значение __DATA __-? –

ответ

0

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