我想用groovy自动编辑文件。
例如,我有以下文本文件: (第一行仅供您理解)
branch ID item ID - - weight piece --- --- ---
178568305 108350 0 0 0 -1 215 215 012
178568305 102190 0 0 0 -1 74 74 012
178568305 102120 0 0 0 -8 35 35 012
178568305 102190 0 0 0 -6 74 74 012
178568305 102190 0 0 0 -6 74 74 012
178587626 108280 0 0 0 -3 189 189 012
178587626 159550 0 0 0 -1 499 499 012
178587626 107740 0 0 0 -4 229 229 012
178587626 105330 0 0 -10 0 626 626 012
178587626 102190 0 0 0 -6 74 74 012
在第1栏中,我有一个brach ID 在第2列中,我有一个项目ID 在第5栏中,我有一个重量,例如以克为单位 在第6列中,我有许多作品 第3,4,7,8和9列并不重要
在分支ID中: 从第1行到第5行和第6行以及第6行到第10行,我有两个不同的分支ID
在商品ID中: 在第2行,第4行和第5行中,我始终使用相同的商品ID到相同的分支ID。
现在,我想要的是将分行ID为178568305的商品ID 102190合并为一行。 但是这一块或重量必须在这一行中计算。 但是注意:在第10行我有相同的项目ID,如第2行或第4行,但我有另一个分支ID。不允许将第10行的重量/部分合并为2,4和5!
例如:
branch ID item ID - - weight piece --- --- ---
178568305 108350 0 0 0 -1 215 215 012
178568305 102120 0 0 0 -8 35 35 012
178568305 102190 0 0 0 -13 74 74 012
178587626 108280 0 0 0 -3 189 189 012
178587626 159550 0 0 0 -1 499 499 012
178587626 107740 0 0 0 -4 229 229 012
178587626 105330 0 0 -10 0 626 626 012
178587626 102190 0 0 0 -6 74 74 012
我的输入文本文件只用空格分隔。我的输出文本文件必须完全相同。
不幸的是,我不知道如何在groovy脚本中创建它。 有人可以帮忙吗?教程也很有帮助。我不知道逻辑脚本是否到期。
答案 0 :(得分:1)
您只需按branchId
和itemId
对数据进行分组,这是适合您的工作代码:
def input = new File("input.txt")
def output = new File("output.txt")
PrintWriter printWriter = new PrintWriter(output)
Map<String, String[]> result = [:]
input.eachLine { currentLine, lineNumber ->
def array = currentLine.split(" +");
String rowId = array[0] + "_" + array[1];
if(lineNumber == 1 ){
result.put(rowId, array)
}else {
String[] rowValues = array;
if(null != result.get(rowId)){
String[] existingValues = result.get(rowId);
for(int i = 0; i < existingValues.length; ++i){
try{
existingValues[i] = String.valueOf( rowValues[i].toInteger() + existingValues[i].toInteger())
}catch (NumberFormatException ex){
print(ex)
}
}
}else{
result.put(rowId, rowValues)
}
println(array)
}
}
int maxColumnWidth = 14;
result.each { key, value ->
for(int i = 0; i < value.length; ++i){
if(i == 0){
printWriter.print(value[i])
}else{
String v = value[i];
while(v.length() < maxColumnWidth){
v = " " + v;
}
printWriter.print(v)
}
}
printWriter.println()
}
printWriter.close()
示例输入:
branch ID item ID - - weight piece --- --- ---
178568305 108350 0 0 0 -1 215 215 012
178568305 102190 0 0 0 -1 74 74 012
178568305 102120 0 0 0 -8 35 35 012
178568305 102190 0 0 0 -6 74 74 012
178568305 102190 0 0 0 -6 74 74 012
178587626 108280 0 0 0 -3 189 189 012
178587626 159550 0 0 0 -1 499 499 012
178587626 107740 0 0 0 -4 229 229 012
178587626 105330 0 0 -10 0 626 626 012
178587626 102190 0 0 0 -6 74 74 012
输出:
branch ID item ID - - weight piece --- --- ---
178568305 108350 0 0 0 -1 215 215 012
535704915 306570 0 0 0 -13 222 222 36
178568305 102120 0 0 0 -8 35 35 012
178587626 108280 0 0 0 -3 189 189 012
178587626 159550 0 0 0 -1 499 499 012
178587626 107740 0 0 0 -4 229 229 012
178587626 105330 0 0 -10 0 626 626 012
178587626 102190 0 0 0 -6 74 74 012