【问题标题】:Regarding the validation of the input file separator in Perl关于 Perl 中输入文件分隔符的验证
【发布时间】:2016-01-21 12:58:15
【问题描述】:

我在 Perl 中有 csv 输入文件,它是制表符分隔的。 我想添加一个检查,如果它找到除选项卡以外的任何内容作为字段分隔符,那么它应该通过错误消息。我是 perl 新手,不知道如何检查。

我的输入文件示例,我的文件只有两个字段:

10001027^I1000102713921-1274^M$
10010121^I1001012113921-1234^M$
10000104^I10010126139211-9999^M$
10010119^I10010126139211-9999^M$

【问题讨论】:

  • 你怎么知道除了制表符以外的东西是否是字段分隔符?
  • 我同意 ikegami 的观点——请定义什么是不可接受的字段分隔符。定义好之后,您可以搜索文件以确保不存在那些不可接受的字段分隔符。
  • 分号(;),逗号(,)

标签: perl field separator


【解决方案1】:

验证文件的一种简单方法是检查每一行是否有一个选项卡。

while (my $line = <$file>)
{
    if ($line !~ /^[^\t]+\t[^\t]+$/)
    { 
        #Handle malformed line.
    }
}

如果您打算将行拆分为元素,则可以使用拆分输出进行错误检查:

while (my $line = <$file>)
{
    my @fields = split "\t", $line;

    if (@fields != 2)
    {
       #Line did not split into two elements, indicating improperly formed line.
    } 
}

【讨论】:

  • 非常感谢。如果 ($line !~ /^[^\t]+\t[^\t]+$/) 它有效......但我还有另一个问题。如果我有多个选项卡意味着大于 2 的字段数,我应该显示错误消息不正确的字段数。因为我正在检查一个选项卡,所以当我尝试显示更大的字段数时,它不满足我的 else 部分比 2.如果我的数组包含少于两个字段的条件,那么它应该对字段进行所有验证,否则应该显示不正确的字段数
  • @puspa,上面的正则表达式只匹配一行中只有一个标签,所以它也应该涵盖这种情况。
  • 请让我知道如果没有字段分隔符大于一个选项卡,那么我应该在正确的字段数中显示错误消息。
  • 但是我想显示错误信息不正确的字段数...如果选项卡超过 1,则分隔符无效
  • 嗨,Dan 真的很有帮助,非常感谢 hep....很抱歉再次打扰您。我不想找到一个标签,而是想找出一个分号 (;)。如果分号找到然后我想标记为无效记录。如果你能帮助我,那就太好了。我必须在星期四交付这个脚本。
猜你喜欢
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 2012-11-04
  • 1970-01-01
  • 2018-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多