我如何打印如下的csv文件行:
string1,string2,string3,string4
string5,string6,string7,string8
。
到如下所示的Excel文件:
string1 string2 string3 string4
string5 string6 string7 string8
。
字符串1和字符串5在A列中,字符串2和6在B列中,依此类推?
我刚刚开始使用Perl,但不确定如何处理。谢谢!
答案 0 :(得分:1)
编程就是解决问题。但是有时问题确实很大,似乎太复杂了。然后您需要做的就是将其分解为更容易解决的较小问题。
您说要将CSV文件转换为Excel文件。您必须先决定是否要XLS or XLSX。在Excel中打开它们时,这两种格式看起来都一样,但实际上它们实际上是完全不同的。
在Perl中解决问题时,搜索的第一位始终是metacpan。让我们尝试一下:
我将选择Excel :: Writer :: XLSX。 Quick Start part of the docs建议这样做以创建文件并写入一列。
use Excel::Writer::XLSX; # Step 0 my $workbook = Excel::Writer::XLSX->new( 'perl.xlsx' ); # Step 1 $worksheet = $workbook->add_worksheet(); # Step 2 $worksheet->write( 'A1', 'Hi Excel!' ); # Step 3 $workbook->close(); # Step 4
现在,我们知道在哪里可以写入Excel文件。但是仍然存在一些问题。让我们把整个事情分解。
谷歌搜索“如何在Perl中读取CSV文件?”给我们this article作为第一匹配。它有几个解决方案(在Perl中通常是这样)。最好的方法是使用Text :: CSV,因为它可以为您完成所有工作。同样,请参阅the documentation on metacpan了解更多详细信息。
# Object interface use Text::CSV; my @rows; # Read/parse CSV my $csv = Text::CSV->new ({ binary => 1, auto_diag => 1 }); open my $fh, "<:encoding(utf8)", "test.csv" or die "test.csv: $!"; while (my $row = $csv->getline ($fh)) { $row->[2] =~ m/pattern/ or next; # 3rd field should match push @rows, $row; } close $fh;
当然,这不完全是您想要的,但这是一个好的开始。
现在,您需要遍历每一行并占用每一列,并将其写入Excel文件。我假设您知道如何遍历列表。上面的示例已经做到了。我们需要做的确切是这样:
如果您现在对这些步骤有疑问,可以搜索更具体的问题。
许多Perl模块都带有示例。如果您查看metacpan上的发行版,将会发现Excel::Writer::XLSX的版本很多。单击模块名称以转到分发页面,然后向下滚动。
Text :: CSV也带有类似的示例。