Source PostScript (numstr2array.pps)

Retour Texte non formaté
%% syntaxe : str str2num --> num /str2num { 5 dict begin /str exch def /n str length def /signnum 1 def /frct false def /k 0 def 0 1 n 1 sub { /i exch def str i get dup 46 eq { %% il y a un point /frct true def pop i 0 eq { 0 } if } { dup 45 eq { /signnum -1 def pop } { frct not { i 1 ge signnum 0 ge and i 2 ge or { exch 10 mul 48 sub add } { 48 sub } ifelse } { 48 sub /k k 1 add store 10 k exp div add } ifelse } ifelse } ifelse } for signnum mul end } def /str2num {cvx exec} def %% syntaxe : str numstr2array -> array %% ou str est une chaine de nombres reels separes par des espaces %% et array est constitue des elements numeriques de string. %% exemple : %% (0 -12 .234 54) --> [0 -12 0.234 54] /numstr2array { 6 dict begin /str exch def /n str length def /separateurs [] def [ 0 1 n 1 sub { /i exch def str i get 32 eq { /separateurs [separateurs aload pop i] def } if } for /j 0 def /oldsep 0 def 0 1 separateurs length 1 sub { /i exch def str j separateurs i get oldsep sub getinterval str2num /j separateurs i get 1 add def /oldsep separateurs i get 1 add def } for str j n oldsep sub getinterval str2num ] end } def %% syntaxe : array numstr2array -> array /arraynumstr2arrayarray { {numstr2array} apply } def %% %% syntaxe : str numstr2array -> array %% %% ou str est une chaine de nombres entiers separes par des espaces %% %% et array est constitue des elements numeriques entiers de string. %% %% exemple : %% %% (0 12 4 54) --> [0 12 4 54] %% /numstr2array { %% 3 dict begin %% /str exch def %% /n str length def %% /j -1 def %% [ %% 0 1 n 1 sub { %% /i exch def %% /j j 1 add store %% str i get %% dup 32 eq { %% %% c est un espace %% /j -1 store %% pop %% } { %% j 1 ge { %% exch 10 mul 48 sub add %% } { %% 48 sub %% } ifelse %% } ifelse %% } for %% ] %% end %% } def