这可能是一个更一般的编程问题,但我想知道红宝石的最佳做法是在解决这个问题。我想分析的一些结构像这样的文件:在包含.each_line的红宝石循环中提前行号码
toplevel blah blah 0
attr0: foo
attr1: bar
nextlevel something 0
child0: baz
child1: boz
var1: blah
nextlevel something 1
child0: faz
abc: yes
child1: foz
我采用分体式和解析出数据块或可能迭代与.each_line
该文件,然后莫名其妙地认为(我不知道怎么做)做嵌套迭代
嵌套线,我想,会是这个样子:
input.each_line do |line|
#parse attributes
if line =~ /nextlevel:\s+(\d)/ then
#now advance the line count somehow and continue parsing in here
end
PS对不起,如果这个例子中的名字有点杂乱,但我想要制作一个简化的MWE。
是不是“先行计数”只是'line_count + = 1'或..? ;-) – 2012-08-01 22:05:25
无论如何,我会*不*使用'each_line',而是将(打开的)文件传递给*递归函数*,并且每个函数根据需要使用这些行。它看起来像缩进(或缺乏)确定基础和递归情况。 – 2012-08-01 22:06:11
此外,它看起来可以摆弄(或写入)[YAML](http://corelib.rubyonrails.org/classes/ YAML.html)或其他标记格式(基于偏好?)和*然后*消耗..?使用现有的工具是最容易的,同时也减少了“新的一次性格式”的引入。 – 2012-08-01 22:07:53