【问题标题】:Convert CSV rows into columns in Java将 CSV 行转换为 Java 中的列
【发布时间】:2013-09-04 05:39:37
【问题描述】:

我有一个类似下面的 CSV

Element,Value
LIN,887873083091
QTY,12
LIN,887873083107
QTY,13
LIN,887873083114
QTY,10
LIN,887873083121
QTY,6
LIN,887873083138
QTY,0
Avialability,018
Avail_Date,20391231
LIN,887873083145
QTY,0
Avialability,018
Avail_Date,20391231
LIN,886732553461
QTY,0
Avialability,018
Avail_Date,20391231
LIN,886732637901
QTY,0
Avialability,018
Avail_Date,20391231
LIN,886732637918
QTY,0
Avialability,018
Avail_Date,20391231
LIN,886732637925
QTY,0
Avialability,018
Avail_Date,20391231
LIN,886732637932
QTY,0
Avialability,018
Avail_Date,20391231
LIN,886732637949
QTY,0
Avialability,018
Avail_Date,20391231
LIN,886732637956
QTY,0
Avialability,018
Avail_Date,20391231
LIN,886732637963
QTY,0
Avialability,018
Avail_Date,20391231
LIN,886732637970
QTY,0
Avialability,018
Avail_Date,20391231

如您所见,有 4 个元素。 LIN、数量、可用性、Avail_Date

我想把这些元素做成列,把值放在下面,做成一个 CSV 文件。

喜欢下面的示例

LIN,QTY,Availability,Avail_Date
887873083091,12,,
887873083107,13,,
887873083114,10,,
887873083121,6,,
887873083138,0,018,20391231
887873083145,0,018,20391231
886732553461,0,018,20391231

原来的顺序是 LIN、QTY、Availability 和 Avail_Date .. 但在某些情况下,Availability 和 Avail_Date 可能会丢失。在这种情况下,我想像示例输出中的前 4 行一样将空白放入新的 CSV。

如何为此编写 Java 代码?谁能给出任何解决方案?我什么都没试过,因为我不明白

【问题讨论】:

  • 到目前为止你尝试过的代码在哪里?
  • 我什么都没试过,因为我不明白

标签: java parsing csv


【解决方案1】:

这是一个粗略的大纲,可以帮助您入门:

  1. 创建一个具有以下属性的简单帮助类:LIN,QTY,Availability,Avail_Date。
  2. 逐行阅读
  3. 创建帮助类的新实例并将其放入 ArrayList。
  4. 对于每一行调用 split()
  5. 填写帮助程序类的相应属性。
  6. 如果您检测到读取了新对象,请创建帮助程序类的新实例。
  7. 读取 ArrayList 上的文件循环并将一行写入输出文件后。

尝试一下,如果遇到困难,请发布您的代码。

【讨论】:

    【解决方案2】:
     String[] colName = {"LIN","QTY","Availability","Avail_Date"};
        String output = "";
    
        int colNum = 0;
    
        // Using file handling read row one by one (readUTF method) : this is sudo code only
        // or you can use the CSV parser
        while(!EOF)
        {
    
          // spilt key and value using ","
    
           for(int i = colNum;i<colName.length;i++){
    
             if(colName[i].equals(key)){
                output = output  + value + ","
                break;
             }else{
                 output = output  ","
             }
    
           }
           colNum = i;
    
           if(colNum == colName.length ){
              output = output  "\n";
              colNum = 0;
           }
    } // end while
    

    我还没有运行此代码。所以可能需要一些小的改动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-20
      • 2019-06-09
      • 1970-01-01
      • 2014-06-05
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多