Groovy: заменить в списке и составить список для каждой строки - PullRequest
0 голосов
/ 29 ноября 2011

Я пытаюсь заменить некоторые 'в результате в моем списке. Но это не заменит эти знаки.

             linesAsList = lines.toString().split('\t|\r')
             linesAsList.toString().replaceAll(("'"),("")) as List

Это на самом деле результат: [03.10.2011, '993413376204340783', 13,087, 0400102134, 0060000390]

Я искал это: [03.10.2011, 993413376204340783, 13,087, 0400102134, 0060000390]

И следующий шаг: когда программа обнаружила более одного результата, она должна быть в мультилисте?

Как это:

[[03.10.2011, '993413376204340783', 13,087, 0400102134, 0060000390] [03.10.2011, '993413376204340783', 13,087, 0400102134, 0060000390]]

Это действительно возможно? И как я могу это сделать. После них я создаю цикл для создания XML.

Если Вам это нужно, это весь код:

import groovy.util.CharsetToolkit;
import java.lang.Object

//Generate pathname
//Pfadname generiert für einfacheres ändern des Speicherortes
def pathname = "C:/mySupport-eclipse/trackandtrace.txt"
//Define Error Status
//Error Status definieren für Weiterverabeitung in mySupport
int errorCode = 0
def errorMessage = ""

def linesAsList = []


def bsknr = "0060000390"
//Define new Fiel
//Neue Datei definieren
def file = new File(pathname)

if(!file.exists())
{
    errorCode = 1
    errorMessage = "File not found"
    out_xml = xmlGenerieren()
}
else
{
    //Read Roews and look for BSK Number, split after tab
    //Zeilen einlesen und nach der BSK Nummer suchen, nach dem Tabulator trennen
    def lines = file.filterLine {
        line -> line ==~ /.*\t${bsknr}\t.*/

        }
    //Split the result after tab and enter, give back as String
    //Das Ergebnis aufteilen bei Tabulator und Enter und zugleich als String zurückgeben

    linesAsList = lines.toString().split('\t|\r')
    linesAsList.toString().replaceAll(("'"),("")) as List
    //Give date, sendnr. and date
    //Liefere nur Datum, Sendungsnummer und Gewicht
    linesAsList = linesAsList[0,1,2,4,5,6]
    xmlGenerieren(linesAsList)
        //println linesAsList
    }

def xmlGenerieren(List linesAsList) {
def writer = new StringWriter()
def builder = new groovy.xml.MarkupBuilder(writer)
linesAsList.pop()


println linesAsList
def listsize = linesAsList.size()


//Test if is empty
//Prüfen ob gültige  Ergebnise gefunden wurden
if (listsize >= 5 || listsize %5)
{
    long i = 0
    long anzEintraege = listsize % 5
    while (i <= anzEintraege)
    {
    builder.result()
    {
        entry(wert:i)
        {
            paketnr(linesAsList[1])
        }
    }
    println writer.toString()
    errorCode = 0
    i++
    }
}
else {

println listsize
//i = listsize / 8
//println i

}

}

Пример ввода:

Filterkriterien:Frachtfuehrer: POSTCH  Auftraggeber: Testfirma  Zeitraum: 01.10.2011 - 31.10.2011  

ZeitraumVonBis  PaketNr Gewicht Gebühr  Lierf. Nr   KundenNr    AuftragsNr  Name1   Name2   Str Plz Ort Lkz Versandart
03.10.2011  '993413376204340260'    1,000   0,00    0400102100  0052662182      John Doe        Streetname 10   3018    Bern    CH  Priority SI 
03.10.2011  '993413376204340783'    13,087  0,00    0400102134  0060000390      Swisscom Schweiz AG Johnny Doe  Streetname 51   3050    Bern    CH  Priority SI

Есть тысячи записей

Ответы [ 2 ]

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

, чтобы, возможно, сделать пост Тима еще более понятным ... ваш

linesAsList.toString().replaceAll(("'"),("")) as List

означает, что вы преобразуете строку [], которая была сохранена в linesAsList из-за разделения перед этим, сделайте из нее строкутогда вы используете заменить.Результатом будет снова строка, которая будет преобразована в список.Этот список будет содержать для каждого символа в элементе String on char.Я уверен, что это было не то, что вы хотели.Но на самом деле это не имеет большого значения, потому что результат нигде не определен.Это просто забыто тогда.Итак, после

linesAsList = lines.toString().split('\t|\r')

вам нужно

linesAsList = linesAsList*.replaceAll(("'"),(""))

, тогда результатом будет список.

Я добавляю это больше, чтобы вы могли лучше понять код Тима, а некак альтернативное решение.Также Тим раскрыл дело с несколькими результатами

0 голосов
/ 30 ноября 2011

Правильно, ваш код немного беспорядочный, и я уверен, что некоторые его части не будут работать, но с учетом этого файла, разделенного табуляцией (который я составил)

03.10.2011  '993413376204340783'    13,087  0400102134  0060000390
04.10.2011  '993413376204341783'    13,087  0400102134  0060000391
05.10.2011  '993413376204342783'    13,087  0400102134  0060000392
06.10.2011  '993413376204340783'    13,087  0400102134  0060000390
07.10.2011  '993413376204343783'    13,087  0400102134  0060000392

Это похоже на то, что вы хотели:

//Generate pathname
//Pfadname generiert für einfacheres ändern des Speicherortes
String pathname = 'file.txt'

//Define Error Status
//Error Status definieren für Weiterverabeitung in mySupport
int errorCode = 0
String errorMessage = ''

def bsknr = "0060000390"

//Define new Fiel
//Neue Datei definieren
File file = new File(pathname)

if( !file.exists() )
{
  errorCode = 1
  errorMessage = "File not found"
  out_xml = xmlGenerieren()
}
else
{
  //Read Roews and look for BSK Number, split after tab
  //Zeilen einlesen und nach der BSK Nummer suchen, nach dem Tabulator trennen
  String filteredLines = file.filterLine { line ->
    line.split( /\t/ ).grep( bsknr )
  }
  //Split the result after tab and enter, give back as String
  //Das Ergebnis aufteilen bei Tabulator und Enter und zugleich als String zurückgeben
  linesAsList = filteredLines.split( /\n|\r|\n\r|\r\n/ )*.split( /\t/ )*.collect { it.replace( "'", '' ) }

  //Give date, sendnr. and date
  //Liefere nur Datum, Sendungsnummer und Gewicht
  linesAsList = linesAsList*.getAt( [ 0,1,2,4,5,6 ] )
  out_xml =  xmlGenerieren(linesAsList)
}

println out_xml

def xmlGenerieren(List linesAsList) {
  println linesAsList
  new StringWriter().with { writer ->
    new groovy.xml.MarkupBuilder(writer).with { mb ->
      result {
        linesAsList.eachWithIndex { line, index ->
          mb.entry( wert:index ) {
            mb.paketnr( line[ 1 ] )
          }
        }
      }
    }
    writer.toString()
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...