Selective file copy: Difference between revisions

From Rosetta Code
Content added Content deleted
(add task)
 
(add Rexx)
Line 38: Line 38:
</lang>
</lang>
{{out}}
{{out}}
<pre>AA 01XXXXX
AAA 02XXXXX
AAAA 03XXXXX
AAAAA04XXXXX
AAAAA05XXXXX</pre>

=={{header|Rexx}}==
{{trans|PL/I}}
<lang rexx>in='in.txt'
out='out.txt'; 'erase' out
Do While lines(in)>0
l=linein(in)
Parse Var l a +5 b +5 c +4 d +5
chex=c2x(c)
cpic=left(chex,2)
call lineout out,a||cpic||'XXXXX'
End
Call lineout in
Call lineout out
'type' out</lang>
{{out}}
Using the test file produced by PL/I.
The data conversion used for c is not very general!
<pre>AA 01XXXXX
<pre>AA 01XXXXX
AAA 02XXXXX
AAA 02XXXXX

Revision as of 18:36, 27 April 2015

Selective file copy is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

Copy part of input records to an output file.

Show how file processing as known from PL/I or COBOL can be implemented in the language of your choice.

PL/I

<lang pli>*process source attributes xref or(!);

copys: Proc Options(Main);
Dcl 1 s1 unal,
     2 a Char(5),
     2 b Char(5),
     2 c Bin Fixed(31),
     2 d Char(5);
Dcl 1 s2,
     2 a Char(5),
     2 c Pic'99',
     2 x Char(5) Init('XXXXX');
Dcl o1  Record Output;   /* create a test file */
Dcl in  Record Input;
Dcl out Record Output;
Do i=1 To 5;
  s1.a=repeat('A',i);
  s1.b=repeat('B',i);
  s1.c=i;
  s1.d=repeat('D',i);
  Write File(o1) From(s1);
  End;
Close File(o1);
On Endfile(in) Goto eoj;
Do i=1 By 1;             /* copy parts of the test file    */
  Read File(in) Into(s1);
  s2=s1, by name;        /* only fields a and c are copied */
  Write File(out) From(s2);
  End;
eoj:
End;

</lang>

Output:
AA   01XXXXX
AAA  02XXXXX
AAAA 03XXXXX
AAAAA04XXXXX
AAAAA05XXXXX

Rexx

Translation of: PL/I

<lang rexx>in='in.txt' out='out.txt'; 'erase' out Do While lines(in)>0

 l=linein(in)
 Parse Var l a +5 b +5 c +4 d +5
 chex=c2x(c)
 cpic=left(chex,2)
 call lineout out,a||cpic||'XXXXX'
 End

Call lineout in Call lineout out 'type' out</lang>

Output:

Using the test file produced by PL/I. The data conversion used for c is not very general!

AA   01XXXXX
AAA  02XXXXX
AAAA 03XXXXX
AAAAA04XXXXX
AAAAA05XXXXX