是否有Perl的Text :: Table输出的解析器?

时间:2009-05-30 06:08:06

标签: perl parsing

假设我有一堆用Text::Table创建的表。是否存在将它们转换回Perl数据结构的解析器,或者我是否必须自己编写?

5 个答案:

答案 0 :(得分:2)

Text :: Table是用于创建数据表示的模块。如果它用于存储和检索(即文件格式),它将包括解析现有表的方法。

答案 1 :(得分:2)

看起来有点令人费解。如果您在将其转换为表格之前获得了信息,那么为什么要尝试从其表示形式中解析它?这就像有一个文本文件,将其转换为latex,然后转换为postscript,然后尝试从postscript文件中获取文本。

我确信有一种方法可以解析Text :: Table的输出,但似乎你的工作流程存在缺陷;我的目标是为数据使用更简单的输出(除了Text :: Table,如果你真的必须这样),就像YAML那样可以简单地恢复到原始数据结构。

答案 2 :(得分:0)

通过在Google上执行“site:search.cpan.org”Text :: Table“解析”搜索,我找不到用于此目的的模块。

答案 3 :(得分:0)

为什么不使用CSV?

如果你有许多不同长度的列,那么CSV在人类可读方面并不是很好,但它可以在紧要关头完成。

CSV的好处在于,任何电子表格(以及许多其他工具)都会以友好,友好的方式解析和显示CSV。

<强>更新

布莱恩,

基于OP的评论,上面:

  

客户想要一个既可人也可机读的表格数据格式。 - Horace Loeb 5月31日3:26

我得出的结论是,他可以控制生产代码作为消费代码。

我的回答是回答“我可以使用哪种格式的人机阅读?”

答案 4 :(得分:-1)

您可以在输出之前将它们作为Perl自我保留。无论您打印一次,都可以根据需要重印。请参阅Storable - 或YAML::Syck,它会将其转储到YAML中。

如果您的格式为Storable,则可以

  1. 阅读
  2. 中的文件
  3. 有一些标准格式来检查所请求的更改。
  4. 如果更改,请将其写回。
  5. 但是,使用YAML,修改YAML文件可能很容易。

    Text::Table给出的示例的YAML如下所示:

    --- !!perl/hash:Text::Table 
    blank: ~
    cols: 
      - 
        - Mercury
        - Venus
        - Earth
        - Jupiter
      - 
        - 2360
        - 6110
        - 6378
        - 71030
      - 
        - 3.7
        - 5.1
        - 5.52
        - 1.3
    forms: 
      - "%s %s %s"
      - "%s %s %s"
    lines: ~
    spec: 
      - 
        align: auto
        align_title: left
        align_title_lines: left
        sample: []
    
        title: 
          - Planet
      - 
        align: auto
        align_title: left
        align_title_lines: left
        sample: []
    
        title: 
          - Radius
          - km
      - 
        align: auto
        align_title: left
        align_title_lines: left
        sample: []
    
        title: 
          - Density
          - g/cm^3
    titles: 
      - 
        - Planet
        - "      "
      - 
        - Radius
        - "km    "
      - 
        - Density
        - "g/cm^3 "