The following programs demonstrate the use of the FOR statement
to retrieve segmented strings. Since the PERSONNEL database does
not have any segmented strings stored, the programs first store
three strings in the RESUME field of the RESUMES relation (for
more information on storing segmented strings, see the help entry
on STORE Statement with segmented strings). The programs retrieve
the segmented strings using a nested FOR statement. The outer FOR
statement selects a record based on EMPLOYEE_ID. The inner FOR
statement prints each segmented string stored in RESUME for the
selected employee.
1 – C Example
#include <stdio.h>
DATABASE PERS = FILENAME "PERSONNEL";
main()
{
int line;
char *document[3];
document[0] = "first line of resume ";
document[1] = "second line of resume ";
document[2] = "last line of resume ";
READY PERS;
START_TRANSACTION READ_WRITE;
STORE R IN RESUMES USING
strcpy (R.EMPLOYEE_ID,"12345");
for (line = 0; line <= 2; line++)
STORE SEG IN R.RESUME
strcpy(SEG.VALUE,document[line]);
SEG.LENGTH = strlen(SEG.VALUE);
END_STORE;
END_STORE;
FOR R IN RESUMES WITH R.EMPLOYEE_ID = "12345"
FOR SEG IN R.RESUME
printf("%s\n",SEG.VALUE);
END_FOR;
END_FOR;
COMMIT;
FINISH;
}
2 – Pascal Example
program segstr (input,output);
DATABASE PERS = FILENAME 'PERSONNEL';
type lines = varying [80] of char;
var linecnt : integer;
document : array [0..2] of lines;
begin
document[0] := 'first line of resume ';
document[1] := 'second line of resume ';
document[2] := 'last line of resume ';
READY PERS;
START_TRANSACTION READ_WRITE;
STORE R IN RESUMES USING
R.EMPLOYEE_ID:= '12345';
for linecnt := 0 to 2 do
STORE SEG IN R.RESUME
SEG := document[linecnt];
SEG.LENGTH := length(document[linecnt]);
END_STORE;
END_STORE;
FOR R IN RESUMES WITH R.EMPLOYEE_ID = '12345'
FOR SEG IN R.RESUME
writeln (SEG);
END_FOR;
END_FOR;
COMMIT;
FINISH;
end.