我正在逐行读取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;
我希望我能说明问题。 非常感谢, 弗朗西斯
答案 0 :(得分:0)
看起来该文件是在Mac上创建的,并且行尾字符是单个\r
。
您可能没有删除它(Perl中的chomp
)。发生的事情是输出完成但嵌入的\r
导致后来的文本覆盖了早期的输出。
另一种可能性是文件是在Windows上创建的(行结尾为\r\n
),并且您正在系统中处理此文件,其中行结尾仅为\n
。在这种情况下,chomp
会删除\n
,但会将\r
留在行尾。
在拆分之前,您应该从行中删除所有尾随空格。即
s/\s+$//