116 lines
2.3 KiB
Plaintext
116 lines
2.3 KiB
Plaintext
class
|
|
APPLICATION
|
|
|
|
create
|
|
make
|
|
|
|
feature
|
|
|
|
make
|
|
-- Finds double date stamps and wrong formats.
|
|
local
|
|
found: INTEGER
|
|
double: STRING
|
|
do
|
|
read_wordlist
|
|
fill_hash_table
|
|
across
|
|
hash as h
|
|
loop
|
|
if h.key.has_substring ("_double") then
|
|
io.put_string ("Double date stamp: %N")
|
|
double := h.key
|
|
double.remove_tail (7)
|
|
io.put_string (double)
|
|
io.new_line
|
|
end
|
|
if h.item.count /= 24 then
|
|
io.put_string (h.key.out + " has the wrong format. %N")
|
|
found := found + 1
|
|
end
|
|
end
|
|
io.put_string (found.out + " records have not 24 readings.%N")
|
|
good_records
|
|
end
|
|
|
|
good_records
|
|
-- Number of records that have flag values > 0 for all readings.
|
|
local
|
|
count, total: INTEGER
|
|
end_date: STRING
|
|
do
|
|
create end_date.make_empty
|
|
across
|
|
hash as h
|
|
loop
|
|
count := 0
|
|
across
|
|
h.item as d
|
|
loop
|
|
if d.item.flag > 0 then
|
|
count := count + 1
|
|
end
|
|
end
|
|
if count = 24 then
|
|
total := total + 1
|
|
end
|
|
end
|
|
io.put_string ("%NGood records: " + total.out + ". %N")
|
|
end
|
|
|
|
original_list: STRING = "readings.txt"
|
|
|
|
read_wordlist
|
|
--Preprocesses data in 'data'.
|
|
local
|
|
l_file: PLAIN_TEXT_FILE
|
|
do
|
|
create l_file.make_open_read_write (original_list)
|
|
l_file.read_stream (l_file.count)
|
|
data := l_file.last_string.split ('%N')
|
|
l_file.close
|
|
end
|
|
|
|
data: LIST [STRING]
|
|
|
|
fill_hash_table
|
|
--Fills 'hash' using the date as key.
|
|
local
|
|
by_dates: LIST [STRING]
|
|
date: STRING
|
|
data_tup: TUPLE [val: REAL; flag: INTEGER]
|
|
data_arr: ARRAY [TUPLE [val: REAL; flag: INTEGER]]
|
|
i: INTEGER
|
|
do
|
|
create hash.make (data.count)
|
|
across
|
|
data as d
|
|
loop
|
|
if not d.item.is_empty then
|
|
by_dates := d.item.split ('%T')
|
|
date := by_dates [1]
|
|
by_dates.prune (date)
|
|
create data_tup
|
|
create data_arr.make_empty
|
|
from
|
|
i := 1
|
|
until
|
|
i > by_dates.count - 1
|
|
loop
|
|
data_tup := [by_dates [i].to_real, by_dates [i + 1].to_integer]
|
|
data_arr.force (data_tup, data_arr.count + 1)
|
|
i := i + 2
|
|
end
|
|
hash.put (data_arr, date)
|
|
if not hash.inserted then
|
|
date.append ("_double")
|
|
hash.put (data_arr, date)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
hash: HASH_TABLE [ARRAY [TUPLE [val: REAL; flag: INTEGER]], STRING]
|
|
|
|
end
|