%% 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
|