我尝试在列表中的结果中替换一些'。但它并没有取代这个迹象。
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
有成千上万的条目
答案 0 :(得分:1)
linesAsList.toString().replaceAll(("'"),("")) as List
意味着您将转换String [],由于之前的拆分而存储在linesAsList中,创建一个String,然后使用replace。结果再次是一个String,它将被转换为List。此List将包含String on char元素中的每个char。我很确定这不是你想要的。但它实际上并不重要,因为结果没有分配。那简直就是被遗忘了。所以
之后linesAsList = lines.toString().split('\t|\r')
你需要
linesAsList = linesAsList*.replaceAll(("'"),(""))
结果就是一个清单。
我正在添加更多内容,以便您可以更好地理解Tim的代码,而不是替代解决方案。 Tim也用多个结果解决了这个案例
答案 1 :(得分:0)
是的,你的代码有点混乱,而且我很确定它的一部分不起作用,但是给出了这个标签分隔文件(我编写的)
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()
}
}