On Jun 20, 3:38 am, "mayle...@gmail.com" <mayle...@gmail.comwrote:
hi, anyone can help me figure out how to read data from a text file
like this:
10980012907200228082002
and extract the data according to this kind of format:
Record type 1
TY-RECORD PIC (1).
ID-PARTICIPANT PIC (6).
DT-START PIC (8).
DT-END PIC (8).
i would want the program to extract the data and display them like
this:
TY-RECORD ID-PARTICIPANT DT-START DT-END
1 098001 29072002 28082002
and to save them in an excel format.
Does the data have to be converted into numeric types, or is it
sufficient to keep it as strings. If all you need is strings,
just read the record into a string, then use string::substr() to
extract the different fields. If you need to convert, you'll
have to start like this as well, then use istringstream to
convert the field to the target type. Because there are no
separators, you cannot use istream to convert before having
broken the data up into fields.
To display, you can just output using <<, but for tabular
output, something like boost::format might be easier to use,
once you learn the arcane format syntax. (The ideal would be
something like Basic's PRINT USING, but I don't know of anything
similar in C++.)
For Excel, the simplest would doubtlessly be a CSV format; just
output each line as sequence of comma separated values (or
semi-colon separated, if you are outside of the Anglo Saxon
world).
I have plenty of record types (0
- 9) and need to display them in separate tables.
In which case, it wouldn't be too hard to write a small program
which parses the Cobol record declarations into a simple C++
class, including a constructor which does the conversions.
Note that any "USAGE IS COMPUTATIONAL" will be BCD, and if the
Cobol is running on an IBM mainframe, the text may be EBCDIC.
You may also want to recognize some naming conventions. (In the
above, it looks like DT- might be dates, for example.)
--
James Kanze (GABI Software, from CAI) email:ja*********@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34