2010-06-28 1 views
1

Comment puis-je suivre le numéro de ligne sur lequel je suis quand j'utilise eachLine pour lire un BufferedInputStream?Comment conserver un nombre de lignes lors de l'utilisation de reader.eachLine pour lire un BufferedInputStream?

def input = new GZIPInputStream(new FileInputStream(f)) 
def reader = new BufferedReader(new InputStreamReader(input)) 
reader.eachLine { 
    line ->if(line.contains(searchString)){ 
     println "${f} - ${line}" 
    } 
} 
+0

Vous voulez dire que vous le suivez vous-même? –

+0

Je suppose que je demande s'il y a une façon intégrée de le faire ou si je devrais simplement déclarer une variable et l'incrémenter depuis la fermeture. – ScArcher2

Répondre

8

La fermeture que vous passez à eachLine peut également prendre 2 paramètres. La première étant la ligne de données et la seconde étant le numéro de ligne.

.... 
.... 
reader.eachLine { line, lineNumber -> 
    if(line.contains(searchString)) { 
     println "${lineNumber} - ${line}" 
    } 
} 

Voir GDK Doc for InputStream eachLine method.

+0

Notez que malgré ce que dit la documentation, le numéro de ligne commence à 0, pas 1. – sschuberth

+0

Par défaut, il commence à 1, mais vous pouvez passer un argument pour définir le nombre de lignes de départ, reader.eachLine (0) {. ..}. Juste essayé et par défaut le numéro de ligne commence par 1 comme documenté. –

Questions connexes