我正在阅读包含多个由换行符分隔的术语的文本文件。为了样本,我在测试文件中的两个术语是
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个。
除了输入的内容之外,我如何确保该字符串没有其他内容?
答案 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