在Perl中,我正在尝试解析XML并将内容写入CSV文件。我从XML中提取的一些文本很大 - 实际上是段落。当我写入CSV文件时,非常可以理解,弄乱了单元格。内容溢出到其他单元格并推出数据。
我在编写之前试图寻找“column-wrap”选项,但没有一个显然不是CSV函数。
以下是我正在使用的代码。我将数组的元素连接成一个字符串,并将这个巨大的字符串写入CSV文件。
#------输出文件处理----------#
打开(OutFile,“>> $ design_extract”)或死“$!”;
打印OutFile“设计,控制类型,Study_Purpose,主要目标\ n”;
$study_content = join(" ", @study_arr), "\n";
print OutFile "$design_id,$control_type,$study_content,$prime_obj_content\n";
学习内容和主要目标都是非常长的字符串。@ study_arr是从XML文件中提取的字符串数组(文本行)。
任何人对如何将这些巨大的数据写入CSV仍然有任何更好的想法仍然让它看起来可读和漂亮?非常感谢任何输入。
TIA,西马克
答案 0 :(得分:3)
“我从XML中提取的一些文本很大 - 实际上是段落。” - 无关紧要,这并不像最大行长度。< / p>
“当我写入CSV文件时,[这就是]弄乱了单元格。” - CSV没有“单元格”的概念。 CSV文件不是MS Excel / LO Calc电子表格。它只是一种将表格数据表示为纯文本文件的格式。
“我试图寻找”列包装“选项” - 同样,CSV没有代表性标记。这只是表格数据。
“print OutFile "$foo,$bar,$baz\n";
” - 这是您的一些问题的根源:您没有正确处理字段中可能的逗号。缓解此问题的常用方法是将字段括在引号中。例如:
Work,Author,Quote
Hamlet,"William Shakespeare","To be, or not to be, that is the question"
简单地插入变量也不会考虑换行符,换行符通常用作记录分隔符。
“我如何将这些庞大的数据写入CSV并使其看起来仍然可读?” - 将您的数据写入CSV文件,并创建另一个额外的文件漂亮。您可以使用HTML / CSS或LaTeX创建漂亮的表。
如果您希望将其作为纯文本,Perl的format
/ write
内置函数可以提供帮助,因为列可以拉伸多行。但是,我觉得它们过时了,宁可提倡其他可能性。
简单:use Text::CSV
。不要重新发明轮子。
use strict; use warnings; use autodie;
use Text::CSV;
my $csv = Text::CSV->new({ binary => 1, eol => $/ });
open my $fh, ">:utf8", "some file";
my @rows = (
[qw/ Work Author Quote /],
["Hamlet", "William Shakespeare", "To be, or not to be, that is the question"],
);
for my $row (@rows) {
$csv->print($fh, $row);
}
如上例所示输出。