PRO cutcommand, widcommand, toread, coef, numberofread, operation, nameexp, separator, add ; ; on separe widcommand en bloc separes par de + ou des - ; par ex on peut avoir: ; widcommand=2*champ1+champ2-8*champ9+678 ; ; si on ne commence pas par un singne + ou - case 1 of strpos(widcommand, '+') EQ 0:BEGIN widcommand = strmid(widcommand, 1) firstsign = '+' end strpos(widcommand, '-') EQ 0:BEGIN widcommand = strmid(widcommand, 1) firstsign = '-' END ELSE:firstsign = '+' endcase sepplus = str_sep(widcommand, '+', /trim) sepmoins = str_sep(sepplus[0], '-', /trim) singleread = sepmoins if n_elements(sepmoins) NE 1 then $ separator = [replicate('-', n_elements(sepmoins)-1), '+'] ELSE $ separator = ['+'] if n_elements(sepplus) GT 1 then $ for i = 1, n_elements(sepplus)-1 do begin sepmoins = str_sep(sepplus[i], '-', /trim) singleread = [singleread, sepmoins] if n_elements(sepmoins) NE 1 then $ separator = [separator, replicate('-', n_elements(sepmoins)-1), '+'] ELSE $ separator = [separator, '+'] ENDFOR separator = [firstsign, separator] ; numberofread = n_elements(singleread) ; cas simple ou il n''y a qu''un champ a lire... if numberofread EQ 1 and isnumber(singleread[0]) GE 1 then begin coef = '' numberofread = 1 operation = '' nameexp = '???' separator = '' add = separator[0]+singleread[0] return endif ; ; les dernier element de singleread est-il un ordre de lecture ou une ; constant a ajouter ??? ; if isnumber(singleread[numberofread-1]) GE 1 then begin add = separator[numberofread-1]+singleread[numberofread-1] singleread = singleread[0:numberofread-2] numberofread = numberofread-1 ENDIF ELSE add = '' ; IF toread GE numberofread then begin rien = report('toread ne peut etre + grand que numberofread') return ENDIF ; ; for i = 0, n_elements(singleread)-1 do print, separator[i], ' ', singleread[i] ; pieceofread = singleread[toread] separator = separator[toread] ; case 1 of strpos(pieceofread, '*') NE -1:operation = '*' strpos(pieceofread, '/') NE -1:operation = '/' ELSE:operation = '' ENDCASE if operation NE '' then begin finalread = str_sep(pieceofread, operation, /trim) coef = finalread[0] nameexp = finalread[1] ENDIF ELSE BEGIN if toread EQ 0 AND firstsign EQ '-' then begin coef = '-1' operation = '*' ENDIF ELSE coef = '' nameexp = pieceofread ENDELSE ; ; return end