解析文件,找到一个字符串并存储下一个值

问题描述:

我需要根据不同的规则解析文件。 该文件包含多行。 我一行一行地通过文件。当我找到一个特定的字符串时,我必须存储下一行中的数据,直到找到一个特定的字符。文件解析文件,找到一个字符串并存储下一个值

例子:

start { 
    /* add comment */ 
    first_step { 
    sub_first_step { 
    }; 
    sub_second_step { 
     code = 50, 
     post = xxx (aaaaaa, 
        bbbbbb, 
        cccccc, 
        eeeeee), 
     number = yyyy (fffffff, 
         gggggg, 
         jjjjjjj, 
         ppppppp), 
    }; 

所以,在这种情况下:

File.open(@file_to_convert, "r").each_line do |line| 

在 “行” 我有我的当前行。我需要:

1)发现当行包含字符串 “XXX”

if line.include?("union") then 

正确? 2)在数组中存储下一个值(例如:aaaa,bbbb,ccccc,eeee),直到找到字符“)”。这突出显示该部分已完成。 我想我们到达与字符串“xxxx”的行,我必须迭代块“if”内的下一行。

+0

我不明白,为什么你正在做的'如果line.include(“联盟”),那么'来检查线路包含字符串' “XXX”'。 – sawa

+0

,因为我对红宝石很新,所以这是我的第一个想法。但任何其他方法是值得欢迎的! – user3472065

+0

之后,我发现字符串“xxxx”,我必须存储的值,直到我找到字符“)”。我可以使用这个字符来终止迭代 – user3472065

试试这个:

file_contents = File.read(@file_to_convert) 

lines = file_contents[/xxx \(([^)]+)\)/, 1].split 
# => ["aaaaaa,", "bbbbbb,", "cccccc,", "eeeeee"] 

正则表达式(xxx \(([^)]+)\))采取所有文字xxx (之后,直到下一个),并split分裂成它的项目。

它认为这是你在找什么?

looking = true 
results = [] 
File.open(@file_to_convert, "r").each_line do |line| 
    if looking 
    if line.include?("xxx") 
     looking = false 
     results << line.scan(/\(([^,]*)/x) 
    end 
    else 
    if line.include?(")") 
     results << line.strip.delete('),') 
     break 
    else 
     results << line.strip.delete(',') 
    end 
    end 
end 
puts results