将文件拆分为List

时间:2017-04-23 15:49:28

标签: file groovy

我有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)显然是错误的

1 个答案:

答案 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状态时