我有txt文件,例如:
useless text
-- modelName
model parameters
model parameters
-- modelName
model parameters
model parameters
e.t.c
我需要将此文件拆分为List,其中列表的元素是带有模型参数的模型。 我的算法
File(FILEPATH).eachLine { line ->
if (line =regExpForModelName) {
while(line!=regExpForModelName)
model.add(line)
}
}
while(line!=regExpForModelName)
显然是错误的
答案 0 :(得分:0)
你可以用一个简单的状态机来做到这一点:
enum State {
SCANNING, PARSING
}
def parseFile(String filename) {
def key = null
def result = []
def mode = State.SCANNING
new File(filename).eachLine { line ->
switch(mode) {
case State.SCANNING:
if(line.startsWith('--')) {
key = (line - '--').trim()
result << [name:key, lines:[]]
mode = State.PARSING
}
break
case State.PARSING:
if(line.size() == 0) {
mode = State.SCANNING
}
else {
result[-1].lines << line
}
}
result
}
}
def results = parseFile('/tmp/file.txt')
results.each {
println it
}
所以它从SCANNING开始,然后当它找到一个标题项时,它会向列表添加一个新元素并切换到PARSING
然后它保持PARSING(并向列表中添加行),直到它返回空行,当它切换回SCANNING状态时