我需要一些帮助来解析设计糟糕的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编写了解析器。我正在使用另外两个库:
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.固定值后没有小数零。风速也是如此。可以具有小数点值的值为:
因此有4 ^ 2 = 16种不同文件结构的组合。我目前卡住了,因为我不知道如何解决这个问题。我正在考虑设置参考点,例如我知道晴雨表必须在给定的时间间隔内。
修改 我忘了提。 data.csv中的单行每2.5秒不断被覆盖。所以我看不到以前的价值观。但我确实每1分钟就有一个存档值。但是我需要在更新时读取该文件,因为我正在实现实时功能。