首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >额外的意外字符Perl

额外的意外字符Perl
EN

Stack Overflow用户
提问于 2015-06-23 18:32:36
回答 2查看 97关注 0票数 1

我正在读取一个文本文件,其中包含由换行符分隔的多个术语。为了示例起见,我在测试文件中的两个术语是

代码语言:javascript
运行
复制
GO:0007161
GO:0061302

再用换行符隔开。

我读取了文件,并尝试了多个东西来去除额外的行:

代码语言:javascript
运行
复制
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。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-23 18:50:52

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

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

请注意,除非您有充分的理由,否则不应该使用our,也不应该将大写字母放在本地标识符中。

代码语言:javascript
运行
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2015-06-23 18:50:44

试着用以下内容替换您的替换和chomp:

代码语言:javascript
运行
复制
$_ =~ s/\r?\n//;

这应该代替\n或\r\n而不使用任何东西。还可以考虑删除所有尾随空格,如下所示:

代码语言:javascript
运行
复制
$_ =~ s/\s+$//;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31010764

复制
相关文章

相似问题

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