2014-07-17 81 views
-1

我需要根據不同的規則解析文件。 該文件包含多行。 我一行一行地通過文件。當我找到一個特定的字符串時,我必須存儲下一行中的數據,直到找到一個特定的字符。文件解析文件,找到一個字符串並存儲下一個值

例子:

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

回答

0

試試這個:

file_contents = File.read(@file_to_convert) 

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

正則表達式(xxx \(([^)]+)\))採取所有文字xxx (之後,直到下一個),並split分裂成它的項目。

0

它認爲這是你在找什麼?

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 
相關問題