簡體   English   中英

當每個文件的日期不同時,如何遍歷CSV文件中的“日期/時間”列

[英]How can I iterate through a Date/Time column in a CSV file when the dates are different for each file

因此,CSV文件中“日期/時間”列的格式如下所示:

csv[0]                      csv[1]      
2014-06-02T00:00:00         someNumericalData
2014-06-03T00:00:00         etc... 

根據我使用的文件,可能是2013、2012等。我希望能夠獲取每一天數據的另一列中的數值數據。 因此,2014-06-02的所有數值數據都將位於一個數組/列表中,然后當我遇到下一個日期時,我會將數據存儲在一個新的數組/列表中。

我可以遍歷CSV並獲得很好的數據,這只是檢查困擾我的日期。 如果有人可以幫助或指出正確的方向,以解決該問題,那就太好了。 (注意:僅數據相關,時間無關緊要)

您可以使用的一種方法是使用Map對同一日期的值進行分組。 您可以只使用HashMap ,或者更好地使用TreeMap以便按日期對條目進行排序。

我不想打擾讀取CSV輸入,因此我只將一些示例數據放到另一個地圖中(不必訂購)。 使它適應您的CSV方法應該很簡單。

Map<String, Double> ungroupedCsv = new TreeMap<>();
ungroupedCsv.put("2014-06-02T00:01:00", 1.1);
ungroupedCsv.put("2014-06-02T00:02:00", 1.2);
ungroupedCsv.put("2014-06-02T03:00:00", 1.3);
ungroupedCsv.put("2014-06-02T04:20:00", 1.4);
ungroupedCsv.put("2014-06-03T00:00:01", 2.1);
ungroupedCsv.put("2014-06-03T00:01:00", 2.2);
ungroupedCsv.put("2014-06-03T00:11:00", 2.3);
ungroupedCsv.put("2014-06-03T01:10:00", 2.4);

接下來,我們需要兩種日期格式:一種是原始格式,帶有日期和時間,一種是僅帶有日期:

SimpleDateFormat dateTime = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
SimpleDateFormat dateOnly = new SimpleDateFormat("yyyy-MM-dd");

分組的日期存儲在Map ,將上述格式的僅日期字符串映射到原始列表中的數值列表。

Map<String, List<Double>> grouped = new TreeMap<>();

現在,我們可以迭代原始地圖(或CSV文件)中的所有條目,重新編碼日期格式,並將值添加到相應的日期列表中(或創建該列表(如果尚不存在))。

for (String key : ungroupedCsv.keySet()) {
    String date = dateOnly.format(dateTime.parse(key));
    if (! grouped.containsKey(date)) {
        grouped.put(date, new ArrayList<Double>());
    }
    grouped.get(date).add(ungroupedCsv.get(key));
}
System.out.println(grouped);

輸出:

{2014-06-02=[1.1, 1.2, 1.3, 1.4], 2014-06-03=[2.1, 2.2, 2.3, 2.4]}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM