解析设计糟糕的csv文件(动态结构)

时间:2012-11-03 18:01:33

标签: java parsing csv

我需要一些帮助来解析设计糟糕的csv(逗号分隔值)文件。该文件包含每2.5秒更新的当前气象数据。这是文件的结构:

1.00 - Csv File Version ID (XX.XX) Floating Point
2012 - Year (yyyy format) Integer
10 - Month Integer
31 - Day Integer
10 - Hour (24-hour format) Integer
58 - Minute Integer
45 - Second Integer
2 - Wind speed 10min average (mph) Floating Point
3 - Wind speed (mph) Floating Point
103 - Wind Direction(degrees) Floating Point
48 - Inside Humidity (%) Floating Point
91 - Outside Humidity (%) Floating Point
67,5 - Inside Temperature (°F) Floating Point
36,5 - Outside Temperature (°F) Floating Point
29,867 - Barometer (in) Floating Point
35,969 - Total Rain (in) Floating Point
0,00 - Daily Rain (in) Floating Point

以下是实际录制的示例:

1.00,2012,11,3,18,36,16,3,4,281,49,74,73,1,55,5,29,890,37,055,0,00

现在我已经用Java编写了解析器。我正在使用另外两个库:

  • JodaTime 2.1
  • OpenCsv 2.3

    // First we read file.
    CSVReader reader = new CSVReader(new FileReader("/VPLive/data.csv"));`
    
    List<String[]> data = reader.readAll();
    reader.close();
    
    // Actual data is in first element, which contains string array.
    String[] records = data.get(0);
    
    // First we parse date and time.
    DateTime dateTime= new DateTime(Integer.parseInt(records[1]), Integer.parseInt(records[2]), Integer.parseInt(records[3]), Integer.parseInt(records[4]), Integer.parseInt(records[5]), Integer.parseInt(records[6]));
    
    // Then we parse air temperature.
    double airTemperatureFahrenheit = Double.parseDouble(records[14] + "." + records[15]);
    

现在这个方法的问题是,文件用逗号分隔固定值和十进制值。现在这是可解决的,正如我在代码示例中所示的气温。 但是得到这个

当空气温度为例如55°F时,它仅打印55.固定值后没有小数零。风速也是如此。可以具有小数点值的值为:

  • 风速平均10分钟
  • 风速(英里/小时)
  • 内部温度(°F)
  • 室外温度(°F)

因此有4 ^ 2 = 16种不同文件结构的组合。我目前卡住了,因为我不知道如何解决这个问题。我正在考虑设置参考点,例如我知道晴雨表必须在给定的时间间隔内。

修改 我忘了提。 data.csv中的单行每2.5秒不断被覆盖。所以我看不到以前的价值观。但我确实每1分钟就有一个存档值。但是我需要在更新时读取该文件,因为我正在实现实时功能。

0 个答案:

没有答案