2009-09-29 35 views
2

Je lis un fichier groovy en utilisant ce code simple exempleComment lire un extrait d'un fichier en utilisant groovy?

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

Par exemple, mon fichier a des données comme celui-ci

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; 

Je veux lire un extrait. Si je vois une ligne avec rowid qui a aussi un 'point-virgule' à la fin. je veux relire jusqu'à « (sélectionnez »

après avoir lu ce fichier que je veux avoir une chaîne qui contient:

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

Est-ce possible et comment

Répondre

1

Si le contenu? de votre fichier est petit, il est assez facile de lire le fichier dans son ensemble, puis utiliser un peu de regex pour obtenir la partie (s) que vous voulez:

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 } 

Produit:

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

merci! cette regex semble intéressante mais ça ne marche pas pour moi. dans votre fichier test.txt avez-vous les données dans des lignes séparées ou toutes dans une ligne? – Drake

+0

@Drake: ils sont tous sur des lignes séparées. Lorsque l'entrée est une chaîne sans sauts de ligne, elle fonctionne toujours (sortie: '(Sélectionnez * dans une table où quelque chose = quelque chose) sur rowid = quelque chose;'). Pour les records: J'utilise Groovy 1.6 –

+0

... mais si aucun saut de ligne n'est présent dans le fichier d'entrée, je changerais légèrement mon regex: pas de DOT-STARS gourmands dans ce cas! –

0

Collectez les lignes dans une liste et lorsque vous notez le ";", arrêtez la boucle implicite en lançant une exception.

Le résultat recherché est la sous-liste de list.lastIndexOf('(select') jusqu'à la fin de la liste.

+0

liste n'a pas la méthode 'lastIndexOf' – Drake

+0

Il fait dans Groovy. –

+0

http://groovy.codehaus.org/groovy-jdk/java/util/List.html Je ne pouvais pas le trouver dans l'API. avez-vous un lien où il est montré dans un exemple? – Drake

Questions connexes