【发布时间】:2013-07-23 11:45:02
【问题描述】:
我有一个带有字符串的数组 (@myarray):
rs30000489
rs903484
rs24567;rs324987;rs234985
rs5905002
rs32456;rs2349085
当我匹配另一个类似的 (@otherarray) 数组时,没有带分号和多个 rsID 的字符串,代码如下:
for $1(0 .. $#otherarray) {
for $m(1 .. $#myarray) {
if ($myarray[$m] =~ /$otherarray[$i]/i) {
$IDmatch = 1;
}
}
}
脚本不匹配带有分号的字符串中的任何 ID。我尝试像这样拆分分号字符串:
foreach $string (@myarray) {
if ($string =~ m/;/) {
push (@newarray, $string);
}
}
返回数组@new:
rs24567;rs324987;rs234985
rs32456;rs2349085
然后我尝试用一个普通字符来分割它:
foreach $line (@new) {
$line =~ tr/;//d;
$line =~ s/rs/ rs/g;
$line = split (/ /);
}
但是当我打印@new 数组时,它只返回零。我知道这一定与我的循环有关,因为我在使用 perl 中的循环时遇到了麻烦。如果您有任何想法,请告诉我!谢谢!
【问题讨论】:
-
这听起来像XY-problem。你真正想要做什么?将两个 ID 列表相互匹配?
-
另外,在编写关键描述时应该更加小心。这是什么意思:
without strings with semicolons and multiple rsIDs没有带分号的字符串听起来像是它唯一的分号。您几乎应该总是展示而不是描述。 -
而你的
'split'并不是真正的分裂。它与;匹配,然后将其推送到@new -
@TLP 是的,我的意思是我要检查的数组没有任何字符串实例,例如 rs#;rs#;rs# 就像 '@myarray' 数组一样
-
@user2560686 现在,这对你来说可能有意义,但对我来说,你只是说
@otherarray有其他类型的字符串。如果您考虑一下,这并没有真正说明什么。为了让事情变得更简单,您应该只显示示例数据,就像您对第一个数组所做的那样。