64 lines
2.2 KiB
Ada
64 lines
2.2 KiB
Ada
with Ada.Calendar; use Ada.Calendar;
|
|
with Ada.Text_IO; use Ada.Text_IO;
|
|
with Strings_Edit; use Strings_Edit;
|
|
with Strings_Edit.Floats; use Strings_Edit.Floats;
|
|
with Strings_Edit.Integers; use Strings_Edit.Integers;
|
|
|
|
with Generic_Map;
|
|
|
|
procedure Data_Munging_2 is
|
|
package Time_To_Line is new Generic_Map (Time, Natural);
|
|
use Time_To_Line;
|
|
File : File_Type;
|
|
Line_No : Natural := 0;
|
|
Count : Natural := 0;
|
|
Stamps : Map;
|
|
begin
|
|
Open (File, In_File, "readings.txt");
|
|
loop
|
|
declare
|
|
Line : constant String := Get_Line (File);
|
|
Pointer : Integer := Line'First;
|
|
Flag : Integer;
|
|
Year, Month, Day : Integer;
|
|
Data : Float;
|
|
Stamp : Time;
|
|
Valid : Boolean := True;
|
|
begin
|
|
Line_No := Line_No + 1;
|
|
Get (Line, Pointer, SpaceAndTab);
|
|
Get (Line, Pointer, Year);
|
|
Get (Line, Pointer, Month);
|
|
Get (Line, Pointer, Day);
|
|
Stamp := Time_Of (Year_Number (Year), Month_Number (-Month), Day_Number (-Day));
|
|
begin
|
|
Add (Stamps, Stamp, Line_No);
|
|
exception
|
|
when Constraint_Error =>
|
|
Put (Image (Year) & Image (Month) & Image (Day) & ": record at " & Image (Line_No));
|
|
Put_Line (" duplicates record at " & Image (Get (Stamps, Stamp)));
|
|
end;
|
|
Get (Line, Pointer, SpaceAndTab);
|
|
for Reading in 1..24 loop
|
|
Get (Line, Pointer, Data);
|
|
Get (Line, Pointer, SpaceAndTab);
|
|
Get (Line, Pointer, Flag);
|
|
Get (Line, Pointer, SpaceAndTab);
|
|
Valid := Valid and then Flag >= 1;
|
|
end loop;
|
|
if Pointer <= Line'Last then
|
|
Put_Line ("Unrecognized tail at " & Image (Line_No) & ':' & Image (Pointer));
|
|
elsif Valid then
|
|
Count := Count + 1;
|
|
end if;
|
|
exception
|
|
when End_Error | Data_Error | Constraint_Error | Time_Error =>
|
|
Put_Line ("Syntax error at " & Image (Line_No) & ':' & Image (Pointer));
|
|
end;
|
|
end loop;
|
|
exception
|
|
when End_Error =>
|
|
Close (File);
|
|
Put_Line ("Valid records " & Image (Count) & " of " & Image (Line_No) & " total");
|
|
end Data_Munging_2;
|