搜索列表并返回整个条目

时间:2011-11-28 07:27:54

标签: file list search groovy split

我尝试读取一个文本文件并找到一个给定的参数,如果这是真的,它应该传递给我整个列表条目。

该文件中的输入:100 0100045391 0400053454 0502028765251 ABH ZL1 1560112 07.06.2010 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)}

    }
}

2 个答案:

答案 0 :(得分: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")

答案 1 :(得分: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