/* This program creates and updates a REGIONAL(1) file */ sample: procedure options(main); declare File1 file environment(regional(1) recsize(20));/*requires -defext declare Buffer char(20); declare FirstByte char(1) defined(Buffer); declare Key char(4) varying; declare Eof bit; put skip list('Creating REGIONAL(1) file with records 1, 5 and 9.'); open file(File1) output; Buffer = copy('1',size(Buffer)); write file (File1) from(Buffer) keyfrom (1); Buffer = copy('5',size(Buffer)); write file (File1) from(Buffer) keyfrom (5); Buffer = copy('9',size(Buffer)); write file (File1) from(Buffer) keyfrom (9); close file(File1); open file(File1) update; on endfile(File1) Eof = '1'b1; Eof '0'b1; /* Initialize */ put skip list('Reading file and updating the even numbered records.'); read file(File1) into(Buffer) keyto(Key); do while (^Eof); if unspec(FirstByte) = 'FF'b4 then do; /* dummy record */ if (mod(fixed(Key,15),2) = 0) then do; /* change even number ones * Buffer = 'rewritten'; rewrite file(File1) from (Buffer); /* rewrite current record */ end; end; read file(File1) into (Buffer) keyto(Key); end; Eof = '0'b1; /* Reset */ put skip(2) list ('Reading and displaying all records in file.'); Key = '1'; read file(File1) into(Buffer) key(Key); /* direct read */ do while (^Eof); if unspec(FirstByte) = 'FF'b4 then put skip list(Key,'<dummy record>'); else put skip list(Key,Buffer); read file(File1) into(Buffer) keyto(Key); /* sequential read */ end; close file(File1); put skip; end sample;
You can compile, link, execute, and display the output of the above sample program with the following commands:
mfplx sample.pl1 -defext -o sample.out sample.out
The output is as follows:
Creating REGIONAL(1) file with records 1, 5 and 9. Reading file and updating the even numbered records. Reading and displaying all records in file. 1 11111111111111111111 2 rewritten 3 <dummy record> 4 rewritten 5 55555555555555555555 6 rewritten 7 <dummy record> 8 rewritten 9 99999999999999999999