47 lines
1.4 KiB
Plaintext
47 lines
1.4 KiB
Plaintext
V debug = 0B
|
||
V datePat = re:‘\d{4}-\d{2}-\d{2}’
|
||
V valuPat = re:‘[-+]?\d+\.\d+’
|
||
V statPat = re:‘-?\d+’
|
||
V totalLines = 0
|
||
Set[String] dupdate
|
||
Set[String] badform
|
||
Set[String] badlen
|
||
V badreading = 0
|
||
Set[String] datestamps
|
||
|
||
L(line) File(‘readings.txt’).read().rtrim("\n").split("\n")
|
||
totalLines++
|
||
V fields = line.split("\t")
|
||
V date = fields[0]
|
||
V pairs = (1 .< fields.len).step(2).map(i -> (@fields[i], @fields[i + 1]))
|
||
|
||
V lineFormatOk = datePat.match(date)
|
||
& all(pairs.map(p -> :valuPat.match(p[0])))
|
||
& all(pairs.map(p -> :statPat.match(p[1])))
|
||
I !lineFormatOk
|
||
I debug
|
||
print(‘Bad formatting ’line)
|
||
badform.add(date)
|
||
|
||
I pairs.len != 24 | any(pairs.map(p -> Int(p[1]) < 1))
|
||
I debug
|
||
print(‘Missing values ’line)
|
||
I pairs.len != 24
|
||
badlen.add(date)
|
||
I any(pairs.map(p -> Int(p[1]) < 1))
|
||
badreading++
|
||
|
||
I date C datestamps
|
||
I debug
|
||
print(‘Duplicate datestamp ’line)
|
||
dupdate.add(date)
|
||
|
||
datestamps.add(date)
|
||
|
||
print("Duplicate dates:\n "sorted(Array(dupdate)).join("\n "))
|
||
print("Bad format:\n "sorted(Array(badform)).join("\n "))
|
||
print("Bad number of fields:\n "sorted(Array(badlen)).join("\n "))
|
||
print("Records with good readings: #. = #2.2%\n".format(
|
||
totalLines - badreading, (totalLines - badreading) / Float(totalLines) * 100))
|
||
print(‘Total records: ’totalLines)
|