[2] | 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 |
---|