2

このコードを使用すると、出力が表示されません。テーブルタグのみを出力します。足りないものはありますか?

これは私のcsvファイルです:

id;name;city;
1;name;london;
5;testname;newyork;
7;users;amsterdam;
8;test1234;eindhoven;

これは私のperlスクリプトです:

#!C:\perl64\bin\perl.exe -wT
use strict;
use warnings;
use CGI;
use CGI::Carp qw/fatalsToBrowser/;
use CGI qw(:standard);
use Text::CSV_XS;

print "Content-Type: text/html\n\n";
my $file = 'import.csv';
my $csv = Text::CSV_XS->new({
    'quote_char'  => '',
    'escape_char' => '',
    'sep_char'    => ";",
    'binary'      => 1,
    'eol'         => $/
});

$csv->bind_columns (
                \my $id,
                \my $name,
                \my $city);

open my $fh, "<", $file or die "$file: $!";
print "<table border='1'>";
while($csv->getline($fh)){
    print "
        <tr>
            <td>$id</td>
            <td>$name</td>
            <td>$city</td>
        </tr>";
}
print "</table>";
4

1 に答える 1

5

ドキュメントではbind_columns、次のことを読むことができます。

getline () で取得したフィールドを格納するために、スカラーへの参照のリストを取得します。取得したフィールドを格納するのに十分な参照を渡さない場合、getline () は失敗します。

そして、実際には行に 4 つのフィールドがありますが、 で 3 つの参照を渡しますbind_columns

id;name;city;  # fields "id", "name", "city" and ""

最後のフィールドは空です。bind_columnsコードにフィールドを追加すると、期待どおりに機能します。

$csv->bind_columns (
            \my $id,
            \my $name,
            \my $city,
            \my $blank
);
于 2013-10-02T10:19:28.110 に答える