我需要一些帮助来解析设计不良的 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 编写了解析器。我正在使用另外两个库:
- 乔达时间 2.1
开放CSV 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。固定值后没有十进制零。风速也是如此。可以有小数点值的值为:
- 风速 10min 平均
- 风速 (mph)
- 内部温度 (°F)
- 室外温度 (°F)
所以有 4^2 = 16 种不同文件结构的组合。我目前陷入困境,因为我不知道如何解决这个问题。我正在考虑设置参考点,例如我知道气压计必须在给定的间隔内。
编辑: 我忘了提。data.csv 中的单行每 2.5 秒不断被覆盖。所以我看不到以前的值。但我确实每 1 分钟就有一次存档值。但是我需要在更新时读取该文件,因为我正在实现实时功能。