perl - 文本处理 - 输出到csv文件

时间:2010-07-15 18:20:57

标签: perl csv text-processing

perl是否有办法将数据从文件导出到csv文件。 我的意思是,

说我有一个文件如下..

field1=value1,filed2=value2
field1=value3,filed2=value4
field1=value5,filed2=value6

我想将其导出为ex​​cel格式,如下所示。

field1  field2
value1  value2
value3  value4
value5  value6

无论如何这样做?

此外,这里有一点问题。 假设我将一个文件导出到同一个CSV文件...其内容如..

field1=value1,fields2=value8

我的CSV应该是

field1  field2
value1  value2
        value8
value3  value4
value5  value6

有更简单的方法吗?现在我手动做。不知道是否有更好的方法。

谢谢。

3 个答案:

答案 0 :(得分:3)

查看Text::CSV(用于将CSV文件读入perl数据结构)和Spreadsheet::WriteExcel(用于以Excel格式写回数据)。

答案 1 :(得分:1)

你去吧

#!/usr/bin/env perl

open (IMPORT, "import.txt") || die "Unable to read import file";

my @lines = <IMPORT>;
my @formatted = ();

for my $line (@lines) {
    $line =~ s/^.*=(.*?),.*?=(.*?)/$1\t$2/g;
    push(@formatted, $line);
}

my $current_field;

for my $format_line (sort @formatted) {
    my($field1, $field2) = (split(/\t/, $format_line));
    if ($field1 ne $current_field) {
        print "$field1";
    }
    print "\t$field2";

    $current_field = $field1;
}

import.txt包含

field1=value1,filed2=value2
field1=value3,filed2=value4
field1=value5,filed2=value6
field1=value1,fields2=value8

导致

value1  value2
        value8
value3  value4
value5  value6

答案 2 :(得分:0)

在读入新文件之前,请读入目标csv文件(如果它不为空)。创建哈希散列。第一个散列HashA的关键是field1的值。像value1这样的键的值将是哈希HashB。 HashB将具有作为field2的值的键,其对应于value1。 HashB中键的值只是'1'。 (它无关紧要。)

现在,当您要导出第二个文件时,只需为HashA的每个键添加新密钥到HashB。

这是你的例子。

首先你要做第一个文件

value1 - &gt; {value2 - &gt; 1}
value3 - &gt; {value4 - &gt; 1}
value5 - &gt; {value6 - &gt; 1}

现在当您使用line field1 = value1,field2 = value8读取第二个文件时,您只需为HashB添加一个值为value1

value1 - &gt; {value2 - &gt; 1,value8 - &gt; 1}
value3 - &gt; {value4 - &gt; 1}
value5 - &gt; {value6 - &gt; 1}

现在,当您遍历HashA时,您将在column1中打印键(对于field1)并从HashB打印每个键。

#!/usr/bin/perl

%hashA = ();

$hashA{"value1"}{"value2"} = 1;
$hashA{"value3"}{"value4"} = 1;
$hashA{"value5"}{"value6"} = 1;

foreach $value1 ( sort keys %hashA ) {
    foreach $value2 ( sort keys %{ $hashA{$value1} } ) {
        print "$value1, $value2\n";
    }
}

$hashA{"value1"}{"value8"} = 1;

print "\n\n";
foreach $value1 ( sort keys %hashA ) {
    foreach $value2 ( sort keys %{ $hashA{$value1} } ) {
        print "$value1, $value2\n";
    }
}