1 | PRO cutcommand, widcommand, toread, coef, numberofread, operation, nameexp, separator, add |
---|
2 | ; |
---|
3 | ; on separe widcommand en bloc separes par de + ou des - |
---|
4 | ; par ex on peut avoir: |
---|
5 | ; widcommand=2*champ1+champ2-8*champ9+678 |
---|
6 | ; |
---|
7 | ; si on ne commence pas par un singne + ou - |
---|
8 | case 1 of |
---|
9 | strpos(widcommand, '+') EQ 0:BEGIN |
---|
10 | widcommand = strmid(widcommand, 1) |
---|
11 | firstsign = '+' |
---|
12 | end |
---|
13 | strpos(widcommand, '-') EQ 0:BEGIN |
---|
14 | widcommand = strmid(widcommand, 1) |
---|
15 | firstsign = '-' |
---|
16 | END |
---|
17 | ELSE:firstsign = '+' |
---|
18 | endcase |
---|
19 | |
---|
20 | sepplus = str_sep(widcommand, '+', /trim) |
---|
21 | sepmoins = str_sep(sepplus[0], '-', /trim) |
---|
22 | singleread = sepmoins |
---|
23 | if n_elements(sepmoins) NE 1 then $ |
---|
24 | separator = [replicate('-', n_elements(sepmoins)-1), '+'] ELSE $ |
---|
25 | separator = ['+'] |
---|
26 | if n_elements(sepplus) GT 1 then $ |
---|
27 | for i = 1, n_elements(sepplus)-1 do begin |
---|
28 | sepmoins = str_sep(sepplus[i], '-', /trim) |
---|
29 | singleread = [singleread, sepmoins] |
---|
30 | if n_elements(sepmoins) NE 1 then $ |
---|
31 | separator = [separator, replicate('-', n_elements(sepmoins)-1), '+'] ELSE $ |
---|
32 | separator = [separator, '+'] |
---|
33 | ENDFOR |
---|
34 | separator = [firstsign, separator] |
---|
35 | ; |
---|
36 | numberofread = n_elements(singleread) |
---|
37 | ; cas simple ou il n''y a qu''un champ a lire... |
---|
38 | if numberofread EQ 1 and isnumber(singleread[0]) GE 1 then begin |
---|
39 | coef = '' |
---|
40 | numberofread = 1 |
---|
41 | operation = '' |
---|
42 | nameexp = '???' |
---|
43 | separator = '' |
---|
44 | add = separator[0]+singleread[0] |
---|
45 | return |
---|
46 | endif |
---|
47 | ; |
---|
48 | ; les dernier element de singleread est-il un ordre de lecture ou une |
---|
49 | ; constant a ajouter ??? |
---|
50 | ; |
---|
51 | if isnumber(singleread[numberofread-1]) GE 1 then begin |
---|
52 | add = separator[numberofread-1]+singleread[numberofread-1] |
---|
53 | singleread = singleread[0:numberofread-2] |
---|
54 | numberofread = numberofread-1 |
---|
55 | ENDIF ELSE add = '' |
---|
56 | ; |
---|
57 | IF toread GE numberofread then begin |
---|
58 | rien = report('toread ne peut etre + grand que numberofread') |
---|
59 | return |
---|
60 | ENDIF |
---|
61 | ; |
---|
62 | ; for i = 0, n_elements(singleread)-1 do print, separator[i], ' ', singleread[i] |
---|
63 | ; |
---|
64 | pieceofread = singleread[toread] |
---|
65 | separator = separator[toread] |
---|
66 | ; |
---|
67 | case 1 of |
---|
68 | strpos(pieceofread, '*') NE -1:operation = '*' |
---|
69 | strpos(pieceofread, '/') NE -1:operation = '/' |
---|
70 | ELSE:operation = '' |
---|
71 | ENDCASE |
---|
72 | if operation NE '' then begin |
---|
73 | finalread = str_sep(pieceofread, operation, /trim) |
---|
74 | coef = finalread[0] |
---|
75 | nameexp = finalread[1] |
---|
76 | ENDIF ELSE BEGIN |
---|
77 | if toread EQ 0 AND firstsign EQ '-' then begin |
---|
78 | coef = '-1' |
---|
79 | operation = '*' |
---|
80 | ENDIF ELSE coef = '' |
---|
81 | nameexp = pieceofread |
---|
82 | ENDELSE |
---|
83 | ; |
---|
84 | ; |
---|
85 | return |
---|
86 | end |
---|