string - 如何强制 Text::CSV 将数字存储为文本?

标签 string csv perl formatting truncate

我正在编写一些 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/

相关文章:

c++ - 两个字符串的交换元素C++

函数内部的 C 问题,在另一个单词中搜索一个单词并返回位置

perl - 每当文本小部件中的光标位置发生变化时自动调用子程序

string - Perl Morgan 和字符串?

C - 计数元素(边界检查) - 数组

Ruby 字符串可变性

arrays - 为什么我不能在 Powershell 的 foreach 循环中查找数组索引?

mysql - 使用 MySQL 更新 csv 字段中的行

postgresql - 如何在 postgres 前端 COPY 中指定一个选项卡

javascript - 如何从 base64 字符串创建临时文件