I am trying to read from a file line by line using a code at the beginning of the line as a condition for a case statement to determine which operation to perform with the rest of the data in the same line.
The file text is as follows:
IL Sales Mary Sales_person 1378 25.46
IL Sales Mary Sales_person 1364 20.13
IR Sales Vallerie Manager 1358 27.15
IL Media Marty Manager 1444 25.17
IR Media Bob spokesperson 1416 10.13
IL Crew Sally Pilot 675 35.11
IR Media David Designer 1412 20.76
DL Media
DR Media
PA
PD Media
DD Sales
PD Sales
I have the codes (IL, IR, DL, DR, PA, PD, DD) as enumeration types here:
type CodeType is(IL, IR, DL, DR, PA, PD, DD);
package CodeTypeIO is new Ada.Text_IO.Enumeration_IO(CodeType);
use CodeTypeIO;
My case/switch is as follows:
Open(File => fileIn, Mode => In_File, Name => "input.txt");
Create(File => fileOut, Mode => Out_File, Name => "output.txt");
loop
get(fileIn, code);
case code is
when IL =>
get(fileIn, deptIn);
get(fileIn, eNameIn);
get(fileIn, titleIn);
get(fileIn, IDIn);
FloatIO.get(fileIn, payrateIn);
inLeftNode(deptIn, eNameIn, titleIn, IDIn, payrateIn);
when IR =>
get(fileIn, deptIn);
get(fileIn, eNameIn);
get(fileIn, titleIn);
get(fileIn, IDIn);
FloatIO.get(fileIn, payrateIn);
inRightNode(deptIn, eNameIn, titleIn, IDIn, payrateIn);
when DL =>
get(fileIn, deptIn);
get(fileIn, eNameIn);
get(fileIn, titleIn);
get(fileIn, IDIn);
FloatIO.get(fileIn, payrateIn);
inRightNode(deptIn, eNameIn, titleIn, IDIn, payrateIn);
when DR =>
get(fileIn, deptIn);
get(fileIn, eNameIn);
get(fileIn, titleIn);
get(fileIn, IDIn);
FloatIO.get(fileIn, payrateIn);
inRightNode(deptIn, eNameIn, titleIn, IDIn, payrateIn);
when PA =>
get(fileIn, deptIn);
get(fileIn, eNameIn);
get(fileIn, titleIn);
get(fileIn, IDIn);
FloatIO.get(fileIn, payrateIn);
inRightNode(deptIn, eNameIn, titleIn, IDIn, payrateIn);
when PD =>
get(fileIn, deptIn);
get(fileIn, eNameIn);
get(fileIn, titleIn);
get(fileIn, IDIn);
FloatIO.get(fileIn, payrateIn);
inRightNode(deptIn, eNameIn, titleIn, IDIn, payrateIn);
when DD =>
get(fileIn, deptIn);
get(fileIn, eNameIn);
get(fileIn, titleIn);
get(fileIn, IDIn);
FloatIO.get(fileIn, payrateIn);
inRightNode(deptIn, eNameIn, titleIn, IDIn, payrateIn);
end case;
end loop;
I am getting an "invalid token" error at every "when 'whatever code' ->" line. I've tried a few adjustments and googled about invalid tokens but haven't found quite what I'm looking for to fix my issue.
Errors were corrected by changing all " -> " to " =>" and changing "get(fileIn, line);" & "case line is" to "get(fileIn, code);" & "case code is".
The corrections are reflected in the sample code above.