For Natural under Windows or Unix it's a simple matter of reading the CSV directly. On the mainframe the CSV must be converted to a flat file, as you have done, but the format could be simplified to make your job much easier, because the record definition must match the data byte for byte.
If you changed the record format to abc001200rr000780qqq you would have the simplest solution.
DEFINE DATA LOCAL
1 #IN
2 #A1 (A3)
2 #N1 (N3.3)
2 #A2 (A2)
2 #N2 (N4.2)
2 #A3 (A3)
END-DEFINE
*
READ WORK 1 #IN
DISPLAY #A1 #N1 #A2 #N2 #A3
END-WORK
END
In the data, note the implied decimal points and the number of digits before and after the decimal.
Because the record includes the decimal point and fewer decimal positions
DEFINE DATA LOCAL
1 #IN
2 #A1 (A3)
2 #N1 (A7)
2 #A2 (A2)
2 #N2 (A7)
2 #A3 (A3)
1 #OUT
2 #N3 (N5.1)
2 #N4 (N5.1)
2 #N5 (N3.3)
2 #N6 (N4.2)
END-DEFINE
*
READ WORK 1 #IN
MOVE EDITED #N1 TO #N3 (EM=99999.9)
MOVE EDITED #N2 TO #N4 (EM=99999.9)
MOVE #N3 TO #N5
MOVE #N4 TO #N6
DISPLAY #A1 #N1 #N3 #N5 #A2 #N2 #N4 #N6 #A3
END-WORK
END
You need to remove the decimal (MOVE EDITED) and then convert to the proper number of digits (MOVE/ASSIGN).