(phixonline)-->
-- demo\rosetta\TextProcessing1.exw
with javascript_semantics -- (include version/first of next three lines only)
include readings.e -- global constant lines, or:
--assert(write_lines("readings.txt",lines)!=-1) -- first run, then:
--constant lines = read_lines("readings.txt")
include builtins\timedate.e
integer count = 0,
max_count = 0,
ntot = 0
atom readtot = 0
timedate run_start, max_start
procedure end_bad_run()
if count then
if count>max_count then
max_count = count
max_start = run_start
end if
count = 0
end if
end procedure
for i=1 to length(lines) do
sequence oneline = split(lines[i],'\t'), r
if length(oneline)!=49 then
?"bad line (length!=49)"
else
r = parse_date_string(oneline[1],{"YYYY-MM-DD"})
if not timedate(r) then
?{"bad date",oneline[1]}
else
timedate td = r
integer rejects=0, accepts=0
atom readsum = 0
for j=2 to 48 by 2 do
r = scanf(oneline[j],"%f")
if length(r)!=1 then
?{"error scanning",oneline[j]}
rejects += 1
else
atom reading = r[1][1]
r = scanf(oneline[j+1],"%d")
if length(r)!=1 then
?{"error scanning",oneline[j+1]}
rejects += 1
else
integer flag = r[1][1]
if flag<=0 then
if count=0 then
run_start = td
end if
count += 1
rejects += 1
else
end_bad_run()
accepts += 1
readsum += reading
end if
end if
end if
end for
readtot += readsum
ntot += accepts
if i>=length(lines)-2 then
string average = iff(accepts=0?"N/A":sprintf("%6.3f",readsum/accepts))
printf(1,"Date: %s, Rejects: %2d, Accepts: %2d, Line total: %7.3f, Average %s\n",
{format_timedate(td,"DD/MM/YYYY"),rejects, accepts, readsum, average})
end if
end if
end if
end for
printf(1,"Average: %.3f (of %d readings)\n",{readtot/ntot,ntot})
end_bad_run()
if max_count then
printf(1,"Maximum run of %d consecutive false readings starting: %s\n",
{max_count,format_timedate(max_start,"DD/MM/YYYY")})
end if
?"done"
{} = wait_key()