blob: 600788f43e9d527270f4797d8da4c49b9eeec080 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
// Copyright (c) 2010 Anthony Towns
// GPL v2 or later
package altosui;
import java.lang.UnsupportedOperationException;
import java.util.HashMap;
import java.util.NoSuchElementException;
import java.util.Iterator;
import java.io.*;
import com.csvreader.CsvReader;
import altosui.AltosDataPoint;
class AltosCsvReader implements Iterable<AltosDataPoint>
{
public CsvReader csv;
public AltosDataPoint next = null;
static protected String [] headers = "version serial flight call time rssi state state_name acceleration pressure altitude height accel_speed baro_speed temperature battery_voltage drogue_voltage main_voltage connected locked nsat latitude longitude altitude year month day hour minute second pad_dist pad_range pad_az pad_el".split(" ");
AltosCsvReader(Reader stream) {
csv = new CsvReader(stream);
csv.setComment('#');
csv.setUseComments(true);
csv.setHeaders(headers);
}
AltosCsvReader(String filename) throws FileNotFoundException {
csv = new CsvReader(filename);
csv.setComment('#');
csv.setUseComments(true);
csv.setHeaders(headers);
}
public Iterator<AltosDataPoint> iterator() {
return new Iterator<AltosDataPoint>() {
public void remove() {
throw new UnsupportedOperationException();
}
public boolean hasNext() {
if (next == null) {
try {
if (csv.readRecord()) {
next = new CsvRow();
} else {
close();
return false;
}
} catch (IOException e) {
close();
return false;
}
}
return true;
}
public AltosDataPoint next() {
if (!hasNext())
throw new NoSuchElementException();
AltosDataPoint res = next;
next = null;
return res;
}
};
}
public void close() {
csv.close();
}
private class CsvRow extends HashMap<String,String>
implements AltosDataPoint
{
CsvRow() throws IOException {
for (int i = 0; i < headers.length; i++) {
this.put(headers[i], csv.get(headers[i]).trim());
}
}
private int intField(String name) {
return Integer.parseInt(get(name).trim());
}
private double doubleField(String name) {
return Double.valueOf(get(name)).doubleValue();
}
private String stringField(String name) {
return get(name);
}
public int version() { return intField("version"); }
public int serial() { return intField("serial"); }
public int flight() { return intField("flight"); }
public String callsign() { return stringField("call"); }
public double time() { return doubleField("time"); }
public double rssi() { return doubleField("rssi"); }
public int state() { return intField("state"); }
public String state_name() { return stringField("state_name"); }
public double acceleration() { return doubleField("acceleration"); }
public double pressure() { return doubleField("pressure"); }
public double altitude() { return doubleField("altitude"); }
public double height() { return doubleField("height"); }
public double accel_speed() { return doubleField("accel_speed"); }
public double baro_speed() { return doubleField("baro_speed"); }
public double temperature() { return doubleField("temperature"); }
public double battery_voltage() {
return doubleField("battery_voltage");
}
public double drogue_voltage() { return doubleField("drogue_voltage"); }
public double main_voltage() { return doubleField("main_voltage"); }
}
}
|