gpt4 book ai didi

perl - Text::CSV perl 模块中的 is_quoted() 方法

转载 作者:行者123 更新时间:2023-12-04 14:47:15 24 4
gpt4 key购买 nike

我可能遗漏了一些明显的东西,但是我有一个非常简单的 perl 脚本,其中 Text::CSV 模块中的 is_quoted() 方法没有按预期工作。这是代码:

# cat ./testcsv.pl
#!/usr/bin/perl

use strict;
use Text::CSV;

my $csv = Text::CSV->new ( { quote_char => '"' } )
or die "Cannot use CSV: ".Text::CSV->error_diag ();

print "Text::CSV version = " . $csv->version() . "\n\n";

my $line = '"text field 111",222,"text field 333",444';

my $status = $csv->parse($line);
if ($status)
{
my $column_idx = 0;
my @fields = $csv->fields ();
foreach my $field (@fields)
{
my $quoted = $csv->is_quoted ($column_idx);
$column_idx++;
print "field #$column_idx: '$field'; quoted = " . ($quoted ? "YES\n" : "NO\n");
}
}

这是我运行脚本时得到的结果:

# perl -v | grep "是 perl"
这是为 PA-RISC2.0 构建的 perl,v5.10.1 (*)
# ./testcsv.pl
文本::CSV 版本 = 1.29

字段 #1: '文本字段 111';引用 = 否
字段#2:'222';引用 = 否
字段 #3: '文本字段 333';引用 = 否
字段#4:'444';引用 = 否
#

正如我们所看到的, parse() 方法正确地将原始字符串分隔为字段,因此我知道 Text::CSV 已安装并正常工作。这是我阅读 documentation for Text::CSV 的理解。如果指定列中的数据包含在 quote_char 引号中,则 is_quoted() 方法应该返回真值。因此,我希望在字段 1 和 3 之后看到"is",因为它们在 $line 变量的初始化中明确引用。但这并没有发生。

我做错了什么,还是 Text::CSV 坏了?

最佳答案

您需要指定 keep_meta_info => 1 .

顺便说一句,我不喜欢有两个迭代器,所以我会迭代索引。

my @fields = $csv->fields();
for my $column_idx (0..$#fields) {
my $field = $fields[$column_idx];
...
}

关于perl - Text::CSV perl 模块中的 is_quoted() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14205022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com