2014-01-09 78 views
1

我正在使用包含多個列(變量)的.csv文件。 每個變量可能是Decimal,VARCHARDate類型。如何使用Java中的CSV Reader API返回數據類型

如果一列包含全部數字,那麼它是Decimal;如果全部日期然後Date;否則默認爲VARCHAR


我知道通過檢查在數據集中的每個值,以確定這一種方式。

CSVReader reader = new CSVReader (new FileReader(.....)); 
     String row [] = reader.readNext(); 
      while ((row = reader.readNext()) !=null) { 
       // I go through EACH value to see if it is `Decimal` , `VARCHAR` , or `Date` 
      } 
     } 
     reader.close(); 

但是上述方法很慢。

有沒有更好的方法或在CSV閱讀器命令做到這一點快? 謝謝!

回答

1

是否可以檢查列的子集,然後如果該子集是某種數據類型,則假定其餘的數據類型相同?或者,如果您有大量Date s的列,並且有一個非日期值,它會自動爲VARCHAR

既然你在你的問題指出

If a column contains all numbers , then it is Decimal, if all date then Date , otherwise the default is VARCHAR. 

你必須檢查每一個成員在列,如果有1000組十進制的成員,並在年底1日你不得不檢查整個列就知道它是類型VARCHAR。您可以做的一件事是優化的是跟蹤列中存在的數據類型,如果存在> = 2數據類型,則終止該列並返回VARCHAR作爲該列的數據類型。

希望有所幫助。

+0

+1這是正確的。如果列中至少有一個「非Date」值,但所有其他值都是Date,則它是「VARCHAR」。我希望'CSV Reader'有一些捷徑 –