96 lines
3.1 KiB
Plaintext
96 lines
3.1 KiB
Plaintext
INT no data := 0; # Current run of consecutive flags<0 in lines of file #
|
|
INT no data max := -1; # Max consecutive flags<0 in lines of file #
|
|
FLEX[0]STRING no data max line; # ... and line number(s) where it occurs #
|
|
|
|
REAL tot file := 0; # Sum of file data #
|
|
INT num file := 0; # Number of file data items with flag>0 #
|
|
|
|
# CHAR fs = " "; #
|
|
INT nf = 24;
|
|
|
|
INT upb list := nf;
|
|
FORMAT list repr = $n(upb list-1)(g", ")g$;
|
|
|
|
PROC exception = ([]STRING args)VOID:(
|
|
putf(stand error, ($"Exception"$, $", "g$, args, $l$));
|
|
stop
|
|
);
|
|
|
|
PROC raise io error = (STRING message)VOID:exception(("io error", message));
|
|
|
|
OP +:= = (REF FLEX []STRING rhs, STRING append)REF FLEX[]STRING: (
|
|
HEAP [UPB rhs+1]STRING out rhs;
|
|
out rhs[:UPB rhs] := rhs;
|
|
out rhs[UPB rhs+1] := append;
|
|
rhs := out rhs;
|
|
out rhs
|
|
);
|
|
|
|
INT upb opts = 3; # these are "a68g" "./Data_Munging.a68" & "-" #
|
|
[argc - upb opts]STRING in files;
|
|
FOR arg TO UPB in files DO in files[arg] := argv(upb opts + arg) OD;
|
|
|
|
MODE FIELD = STRUCT(REAL data, INT flag);
|
|
FORMAT field repr = $2(g)$;
|
|
|
|
FOR index file TO UPB in files DO
|
|
STRING file name = in files[index file], FILE file;
|
|
IF open(file, file name, stand in channel) NE 0 THEN
|
|
raise io error("Cannot open """+file name+"""") FI;
|
|
on logical file end(file, (REF FILE f)BOOL: logical file end done);
|
|
REAL tot line, INT num line;
|
|
# make term(file, ", ") for CSV data #
|
|
STRING date;
|
|
DO
|
|
tot line := 0; # sum of line data #
|
|
num line := 0; # number of line data items with flag>0 #
|
|
# extract field info #
|
|
[nf]FIELD data;
|
|
getf(file, ($10a$, date, field repr, data, $l$));
|
|
|
|
FOR key TO UPB data DO
|
|
FIELD field = data[key];
|
|
IF flag OF field<1 THEN
|
|
no data +:= 1
|
|
ELSE
|
|
# check run of data-absent data #
|
|
IF no data max = no data AND no data>0 THEN
|
|
no data max line +:= date FI;
|
|
IF no data max<no data AND no data>0 THEN
|
|
no data max := no data;
|
|
no data max line := date FI;
|
|
# re-initialise run of no data counter #
|
|
no data := 0;
|
|
# gather values for averaging #
|
|
tot line +:= data OF field;
|
|
num line +:= 1
|
|
FI
|
|
OD;
|
|
|
|
# totals for the file so far #
|
|
tot file +:= tot line;
|
|
num file +:= num line;
|
|
|
|
printf(($"Line: "g" Reject: "g(-2)" Accept: "g(-2)" Line tot: "g(-14, 3)" Line avg: "g(-14, 3)l$,
|
|
date,
|
|
UPB(data) -num line,
|
|
num line, tot line,
|
|
IF num line>0 THEN tot line/num line ELSE 0 FI))
|
|
OD;
|
|
logical file end done:
|
|
close(file)
|
|
OD;
|
|
|
|
FORMAT plural = $b(" ", "s")$,
|
|
p = $b("", "s")$;
|
|
|
|
upb list := UPB in files;
|
|
printf(($l"File"f(plural)" = "$, upb list = 1, list repr, in files, $l$,
|
|
$"Total = "g(-0, 3)l$, tot file,
|
|
$"Readings = "g(-0)l$, num file,
|
|
$"Average = "g(-0, 3)l$, tot file / num file));
|
|
|
|
upb list := UPB no data max line;
|
|
printf(($l"Maximum run"f(p)" of "g(-0)" consecutive false reading"f(p)" ends at line starting with date"f(p)": "$,
|
|
upb list = 1, no data max, no data max = 0, upb list = 1, list repr, no data max line, $l$))
|