【问题标题】:Perl Excel parser truncating columnsPerl Excel解析器截断列
【发布时间】:2013-02-12 18:04:22
【问题描述】:

我是 Perl 新手,正在尝试解码读取 Excel 文件并将数据导出到文本文件的 Perl 脚本。脚本中的步骤之一执行异常。 这是步骤:

@array_name = grep {$_} @array_name;

如果值为0,此步骤只会截断最后一列;否则它可以正常工作。如果我删除此步骤,值 0 的最后一列将返回,但它在我的提取中包含一些虚拟的 NULL 列,它们不属于我的源 Excel 文件的一部分。

有人可以帮我理解这一步吗?

【问题讨论】:

    标签: perl excel file


    【解决方案1】:

    grep 命令过滤非空内容。因此,所有不评估为真的东西都将被丢弃。空单元格和包含0 的单元格将被删除。如果您只想删除空单元格,您可以使用

    @array_name = grep { defined && length } @array_name ;
    

    改为。

    【讨论】:

    • 这就像一个宝石。非常感谢,非常感谢您的帮助。
    • 嗨,dgw,当我包含此行时,我面临另一个问题,它会删除具有空白值的列。我需要这些列在我的最终输出中。请建议
    • @user1415006 然后就让它@array_name = grep { defined } @array_name ; 这只是删除 undef 值。
    • 如果我这样做......它会保留具有空白值的列,但奇怪的是还包括两个空列,它们不是我的 Excel 工作表的一部分。
    【解决方案2】:
    $A->[$i][10]=~s/\n//g;
    
    $variable_value =~s/\n//g;
    

    $variable_value 是存储值的变量。

    它将删除下一行。

    【讨论】:

      【解决方案3】:

      grep基本上是从数组中返回所有真值,0被内插为假。

      例如grep在这里用来过滤真值到@b中,

      my @dirty = (0,1,2,3,,0,5,);
      my @clean = grep {$_} @dirty;
      for(@clean) {print "$_\n";}
      

      返回

      1
      2
      3
      5
      

      保留零的一个小技巧是在 grep 参数中添加换行符:

      my @dirty = (0,1,2,3,,0,5,);
      my @clean = grep {"$_\n"} @dirty;
      for(@clean) {print "$_\n";}
      

      返回,

      0
      1
      2
      3
      0
      5
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-18
        • 2011-09-09
        • 2013-11-15
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        • 2018-01-09
        • 1970-01-01
        相关资源
        最近更新 更多