Ignore:
Timestamp:
05/11/06 12:35:53 (18 years ago)
Author:
smasson
Message:

debug + new xxx

File:
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/ToBeReviewed/WIDGET/AUTOUR_de_XXX/cutcmd.pro

    r68 r69  
    1 PRO cutcommand, widcommand, toread, coef, numberofread, operation, nameexp, separator, add 
     1PRO cutcmd, widcmd, toread, numberofread, prefix, nameexp, ending 
    22; 
    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] 
    643; 
    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 = '' 
    3547; 
    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 
    4749; 
    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 
    8651end 
Note: See TracChangeset for help on using the changeset viewer.