2011-11-28 29 views
0

我嘗試讀取文本文件並查找給定的參數,如果這是真的,它應該爲我提供整個列表條目。搜索列表並返回整個條目

多數民衆贊成在文件中輸入:100 0100045391 0400053454 0502028765251 ABH ZL1 1560112 2010年7月6日100 0100045394 0400055024 0502028766382 ABH ZL1 1601944 21.06.2010

但此刻我只可以檢查此參數列表或者不是或者給定的參數本身。

import groovy.util.CharsetToolkit; 
//Pathname 
def pathname = "C:/mySupport-eclipse/trackandtrace.txt" 
//Error State 
int errorCode = 0 

def bsknr = "0100045553" 
//Define new file 
def file = new File(pathname) 

if(!file.exists()) 
    { 
     errorCode = 1 
    } 
    else 
    { 
     //Read lines, seperated by tab 
     file.splitEachLine ('\t') { 
      list -> list 

      println list.findAll {it.contains(bsknr)} 

    } 
} 

回答

1

您可以使用正則表達式,它將返回包含該參數的整個行。加上Groovy的內置File.filterLine(Closure)方法,你會得到類似的東西:

def lines = file.filterLine { line -> line ==~ /.*\t${bsknr}\t.*/ } 

如果你想lines是一個字符串,你可以這樣做:

def linesAsString = lines.toString() 

如果你想他們是一個列表,你會怎麼做:

def linesAsList = lines.toString().tokenize("\n") 
+0

+1我總是忘了'filterLine' –

+1

'filterLine'是我的網關藥物的Groovy ... –

+0

謝謝你,那娃正是我正在尋找的東西 – CollinG

0

假設你的意思是你輸入文件是:

100 0100045391 0400053454 0502028765251 ABH ZL1 156011207.06.2010 
100 0100045394 0400055024 0502028766382 ABH ZL1 160194421.06.2010 

而且假設你的意思「我怎樣才能得到含有該字符串的行的列表」(我不知道什麼「但目前我只是可以檢查這個參數是否在列表中或者是給定的參數本身。'意味着),那麼你可以這樣做:

//Pathname 
def pathname = "C:/mySupport-eclipse/trackandtrace.txt" 
//Error State 
int errorCode = 0 

def bsknr = "0100045553" 
def lines = [] 

//Define new file 
def file = new File(pathname) 

if(!file.exists()) { 
    errorCode = 1 
} 
else { 
    //Read lines, seperated by tab 
    file.eachLine { line -> 
    if(line.split(/\t/).grep { bsknr }) lines << line 
    } 
} 

println lines 
相關問題