额外的意外角色Perl

时间:2015-06-23 18:32:36

标签: perl

我正在阅读包含多个由换行符分隔的术语的文本文件。为了样本,我在测试文件中的两个术语是

GO:0007161
GO:0061302

再次换行换行。

我读了文件并尝试了多种方法来摆脱额外的一行:

our @GOTOSdata; 
open (GOTOS, "GOTempUpload/$ARGV[0]"); #or die ("Cannot open GOTreeOrderSearch file for read"); # read each eid from gene set into array to check if in dbfile
while (<GOTOS>) {
    $_ =~ y/\n//d;
    chomp ($_);
    push (@GOTOSdata, $_);
}
close (GOTOS);
chomp (@GOTOSdata);

我尝试使用chomp和regex表达式来删除换行符,但是当我执行length($GOTOSdata[0])length($GOTOSdata[1])时,第一个元素的意外长度为11(当它应该是10),第二个元素的预期长度为10。

如果我输入更多GO个术语,会发生类似的事情:最后一个词是正确的,有10个字符,但其他一切都是11个。

除了输入的内容之外,我如何确保该字符串没有其他内容?

2 个答案:

答案 0 :(得分:2)

我怀疑您正在外国平台上处理Windows文本文件。您会看到这些症状,因为Windows文本文件具有双字符序列CR LF作为行终止符。我想你最后一行的末尾没有换行符

此程序会将您的所有文件读入数组our并从每个元素中删除所有尾随空格,其中包括CR和LF以及空格和制表符

请注意,除非您有充分的理由,否则不应使用use strict; use warnings; use 5.010; my ($go_file) = @ARGV; open my $go_fh, '<', "GOTempUpload/$go_file" or die qq{Unable to open "$go_file" for input: $!}; my @go_data = <$go_fh>; s/\s+\z// for @go_data; close $go_fh; say length for @go_data; 或将大写字母放在本地标识符中

my $output = `somecommand parm1 parm2`;

答案 1 :(得分:1)

尝试用替换替换你的替换并选择:

$_ =~ s/\s+$//;

这应该用\ n或\ r \ n替换任何内容。您还可以考虑删除所有尾随空格,如下所示:

this