我正在编写一些 perl 代码,使用 Text::CSV 模块从数据库中的记录创建一个 .csv 文件。有时,我的表中的一个或多个字段将包含多个重复的 0,这些 0 将作为单个 0 写入 CSV。我试图找出如何将数字强制为文本格式,以便所有 0从这些领域将保持原样。
use Text::CSV_XS;
sub write_file {
my ($self, %params) = @_;
my $fh = $params{fh};
.. do stuff
.. get database rows
my $csv = Text::CSV_XS->new({ sep_char => ',' });
for my $row (@$rows) {
my @fields = (
$row->{name},
$row->{address},
$row->{code}
);
$csv->combine(@fields);
print $fh $csv->string . "\r\n"
or die 'Write error.';
}
使用这种方法,大多数时候一切都很好。但是,当代码显示为“00000”时,它会被截断并在我的 CSV 中写为“0”。我调查过
$csv->types
,但这仅允许在解析期间解码时定义类型。我还尝试使用
$csv->quote(@fields)
将字段括在引号中,没有运气。
最佳答案
引用 always_quote()
强制引用组合字段
use Text::CSV_XS;
my $csv = Text::CSV_XS->new( { sep_char => ',' } );
my @fields = ( "0", "00", "000" );
$csv->combine(@fields);
print $csv->string . "\n";
$csv->always_quote(1);
$csv->combine(@fields);
print $csv->string . "\n";
这导致0,00,000
"0","00","000"
关于string - 如何强制 Text::CSV 将数字存储为文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66666872/