如何排序csv文件?

时间:2017-10-26 05:46:15

标签: java csv

我想以这种格式创建一个文件:

device1,t1,t2,t3,t4,t5
device2,t1,t2,t3,t4,t5
device3,t6,t7,t8,t9,t10
device4,t6,t7,t8,t9,t10

此处,t1, t2, ..., tn是时间戳。

每个值tn都是基于JAR文件的一次执行生成的,同时也会生成该设备名称。

我现在可以使用JAR文件生成这样的格式:

例如:

csv文件中的当前格式:

device1,t1,device2,t2,device2,t3,device1,t4,device2,t5,device2,t6,device1,t7,device2,t8

我希望在csv文件中采用以下格式:

DEVICE1 -t1,T4,T7
装置2 -t2,T3,T5,T6,T8

所以在这里,我必须将属于特定设备的时间戳放在右侧。

请告诉我如何用Java进行排序。

2 个答案:

答案 0 :(得分:0)

我将根据我对你的问题的理解来回答这个问题。 您可以做的是创建一个将设备名称存储为hashmap键的hashmap。 然后为值创建一个sortedCollection。

在此已排序的集合中输入您的时间戳,并不断更新此HashMap以获取相应的设备名称密钥。

当您更新已排序的时间戳集合时,它们将自动以有序的方式存储。

你的hashmap看起来像:

key:value(collection)

device1:t1,t4,t7

device2:t2,t5,t8(在此集合的末尾添加更多时间戳)

然后在CSV文件中提供此hashmap数据。

这是从java端做的。

如果你想在为设备添加新的时间戳时对csv进行排序,那么我不这么认为你可以从java中做到这一点。然后,一旦将所有数据添加到csv文件中,就必须在csv文件中保留一些逻辑。

答案 1 :(得分:0)

这是解决方案:

我的输出为: 整个地图:{Device1 = [[t8],t9],Device2 = [[[[[t2],t3],t5],t7],t10]}

  BufferedReader reader = new BufferedReader(new FileReader("results.csv"));

                String eachline;
               // int i=2, j=2;
                while((eachline = reader.readLine()) != null)
                {
                    String[] fields = eachline.split(",");

                    if(Integer.parseInt(fields[2])==0)//data is = 0
                    {
                        if(tree.get(fields[0])!=null)//returns null if this key not present
                        {
                        values.add(tree.get(fields[0]));//get entire key value pair for that particular field
                        }
                        values.add(fields[1]);//to prev value, add next value
                        tree.put(fields[0], values.toString());// write to hashmap along with value
                        values.clear();
                    }
                }


                System.out.println("Entire map:"+tree);