【问题标题】:Text::CSV bind_columns not workingText::CSV bind_columns 不工作
【发布时间】:2013-10-08 16:40:04
【问题描述】:

当我使用此代码时,它不会显示任何输出。它只打印表格标签。我有什么遗漏吗?

这是我的 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>";

【问题讨论】:

    标签: perl csv text


    【解决方案1】:

    the documentationbind_columns 中,您可以阅读以下内容:

    获取对标量的引用列表来存储获取的字段 getline()。当您没有传递足够的引用来存储获取的字段时,getline() 将失败。

    实际上,您的行中有 4 个字段,但您在 bind_columns 中传递了 3 个引用。

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

    最后一个字段为空。如果您向bind_columns 添加一个字段,您的代码将按预期工作。

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

    【讨论】:

    • 我一遍又一遍地阅读文档,但我不知道我传递的是一个空白字段。谢谢你的解释。
    • @9edge 不客气。您可以使用 CGI 模块做更多的事情,例如打印表格和 tr/td、html 标头等。您可以将数组 ref 传递给 td 并为每个元素获取一个 &lt;td&gt; .. &lt;/td&gt;,这似乎非常适合这种情况:while (my $row = $csv-&gt;getline($fh)) { print Tr( td($row) ) }(意味着你可以跳过bind_columns
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多