Ruby 解析文件,查找字符串并存储下一个值
我需要根据不同的规则解析文件。 该文件包含几行。 我把文件一行一行地看了一遍。当我找到一个特定的字符串时,我必须存储下一行中的数据,直到找到一个特定的字符为止 文件示例:Ruby 解析文件,查找字符串并存储下一个值,ruby,arrays,string,file,parsing,Ruby,Arrays,String,File,Parsing,我需要根据不同的规则解析文件。 该文件包含几行。 我把文件一行一行地看了一遍。当我找到一个特定的字符串时,我必须存储下一行中的数据,直到找到一个特定的字符为止 文件示例: start { /* add comment */ first_step { sub_first_step { }; sub_second_step { code = 50, post = xxx (aaaaaa, b
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”时查找
对吗
2) 在数组中存储下一个值(例如:aaaa、bbbb、ccccc、eeee),直到找到字符“)”。这将突出显示该部分已完成。
我想我们用字符串“xxxx”到达了这一行,我必须迭代块“if”中的下一行。试试这个:
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
looking=true
结果=[]
打开(@File_to_convert,“r”)。每行|
如果看
如果行。包括?(“xxx”)
看=假
结果我不明白你为什么要做if行。包括?(“union”)然后
检查行中是否包含字符串“xxx”
。因为我是ruby新手,所以这是我的第一个想法。但任何其他方法都是受欢迎的!!!在找到字符串“xxxx”之后,我必须存储这些值,直到找到字符“)”。我可以使用这个字符来终止迭代
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