【发布时间】:2017-07-14 10:17:46
【问题描述】:
open(IN_FILE, $id_file) or die "Cant open $id_file file";
while (my $id_list= <IN_FILE>) {
chomp $id_list;
if ($id_list =~ m/^#|^$/g) {
next;
}
# This Works WELL
# if the file comes in QIIME format
elsif($otus_tag){
if ($id_list =~ m/^$otus_tag\t/g) {
@list_id = split /\t/, $id_list;
}
}
# This is the section that I want to FIX !!!!
# if the format are in space, tab, semicolon, comma or in new line.
elsif(!$otus_tag){
if ($id_list =~ m/\s|\t|\,|\;/g) {
@list_id = split /\s|\t|\,|\;/, $id_list;
}
}
}
我有一个 perl 脚本的一部分,用于从 6 种不同格式的文件中提取 id 列表:
Tab_delimited file:
Y4.SW08.DCM.X4a_1386 Y4.SW08.DCM.X4a_1457 Y4.SW08.DCM.X4a_1590
Tab_delimited_QIIME file:
A100B1 Y4.SW08.DCM.X4a_1386 Y4.SW08.DCM.X4a_1457 Y4.SW08.DCM.X4a_1590
Space_delimited file:
Y4.SW08.DCM.X4a_1386 Y4.SW08.DCM.X4a_1457 Y4.SW08.DCM.X4a_1590
Comma_delimited file:
Y4.SW08.DCM.X4a_1386,Y4.SW08.DCM.X4a_1457,Y4.SW08.DCM.X4a_1590
Semicolon_delimited file:
Y4.SW08.DCM.X4a_1386;Y4.SW08.DCM.X4a_1457;Y4.SW08.DCM.X4a_1590
List_delimited file:
Y4.SW08.DCM.X4a_1386
Y4.SW08.DCM.X4a_1457
Y4.SW08.DCM.X4a_1590
目前,将 id 添加到数组中的代码效果很好,除了最后一种格式,列表分隔文件,我尝试在接下来的 2 行中添加一个 \n:
if ($id_list =~ m/\s|\t|\,|\;|\n/g)
@list_id = split /\s|\t|\,|\;|\n/, $id_list;
但当文件格式为列表时,它不会将id添加到数组中!!! ...... 任何想法 ???
非常感谢
【问题讨论】:
-
\s包括\n -
永远不要使用
if (/.../g)*。完全没有意义,并且行为与if (/.../)略有不同。使用if (/.../)! (* - 除非您展开 while 循环。) -
我不知道你的问题是什么,但我怀疑你想知道为什么
$id_list不包含超过一行,即使你只放了一行? -
@toolic 和
\t! -
问题是什么?
标签: arrays list perl newline qiime