Jump to content

Text processing/1: Difference between revisions

(Add Nimrod)
(→‎{{header|Java}}: added Java)
Line 1,572:
 
Maximum run(s) of 589 consecutive false readings ends at line(s) starting with date(s): 1993-03-05</lang>
 
=={{header|Java}}==
{{works with|Java|7}}
<lang 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]);
 
}
}
}</lang>
 
<pre>1990-01-01 out: 2 in: 22 tot: 590.000 avg: 26.818
1990-01-02 out: 0 in: 24 tot: 410.000 avg: 17.083
1990-01-03 out: 0 in: 24 tot: 1415.000 avg: 58.958
 
total = 1358393.400
readings = 129403
average = 000010.497
 
maximum run(s) of 589 invalid measurements:
begins at 1993-02-09 and ends at 1993-03-05</pre>
 
=={{header|JavaScript}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.