PROCEDURE CutAndCopy(in: Streams.Stream;
out: Streams.Stream;
selected: SET; (* selected fields *)
fieldsep: CHAR) : BOOLEAN;
VAR
field: ARRAY 512 OF CHAR; fieldno: INTEGER;
insertsep: BOOLEAN; fieldseps: Sets.CharSet;
BEGIN
Sets.InitSet(fieldseps);
Sets.InclChar(fieldseps, fieldsep);
StreamDisciplines.SetFieldSepSet(in, fieldseps);
LOOP
fieldno := 0; insertsep := FALSE;
WHILE Read.FieldS(in, field) DO
IF fieldno IN selected THEN
IF insertsep THEN
Write.CharS(out, fieldsep);
ELSE
insertsep := TRUE;
END;
Write.StringS(out, field);
END;
INC(fieldno);
END;
IF in.eof THEN RETURN TRUE END;
IF in.error THEN RETURN FALSE END;
Read.LnS(in);
IF in.eof THEN RETURN TRUE END;
IF in.error THEN RETURN FALSE END;
Write.LnS(out);
IF out.errors > 0 THEN RETURN FALSE END;
END;
END CutAndCopy;
|