首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Perl错误地添加了换行符?

Perl错误地添加了换行符?
EN

Stack Overflow用户
提问于 2013-10-08 12:05:57
回答 4查看 227关注 0票数 0

这是我的制表符分隔输入文件

代码语言:javascript
运行
复制
Name<tab>Street<tab>Address

这就是我希望的输出文件的样子

代码语言:javascript
运行
复制
Street<tab>Address<tab>Address

(是的,重复接下来的两列)我的输出文件如下所示

代码语言:javascript
运行
复制
Street<tab>Address
         <tab>Address

perl是怎么回事?这是我的代码。

代码语言:javascript
运行
复制
open (IN, $ARGV[0]);

open (OUT, ">output.txt");
while ($line = <IN>){

    chomp $line;
    @line=split/\t/,$line;

    $line[2]=~s/\n//g;
   print OUT $line[1]."\t".$line[2]."\t".$line[2]."\n";
}

close( OUT);
EN

回答 4

Stack Overflow用户

发布于 2013-10-08 22:32:10

首先,你应该始终

即使是最琐碎的程序,也可以使用

  • use strictuse warnings。您还需要使用my声明每个变量,以尽可能接近它们的第一次使用
  • 使用词法文件句柄和三参数形式的my表示每次open调用成功,并使用包含$!的字符串声明die,以显示

失败的原因

另请注意,不需要显式打开命令行上指定的文件,这些文件出现在@ARGV中:您只需使用<>读取它们即可。

正如其他人所说,看起来您正在读取Linux系统上的DOS或Windows源文件。您可以使用s/\s+\z//从每一行中删除所有尾随空格字符,而不是使用chomp。因为CR和LF都算作“空白”,所以这将从每条记录中删除所有的行终止符。但是,请注意,如果尾部空格很重要,或者最后一个字段可能为空,则这也会删除空格和制表符。在这种情况下,s/[\r\n]+\z//更合适。

这个版本的程序运行得很好。

代码语言:javascript
运行
复制
use strict;
use warnings;

@ARGV = 'addr.txt';

open my $out, '>', 'output.txt' or die $!;

while (<>) {
  s/\s+\z//;
  my @fields = split /\t/;
  print $out join("\t", @fields[1, 2, 2]), "\n";
}

close $out or die $!;
票数 4
EN

Stack Overflow用户

发布于 2013-10-08 22:46:56

如果您事先知道数据文件的来源,并且知道它是一个使用CR LF终止记录的类DOS文件,则可以在打开该文件时使用PerlIO crlf层。像这样

代码语言:javascript
运行
复制
open my $in, '<:crlf', $ARGV[0] or die $!;

然后,当在Linux系统上读取所有记录时,它们将显示为仅以"\n"结尾。

此问题的一般解决方案是安装PerlIO::eol。然后你就可以写

代码语言:javascript
运行
复制
open my $in, '<:raw:eol(LF)', $ARGV[0] or die $!;

无论文件的来源如何,也不管运行"\n"的平台是什么,行的结尾都将始终为Perl。

票数 2
EN

Stack Overflow用户

发布于 2013-10-08 15:19:00

您是否尝试过不仅要删除"\n“,还要删除”\r“?

代码语言:javascript
运行
复制
$file[2] =~ s/\r\n//g;
$file[3] =~ s/\r\n//g; # Is it the "good" one?

这能行得通。DOS行结尾也可以是"\r“(不仅仅是"\n")。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19238897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档