Поиск в списке и возврат всей записи - PullRequest
0 голосов
/ 28 ноября 2011

Я пытаюсь прочитать текстовый файл и найти заданный параметр, если это правда, он должен доставить мне всю запись в списке.

Это входные данные в файле: 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 ]

1 голос
/ 28 ноября 2011

Вы можете использовать регулярное выражение, которое будет возвращать всю строку, содержащую параметр. Вместе со встроенным в 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 голосов
/ 28 ноября 2011

Предполагая, что вы имеете в виду ваш входной файл:

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
...