在Perl中将表文本文件转换为CSV

时间:2019-08-05 04:38:29

标签: csv perl

我有一个文件,其中包含固定宽度记录格式的内容列表,例如...

w+

我想将其转换为一个csv文件。我知道我可以利用Text :: CVS_XS来解决这个问题,但是我很难把它包裹住。我见过很多文本到cvs的例子,但是在文本已经是表格格式的情况下却没有。这是否意味着,我将不得不从表格格式更改它,并在两者之间添加逗号?还是Text :: CVS为我做到了?

Name        Lastyear Weight      Thisyear Weight
Alice       130                  135
Bob         170                  165
Chris       190                  210
Daniel      195                  185 
Eric        150                  170

1 个答案:

答案 0 :(得分:2)

我假设您是指固定宽度的记录格式。

use strict;
use warnings;
use autodie;
use Text::CSV_XS qw();
open my $in, '<', 'so-57352269.txt';
open my $out, '>:encoding(UTF-8)', 'table.csv';
my @column_widths = (6, 5, 6);
my $csv = Text::CSV_XS->new({binary => 1, auto_diag => 1});
while (my $line = $in->getline) {
    chomp $line;
    my $pack_format = join '', map { "a$_" } @column_widths;
    my @record = unpack $pack_format, $line;
    $csv->say($out, \@record);
}