分割字段解析的问题

时间:2014-03-18 16:44:18

标签: perl parsing text

我正在逐行读取txt文件。列通过“;”分隔分隔符和文件类似于下面的文件。

text;10.1.1.1;description
text;10.1.1.2;description
...
text;10.1.1.90;description

Perl代码:

@splitted=split(";",$line)
$description=$splitted[2];

我在阅读最后一个字段时遇到了一个奇怪的情况(描述)。 这个字段没有正确读取,我可以在进行文本比较时看到问题,但在打印$ description时更加明显

如果我

print ":$description:" 

(我正在使用:作为分隔符来查看字符串之前和之后是否有空格),我可以看到实际字符串甚至会占用行情,或者在该短语之前的任何字符串:

字面上:

而不是:

"The value of description is :abcdef:" 

我得到了

"The value of descripabcdef"

通过在行尾添加分隔符来解决问题:IE:

text;10.1.1.1;description;
text;10.1.1.2;description;
...
text;10.1.1.90;description;

我希望我能说明问题。 非常感谢, 弗朗西斯

1 个答案:

答案 0 :(得分:0)

看起来该文件是在Mac上创建的,并且行尾字符是单个\r

您可能没有删除它(Perl中的chomp)。发生的事情是输出完成但嵌入的\r导致后来的文本覆盖了早期的输出。

另一种可能性是文件是在Windows上创建的(行结尾为\r\n),并且您正在系统中处理此文件,其中行结尾仅为\n。在这种情况下,chomp会删除\n,但会将\r留在行尾。

在拆分之前,您应该从行中删除所有尾随空格。即

s/\s+$//