Reading Text Files in IFS |
We already created text file named txtfile1.txt on ifs and written Text data.
Browse : /home/easyclass/txtfile1.txt Record : 1 of 5 by 18 Column : 1 361 by 131 Control : ....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8....+....9....+....0....+....1....+....2....+....3. ************Beginning of data************** IFS TEXT FILE1 IFS TEXT FILE2 END
Now, In this article we will learn how to read the text files on the ifs in RPGLE program. Let's analyze the below program that performs read operation on the text file present on ifs.
RPGLE program for Reading text file on IFS
RPG Code in Fixed format for reading text file present on ifs.
HDFTACTGRP(*NO) D errorifs PR * ExtProc('__errno') D strerror PR * ExtProc('strerror') D error_num 10I 0 value D read PR 10i 0 extproc('read') * 32 bit, no. of byt D fileds 10i 0 value *file descriptor D buffer * value * pointer to byte D noofbytes 10U 0 value * 32 bits D close PR 10i 0 extproc('close') * D fileds 10i 0 value *file descriptor D open PR 10I 0 extproc('open') D ifspath * value options(*string) *ifs path D oflag 10I 0 value *string of 32 bits D mode 10U 0 value options(*nopass) * 9 bits D codepage 10U 0 value options(*nopass) * * <-----oflag----> D O_readonly C 1 D O_writeonly C 2 D O_readwrite C 4 D O_createfileifnotexist... D C 8 D O_exclusivecreate... D C 16 D O_truncateto0bytes... D C 64 D O_appendtofile C 256 D O_converttextbycodepage... D C 8388608 D O_openintextmode... D C 16777216 * * <-----mode----> * owner,group,other (RWX) * owner authority D M_readowner C 256 D M_writeowner C 128 D M_executeowner C 64 * group authority D M_readgroup C 32 D M_writegroup C 16 D M_executegroup C 8 * other people D M_readother C 4 D M_writeother C 2 D M_executeother C 1 * Difspath s 512a Doflag s 10I 0 Dmode s 10U 0 Dcodepage s 10U 0 Dfiledescriptor s 10i 0 Difsdata s 10a inz Dreturn_read s 10i 0 inz Dreturn_close s 10i 0 inz Derror_ptr S * Derror_num S 10I 0 based(error_ptr) Derrormsg_ptr S * Derror_msg S 500a based(errormsg_ptr) DCR C CONST(x'0D') DLF C CONST(x'25') Dtextline S 500a inz Dposition S 10I 0 inz Dlength S 10I 0 inz C EVAL ifspath = '/home/easyclass/txtfile1.txt' C EVAL oflag = O_readonly C EVAL filedescriptor = open(%trim(ifspath): C oflag) C IF filedescriptor < 0 C EVAL error_ptr = errorIFS() C EVAL errormsg_ptr = strerror(error_num) C RETURN C ENDIF C EVAL return_read = read(filedescriptor: C %addr(ifsdata): C %size(ifsdata)) C EVAL position = 1 C DOW position <= return_read C IF %SUBST(ifsdata:position:1) = CR C CLEAR textline C RESET length C ELSE C IF %SUBST(ifsdata:position:1) <> LF C EVAL length = length + 1 C EVAL %SUBST(textline:length:1) = C %SUBST(ifsdata:position:1) C ENDIF C ENDIF C IF position = return_read C RESET position C EVAL return_read = read(filedescriptor: C %addr(ifsdata):%size(ifsdata)) C ENDIF C EVAL position = position + 1 C ENDDO C EVAL return_close = close(filedescriptor) C IF return_close = -1 C EVAL error_ptr = errorIFS() C EVAL errormsg_ptr = strerror(error_num) C RETURN C ENDIF C EVAL *INLR = *ON C RETURN
RPG Code in /Free and /End-Free format for reading text file present on ifs.
HDFTACTGRP(*NO) D errorifs PR * ExtProc('__errno') D strerror PR * ExtProc('strerror') D error_num 10I 0 value D read PR 10i 0 extproc('read') * 32 bit, no. of byt D fileds 10i 0 value *file descriptor D buffer * value * pointer to byte D noofbytes 10U 0 value * 32 bits D close PR 10i 0 extproc('close') * D fileds 10i 0 value *file descriptor D open PR 10I 0 extproc('open') D ifspath * value options(*string) *ifs path D oflag 10I 0 value *string of 32 bits D mode 10U 0 value options(*nopass) * 9 bits D codepage 10U 0 value options(*nopass) * * <-----oflag----> D O_readonly C 1 D O_writeonly C 2 D O_readwrite C 4 D O_createfileifnotexist... D C 8 D O_exclusivecreate... D C 16 D O_truncateto0bytes... D C 64 D O_appendtofile C 256 D O_converttextbycodepage... D C 8388608 D O_openintextmode... D C 16777216 * * <-----mode----> * owner,group,other (RWX) * owner authority D M_readowner C 256 D M_writeowner C 128 D M_executeowner C 64 * group authority D M_readgroup C 32 D M_writegroup C 16 D M_executegroup C 8 * other people D M_readother C 4 D M_writeother C 2 D M_executeother C 1 * Difspath s 512a Doflag s 10I 0 Dmode s 10U 0 Dcodepage s 10U 0 Dfiledescriptor s 10i 0 Difsdata s 10a inz Dreturn_read s 10i 0 inz Dreturn_close s 10i 0 inz Derror_ptr S * Derror_num S 10I 0 based(error_ptr) Derrormsg_ptr S * Derror_msg S 500a based(errormsg_ptr) DCR C CONST(x'0D') DLF C CONST(x'25') Dtextline S 500a inz Dposition S 10I 0 inz Dlength S 10I 0 inz /free ifspath = '/home/easyclass/txtfile1.txt'; oflag = O_readonly; filedescriptor = open(%trim(ifspath): oflag); if filedescriptor < 0; error_ptr = errorIFS(); errormsg_ptr = strerror(error_num); return; endif; return_read = read(filedescriptor:%addr(ifsdata):%size(ifsdata)); position = 1; dow position <= return_read; if %SUBST(ifsdata:position:1) = CR; clear textline; reset length; else; if %SUBST(ifsdata:position:1) <> LF; length = length + 1; %SUBST(textline:length:1) = %SUBST(ifsdata:position:1); endif; endif; if position = return_read; reset position; return_read = read(filedescriptor:%addr(ifsdata):%size(ifsdata)); endif; position = position + 1; enddo; return_close = close(filedescriptor); if return_close = -1; error_ptr = errorIFS(); errormsg_ptr = strerror(error_num); return; endif; *inlr = *on; return; /end-free
RPG Code in Fully Free format for reading text file present on ifs.
**FREE CTL-OPT DFTACTGRP(*NO); DCL-PR errorifs pointer EXTPROC('__errno'); END-PR; DCL-PR strerror pointer EXTPROC('strerror'); error_num int(10) VALUE; END-PR; DCL-PR read int(10) EXTPROC('read'); fileds int(10) VALUE; buffer pointer VALUE; noofbytes uns(10) VALUE; END-PR; DCL-PR open int(10) EXTPROC('open'); ifspath pointer VALUE options(*string); oflag int(10) VALUE; mode uns(10) VALUE options(*nopass); codepage uns(10) VALUE options(*nopass); END-PR; DCL-PR close int(10) EXTPROC('close'); fileds int(10) VALUE; END-PR; // * <-----oflag----> DCL-C O_readonly 1; DCL-C O_writeonly 2; DCL-C O_readwrite 4; DCL-C O_createfileifnotexist 8; DCL-C O_exclusivecreate 16; DCL-C O_truncateto0bytes 64; DCL-C O_appendtofile 256; DCL-C O_converttextbycodepage 8388608; DCL-C O_openintextmode 16777216; // * <-----mode----> // * owner,group,other (RWX) // * owner authority DCL-C M_readowner 256; DCL-C M_writeowner 128; DCL-C M_executeowner 64; // * group authority DCL-C M_readgroup 32; DCL-C M_writegroup 16; DCL-C M_executegroup 8; // * other people DCL-C M_readother 4; DCL-C M_writeother 2; DCL-C M_executeother 1; // * DCL-S ifspath CHAR(512); DCL-S oflag int(10); DCL-S mode uns(10); DCL-S codepage uns(10); DCL-S filedescriptor int(10); DCL-S ifsdata char(500) inz; DCL-S return_read int(10) inz; DCL-S return_close int(10) inz; DCL-S error_ptr pointer; DCL-S error_num int(10) based(error_ptr); DCL-S errormsg_ptr pointer; DCL-S error_msg char(500) based(errormsg_ptr); DCL-S position int(10) inz; DCL-S length int(10) inz; DCL-S textline char(500) inz; DCL-C CR CONST(x'0D'); DCL-C LF CONST(x'25'); ifspath = '/home/easyclass/txtfile1.txt'; oflag = O_readonly; filedescriptor = open(%trim(ifspath): oflag); if filedescriptor < 0; error_ptr = errorIFS(); errormsg_ptr = strerror(error_num); return; endif; return_read = read(filedescriptor:%addr(ifsdata):%size(ifsdata)); position = 1; dow position <= return_read; if %SUBST(ifsdata:position:1) = CR; clear textline; reset length; else; if %SUBST(ifsdata:position:1) <> LF; length = length + 1; %SUBST(textline:length:1) = %SUBST(ifsdata:position:1); endif; endif; if position = return_read; reset position; return_read = read(filedescriptor:%addr(ifsdata):%size(ifsdata)); endif; position = position + 1; enddo; return_close = close(filedescriptor); if return_close = -1; error_ptr = errorIFS(); errormsg_ptr = strerror(error_num); return; endif; *inlr = *on; return;