String matching: Difference between revisions

Line 442:
<lang PL/I>
/* Let s be one string, t be the other that might exist within s. */
/* 8-1-2011 */
 
k = index(s, t);
if k = 0 then put skip listedit (t, ' is nowhere in sight') (a);
else if k = 1 then
put skip listedit (t, ' starts at the beginning of ', s) (a);
else if k+length(t)-1 = length(s) then
put skip listedit (t, ' is at the end of ', s) (a);
else put skip listedit (t, ' is within ', s) (a);
 
if k > 0 then put skip listedit (t, ' starts at position ', k) (a);
</lang>
 
Optional extra:
 
<lang PL/I>
/* Handle multiple occurrences. */
n = 1;
do forever;
k = index(s, t, n);
if k = 0 then
do;
if n = 1 then put skip list (t, ' is nowhere in sight');
stop;
end;
else if k = 1 then
put skip edit ('<', t, '> starts at the beginning of ', s) (a);
else if k+length(t)-1 = length(s) then
put skip edit ('<', t, '> is at the end of ', s) (a);
else put skip edit ('<', t, '> is within ', s) (a);
n = k + length(t);
 
if k > 0 then
if k > 0 then put skip list (t, ' starts at position ', k);
put skip edit ('<', t, '> starts at position ', trim(k)) (a);
else stop;
end;
</lang>
 
Anonymous user