我还是红宝石的新手。由于某种原因,我的阵列没有被看到。我在 irb 中测试了我的代码逻辑,它似乎工作正常,但是当我在 if 语句中使用它时,它会因标题中的错误而中断。
$s = []
i = 0
File.open("test.log").each do | l |
if l =~ /(m.)/
s << [$1]
i=i+1
end
if l =~ /(p.)/
s[i-1] << $1
end
end
s.each do |g|
p g
end
测试示例.log:
aaaaaaaaaaaaaaaaaa
m1
ggg
p1
p2
p3
p4
oooooooooooooo
m2
p1
p2
p3
p4
p5
gggggggggggggg
m3
p1
kkkkkkkkkkkk
m4
m5
llllllllllllll
我怎么能得到这样的数组?
[[m1,p1,p2,p3,p4], [m2,p1,p2,p3,p4,p5], [m3,p1], [m4], [m5]]
您已将数组声明为 $s
,但尝试将其访问为 s
。就Ruby而言,这是两个不同的变量。您应该将其声明为 s = []
或始终以$s
访问它,例如 $s << [$1]
.
编辑:因为评论非常受欢迎,所以我要补充一点,Ruby全局变量(即那些以$
开头的变量(可能会导致非常难以调试的情况,我不鼓励你使用它们。我想不出使用全局的情况,而不可能使用更清洁的解决方案。
每次点击m
行时,都应该在主数组中初始化一个新的子数组。 如果命中p
行,则会追加到同一索引。
index = -1;
array = []
File.open("test.log").each do |line|
if line =~ /m./
index = index + 1
array[index] = []
array[index] << line
end
if line =~ /p./
array[index] << line
end
end