如何使用groovy从文件中读取代码片段?

如何使用groovy从文件中读取代码片段?,groovy,filereader,Groovy,Filereader,我正在使用这个简单的示例代码在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 = s

我正在使用这个简单的示例代码在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;

可能吗?如何读取?

如果文件的内容很小,可以很容易地读取整个文件,然后使用一点正则表达式来获取所需的部分:

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;

收集列表中的行,当您注意到;,通过引发异常停止隐式循环


您搜索的结果是列表中的子列表。lastIndexOf'select'到列表的末尾。

list没有'lastIndexOf'方法,我在API中找不到它。你有一个例子中显示的链接吗?奇怪。文档中提到了这一点,GROOVY-1007中对此进行了修复,谢谢!这个正则表达式看起来很有趣,但对我来说不起作用。在你的test.txt文件中,数据是以单独的行还是全部放在一行中?@Drake:它们都在单独的行中。当输入是一个没有换行符的字符串时,它仍然可以输出:“从某个表中选择*,其中something=something on rowid=something;”。请注意:我正在使用Groovy 1.6。。。但是如果输入文件中没有换行符,我会稍微更改我的正则表达式:在这种情况下,没有贪婪的点星!