解析文件,找到一个字符串并存储下一个值
问题描述:
我需要根据不同的规则解析文件。 该文件包含多行。 我一行一行地通过文件。当我找到一个特定的字符串时,我必须存储下一行中的数据,直到找到一个特定的字符。文件解析文件,找到一个字符串并存储下一个值
例子:
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”内的下一行。
答
试试这个:
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
我不明白,为什么你正在做的'如果line.include(“联盟”),那么'来检查线路包含字符串' “XXX”'。 – sawa
,因为我对红宝石很新,所以这是我的第一个想法。但任何其他方法是值得欢迎的! – user3472065
之后,我发现字符串“xxxx”,我必须存储的值,直到我找到字符“)”。我可以使用这个字符来终止迭代 – user3472065