90 lines
2.9 KiB
Java
90 lines
2.9 KiB
Java
import java.io.File;
|
|
import java.util.*;
|
|
import static java.lang.System.out;
|
|
|
|
public class TextProcessing1 {
|
|
|
|
public static void main(String[] args) throws Exception {
|
|
Locale.setDefault(new Locale("en", "US"));
|
|
Metrics metrics = new Metrics();
|
|
|
|
int dataGap = 0;
|
|
String gapBeginDate = null;
|
|
try (Scanner lines = new Scanner(new File("readings.txt"))) {
|
|
while (lines.hasNextLine()) {
|
|
|
|
double lineTotal = 0.0;
|
|
int linePairs = 0;
|
|
int lineInvalid = 0;
|
|
String lineDate;
|
|
|
|
try (Scanner line = new Scanner(lines.nextLine())) {
|
|
|
|
lineDate = line.next();
|
|
|
|
while (line.hasNext()) {
|
|
final double value = line.nextDouble();
|
|
if (line.nextInt() <= 0) {
|
|
if (dataGap == 0)
|
|
gapBeginDate = lineDate;
|
|
dataGap++;
|
|
lineInvalid++;
|
|
continue;
|
|
}
|
|
lineTotal += value;
|
|
linePairs++;
|
|
|
|
metrics.addDataGap(dataGap, gapBeginDate, lineDate);
|
|
dataGap = 0;
|
|
}
|
|
}
|
|
metrics.addLine(lineTotal, linePairs);
|
|
metrics.lineResult(lineDate, lineInvalid, linePairs, lineTotal);
|
|
}
|
|
metrics.report();
|
|
}
|
|
}
|
|
|
|
private static class Metrics {
|
|
private List<String[]> gapDates;
|
|
private int maxDataGap = -1;
|
|
private double total;
|
|
private int pairs;
|
|
private int lineResultCount;
|
|
|
|
void addLine(double tot, double prs) {
|
|
total += tot;
|
|
pairs += prs;
|
|
}
|
|
|
|
void addDataGap(int gap, String begin, String end) {
|
|
if (gap > 0 && gap >= maxDataGap) {
|
|
if (gap > maxDataGap) {
|
|
maxDataGap = gap;
|
|
gapDates = new ArrayList<>();
|
|
}
|
|
gapDates.add(new String[]{begin, end});
|
|
}
|
|
}
|
|
|
|
void lineResult(String date, int invalid, int prs, double tot) {
|
|
if (lineResultCount >= 3)
|
|
return;
|
|
out.printf("%10s out: %2d in: %2d tot: %10.3f avg: %10.3f%n",
|
|
date, invalid, prs, tot, (prs > 0) ? tot / prs : 0.0);
|
|
lineResultCount++;
|
|
}
|
|
|
|
void report() {
|
|
out.printf("%ntotal = %10.3f%n", total);
|
|
out.printf("readings = %6d%n", pairs);
|
|
out.printf("average = %010.3f%n", total / pairs);
|
|
out.printf("%nmaximum run(s) of %d invalid measurements: %n",
|
|
maxDataGap);
|
|
for (String[] dates : gapDates)
|
|
out.printf("begins at %s and ends at %s%n", dates[0], dates[1]);
|
|
|
|
}
|
|
}
|
|
}
|