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

时间:2014-07-17 12:30:59

标签: ruby arrays string file parsing

我需要根据不同的规则解析文件。 该文件包含几行。 我逐行浏览文件。当我找到一个特定的字符串时,我必须存储下一行中的数据,直到找到特定的字符。

档案示例:

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”中的下一行。

2 个答案:

答案 0 :(得分:0)

试试这个:

file_contents = File.read(@file_to_convert)

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

正则表达式(xxx \(([^)]+)\))获取xxx (之后的所有文字,直到下一个)split将其拆分为项目。

答案 1 :(得分: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