正しく設計されていない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つの追加ライブラリを使用しています:
- 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]);
このアプローチの問題は、ファイルが固定値と10進値をコンマで区切ることです。コード例で気温について示したように、これは解決可能です。しかし、これを入手してください:
気温がたとえば55°Fの場合、55のみが出力されます。固定値の後に小数点以下のゼロはありません。風速についても同じことが言えます。小数点値を持つことができる値は次のとおりです。
- 風速10分平均
- 風速(mph)
- 内部温度(°F)
- 外気温(°F)
したがって、異なるファイル構造の4 ^ 2=16の組み合わせがあります。この問題を解決する方法がわからないため、現在行き詰まっています。私は基準点を設定することを考えています。たとえば、気圧計は特定の間隔内にある必要があることを知っています。
編集: 私は言及するのを忘れました。data.csvの単一の行は、2.5秒ごとに常に上書きされています。そのため、以前の値を確認できません。しかし、私は1分ごとにアーカイブに値を持っています。ただし、ライブ機能を実装しているため、更新されるたびにそのファイルを読み取る必要があります。