2

我正在使用这个简单的示例代码在 groovy 中读取文件

file.eachLine {line->
 // do something with line
}

例如我的文件有一些这样的数据

blah blah blah 
This is some more lines
more lines
Insert into something
(x1,x2,x3)
(Select * from
some table
where 
something = something)
on rowid = something;

所以我想读一个片段。如果我看到一行带有 rowid 的行,最后也有一个“分号”。然后我想读回'(选择'

因此,在阅读此文件后,我想要一个包含以下内容的字符串:

(Select * from
    some table
    where 
    something = something)
    on rowid = something;

那可能吗?如何?

4

2 回答 2

1

如果您的文件的内容很小,则很容易阅读整个文件,然后使用一些正则表达式来获取您想要的部分:

def file = new File('/home/bart/Temp/test.txt')
def contents = file.getText()
def matcher = contents =~ /\(Select[^)]++\)\s++.*?rowid\s=\s.*;/
matcher.each { println it }

产生:

(Select * from
some table
where 
something = something)
on rowid = something;
于 2009-09-29T12:31:05.833 回答
0

收集列表中的行,当您注意到“;”时,通过抛出异常来停止隐式循环。

您寻找的结果是从列表list.lastIndexOf('(select')到末尾的子列表。

于 2009-09-29T12:32:25.210 回答