46 lines
1.3 KiB
Text
46 lines
1.3 KiB
Text
*process or(!);
|
|
quib: Proc Options(main);
|
|
/*********************************************************************
|
|
* 06.10.2013 Walter Pachl
|
|
*********************************************************************/
|
|
put Edit*process or(!);
|
|
quib: Proc Options(main);
|
|
/*********************************************************************
|
|
* 06.10.2013 Walter Pachl
|
|
* 07.10.2013 -"- change "Oxford comma" to and
|
|
*********************************************************************/
|
|
put Edit(quibbling(''))(Skip,a);
|
|
put Edit(quibbling('ABC'))(Skip,a);
|
|
put Edit(quibbling('ABC DEF'))(Skip,a);
|
|
put Edit(quibbling('ABC DEF G H'))(Skip,a);
|
|
return;
|
|
|
|
quibbling: proc(s) Returns(Char(100) Var);
|
|
Dcl s Char(*);
|
|
Dcl result Char(100) Var Init('');
|
|
Dcl word(10) Char(100) Var;
|
|
Dcl (wi,p) Bin Fixed(31);
|
|
If s='' Then result='';
|
|
Else Do;
|
|
Do wi=1 By 1 While(s^='');
|
|
p=index(s,' ');
|
|
if p=0 Then Do;
|
|
word(wi)=s;
|
|
s='';
|
|
End;
|
|
Else Do;
|
|
word(wi)=left(s,p-1);
|
|
s=substr(s,p+1);
|
|
End;
|
|
end;
|
|
wn=wi-1;
|
|
result=word(1);
|
|
Do i=2 To wn-1;
|
|
result=result!!', '!!word(i);
|
|
End;
|
|
If wn>1 Then
|
|
result=result!!' and '!!word(wn);
|
|
End;
|
|
Return('{'!!result!!'}');
|
|
End;
|
|
End;
|