Changeset 69 for trunk/ToBeReviewed/WIDGET/AUTOUR_de_XXX/cutcmd.pro
- Timestamp:
- 05/11/06 12:35:53 (18 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/ToBeReviewed/WIDGET/AUTOUR_de_XXX/cutcmd.pro
r68 r69 1 PRO cutc ommand, widcommand, toread, coef, numberofread, operation, nameexp, separator, add1 PRO cutcmd, widcmd, toread, numberofread, prefix, nameexp, ending 2 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 3 dummy = where(byte(widcmd) EQ (byte('"'))[0], nbdblquote) 4 CASE 1 OF 5 nbdblquote MOD 2: stop ; odd numbers are impossibles... 6 nbdblquote GT 0: 7 nbdblquote EQ 0:BEGIN 8 ; widcmd is an expression of type: 9 ; numb1*a + numb2*b ... + numb 10 ; we will change into the form 11 ; numb1*"a" + numb2*"b" ... + numb 12 ; in order to suits the new method of cutcmd 13 widcmd = strtrim(widcmd, 2) 14 ; we force to start with a + or - 15 case 1 of 16 strpos(widcmd, '+') EQ 0: 17 strpos(widcmd, '-') EQ 0: 18 ELSE:widcmd = '+' + widcmd 19 ENDCASE 20 separator = strsplit(widcmd, '[^-/*+]', /extract, /regex) 21 other = strsplit(widcmd, '+-*/', /extract) 22 IF n_elements(separator) NE n_elements(other) THEN stop 23 widcmd = '' 24 FOR i = 0, n_elements(other)-1 DO BEGIN 25 IF isnumber(other[i]) LT 1 THEN other[i] = '"' + other[i] + '"' 26 widcmd = widcmd + separator[i] + other[i] 27 ENDFOR 28 ; print, widcmd 29 END 30 ENDCASE 31 32 cutted = strsplit(widcmd, '"', /extract) 33 IF strpos(widcmd, '"') EQ 0 THEN start = 0 ELSE start = 1 34 nameexp = cutted[start:*:2] 35 numberofread = n_elements(nameexp) 36 IF toread GE numberofread then begin 37 dummy = report('toread cannot be larger than numberofread') 38 stop 39 ENDIF 40 other = cutted[1-start:*:2] 41 ; make sure that we have a prefix for each nameexp 42 IF start EQ 0 THEN other = ['', other] 6 43 ; 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] 44 nameexp = nameexp[toread] 45 prefix = other[toread] 46 IF n_elements(other) EQ numberofread + 1 THEN ending = other[numberofread] ELSE ending = '' 35 47 ; 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 48 ;help, prefix, nameexp, ending 47 49 ; 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 50 return 86 51 end
Note: See TracChangeset
for help on using the changeset viewer.