读取csv的程序,将两列相加,输出到新的csv

时间:2015-09-04 00:47:57

标签: java csv

我已经做了1 - 2年的java,所以请耐心等待。我的项目是读取包含销售数据的csv文件。文件中的数据包括“产品ID”列和“已售出单位”。我基本上必须将销售的单位与各自的产品ID相加并打印出来,并将重复的产品ID删除到新的csv文件中。

这是我到目前为止所做的,它读取csv并打印出数据。

我基本上是在寻找从这里开始的答案或建议(不是实际的代码)。我正在考虑将每个列放入两个不同的数组中,按“产品ID”排序,然后添加销售的单位。

public class ReadCSV {

public static void main(String[] args) {

    ReadCSV obj = new ReadCSV();
    obj.run();
  }

  public void run() {

    String csvFile = "C:/Users/Jeff/Desktop/SalesData.csv";
    BufferedReader br = null;
    String line = "";
    String csvSplitBy = ",";

    try {

        br = new BufferedReader(new FileReader(csvFile));
        while ((line = br.readLine()) != null) {

                // use comma as separator
            String[] units = line.split(csvSplitBy);

            System.out.println(  units[1]+ 
                     " "+ units[2] + "");





        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    System.out.println("Done");
  }

}

以下是我的一些示例输出:

Product ID Units
10002 4
10004 6
10008 2
10010 3

提前谢谢!

2 个答案:

答案 0 :(得分:1)

  

我正在考虑将每列放入两个不同的数组

改用地图。您可以创建Map<Long, Product>。如果您有多个具有唯一Product的属性,请创建productId类,该类可以包含unitsproductId等属性。如果您不想使用地图,可以使用List<Long> productIdunit,并将每个条目添加到此两个不同的列表中。

  

按“产品ID”排序,然后添加已售出的单位。

如果您使用的是列表,则在循环后使用list.sort()对列表进行排序。您必须使用Long.parseLongStringunit[0]units[1])转换为Long

  

抱歉,我应该指明我认为我的说明是使用数组

应该使用固定宽度初始化数组并保持相同,直到再次重新初始化引用。这是您案件中的主要问题。您无法确定将有多少产品,如果您的文件有固定数量的行或产品,您可以使用数组,但我仍然建议您使用List而不是内部使用数组。

如果您只想使用数组,则必须使用大尺寸。假设您的文件中包含最多1000个产品,您可以将其初始化为

long productId[] = new long[1000];

具有最大大小的数组的问题在于它占用了大量内存,您应该避免这样做。

答案 1 :(得分:0)

我会使用下面的hashmap,然后遍历hashmap并将它们写入文件

while((line = reader.readLine()) != null){
        //Split and parse to int before
        if(map.get(productId) == null){
            map.put(productId,units);
        }
        else{
            map.put(productId, units + map.get(productId));
        }
    }
相关问题