写入CSV和内容溢出的单元格

时间:2013-07-01 23:30:31

标签: xml perl csv

在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,西马克

1 个答案:

答案 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内置函数可以提供帮助,因为列可以拉伸多行。但是,我觉得它们过时了,宁可提倡其他可能性。

如何正确编写CSV文件

简单: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);
}

如上例所示输出。