perl是否有办法将数据从文件导出到csv文件。 我的意思是,
说我有一个文件如下..
field1=value1,filed2=value2
field1=value3,filed2=value4
field1=value5,filed2=value6
我想将其导出为excel格式,如下所示。
field1 field2
value1 value2
value3 value4
value5 value6
无论如何这样做?
此外,这里有一点问题。 假设我将一个文件导出到同一个CSV文件...其内容如..
field1=value1,fields2=value8
我的CSV应该是
field1 field2
value1 value2
value8
value3 value4
value5 value6
有更简单的方法吗?现在我手动做。不知道是否有更好的方法。
谢谢。
答案 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";
}
}