2010-06-28 64 views
1

當使用eachLine讀取BufferedInputStream時,如何跟蹤我所在的行號?如何在使用reader.eachLine讀取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

你的意思是除了自己跟蹤它嗎? – 2010-06-28 21:45:55

+0

我想我問是否有內置的方式來做到這一點,或者我應該只是聲明一個變量,並從閉包內增加它。 – ScArcher2 2010-06-28 21:48:55

回答

8

您傳遞給eachline的閉包也可以帶2個參數。首先是數據行,第二行是行號。

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

請參閱GDK Doc for InputStream eachLine method

+0

請注意,儘管文檔所述,行號似乎從0開始,而不是從1開始。 – sschuberth 2017-06-16 13:14:32

+0

默認情況下,它從1開始,但您可以傳遞參數以設置起始行數reader.eachLine(0){。 ..}。按照記錄,剛剛嘗試並且默認行號從1開始。 – 2017-06-17 15:12:48

相關問題