查找重复内容并合并到常规

时间:2018-02-15 12:54:27

标签: groovy duplicates text-files

我想用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脚本中创建它。 有人可以帮忙吗?教程也很有帮助。我不知道逻辑脚本是否到期。

1 个答案:

答案 0 :(得分:1)

您只需按branchIditemId对数据进行分组,这是适合您的工作代码:

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