Text processing/2: Difference between revisions
Content added Content deleted
(→{{header|Go}}: Add Fortran) |
|||
Line 751: | Line 751: | ||
<pre>Duplicated timestamps: 1990-03-25, 1991-03-31, 1992-03-29, 1993-03-28, 1995-03-26 |
<pre>Duplicated timestamps: 1990-03-25, 1991-03-31, 1992-03-29, 1993-03-28, 1995-03-26 |
||
Good reading records: 5017</pre> |
Good reading records: 5017</pre> |
||
=={{header|Eiffel}}== |
|||
<lang Eiffel> |
|||
class |
|||
APPLICATION |
|||
create |
|||
make |
|||
feature |
|||
make |
|||
-- 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 |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
Double date stamp: |
|||
1990-03-25 |
|||
Double date stamp: |
|||
1991-03-31 |
|||
Double date stamp: |
|||
1992-03-29 |
|||
Double date stamp: |
|||
1993-03-28 |
|||
Double date stamp: |
|||
1995-03-26 |
|||
0 records have not 24 readings. |
|||
Good records: 5017. |
|||
</pre> |
|||
=={{header|Erlang}}== |
=={{header|Erlang}}== |