2009-09-29 3 views
2

나는 그래서 나는 조각을 읽고 싶어 내 파일이groovy를 사용하여 파일에서 스 니펫을 읽는 방법은 무엇입니까?

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; 

같은 일부 데이터가이 간단한 예제 코드 예를 들어

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

를 사용하여 그루비에서 파일을 읽고있다. 행 끝에 '세미콜론'이있는 행이있는 경우. 그때 '(선택'다시까지 읽을 수

그래서이 포함 된 문자열을 갖고 싶어이 파일을 읽은 후 :?

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

답변

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; 
+0

감사합니다. 그 정규식은 재미있는 것 같지만 그것은 나를 위해 작동하지 않습니다. test.txt 파일에 데이터가 별도의 줄에 있거나 한 줄에 모두 있습니까? – Drake

+0

@Drake : 모두 별도의 줄에 있습니다. 입력이 줄 바꿈이없는 문자열 인 경우에도 여전히 작동합니다 (출력 : '(선택 * 일부 테이블에서 where = something) rowid = something;'). 레코드 : Groovy 1.6 –

+0

...을 사용하고 있지만 입력 파일에 줄 바꿈이 없으면 약간의 정규식이 변경됩니다.이 경우에는 욕심 많은 DOT-STARS가 필요하지 않습니다! –

0

목록에서 줄을 모으고 ";"을 발견하면 예외를 throw하여 암시 적 루프를 중지합니다.

결과는 list.lastIndexOf('(select')에서 목록 끝에있는 하위 목록입니다.

+0

목록에 'lastIndexOf'메소드가 없습니다. – Drake

+0

Groovy에서 작동합니다. –

+0

http://groovy.codehaus.org/groovy-jdk/java/util/List.html API에서 찾을 수 없습니다. 예를 들어 링크가 있습니까? – Drake