[q-lang-cvs] qcalc qcalc.q,1.69,1.70
                
                Brought to you by:
                
                    agraef
                    
                
            
            
        
        
        
    | 
      
      
      From: Albert G. <ag...@us...> - 2007-11-04 00:10:43
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv30279 Modified Files: qcalc.q Log Message: generalize code handling alphabetic column indices Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.69 retrieving revision 1.70 diff -C2 -d -r1.69 -r1.70 *** qcalc.q 3 Nov 2007 23:22:56 -0000 1.69 --- qcalc.q 4 Nov 2007 00:10:38 -0000 1.70 *************** *** 305,308 **** --- 305,317 ---- = (S,fformat S) otherwise; + colno C = pred $ foldl ((+).(*26)) 0 $ map cno $ chars C; + cno C = C-"A"+1; + + colstr N = strcat $ reverse ["A"+X|map (("A"+).pred) L] + where [X|L] = qadic 26 N; + = "A" otherwise; + + qadic B N = list $ map (mod B) $ takewhile (>0) $ iterate (div B) N; + // manage defaults *************** *** 729,735 **** = updatemsg (I,J) if global; ! updatemsg (I,J) = statusmsg $ sprintf "%s%d = %s" ("A"+J,I+1,S) where (S,_,_) = get EVAL!(I,J); ! = statusmsg $ sprintf "%s%d" ("A"+J,I+1) otherwise; --- 738,744 ---- = updatemsg (I,J) if global; ! updatemsg (I,J) = statusmsg $ sprintf "%s%d = %s" (colstr J,I+1,S) where (S,_,_) = get EVAL!(I,J); ! = statusmsg $ sprintf "%s%d" (colstr J,I+1) otherwise; *************** *** 1595,1599 **** // header row (cons "<td></td>" ! [sprintf "<td><b>%s</b></td>" ("A"+J) : J in [J1..J2]]) // body [// header column --- 1604,1608 ---- // header row (cons "<td></td>" ! [sprintf "<td><b>%s</b></td>" (colstr J) : J in [J1..J2]]) // body [// header column *************** *** 1916,1920 **** xlat (DI,DJ) S = " " if take 2 S="//"; = S if take 1 S="\""; ! = S where S = regsub "" "^([$]?[A-Z])([$]?[0-9]+)$" S (shift (DI,DJ) (reg 1,reg 2)); --- 1925,1929 ---- xlat (DI,DJ) S = " " if take 2 S="//"; = S if take 1 S="\""; ! = S where S = regsub "" "^([$]?[A-Z][A-Z]?)([$]?[0-9]+)$" S (shift (DI,DJ) (reg 1,reg 2)); *************** *** 1923,1927 **** where ABSR = (hd R="$"), ABSC = (hd C="$"), R = if ABSR then R else str (max 1 (val R+DI)), ! C = if ABSC then C else "A"+(max 0 (C-"A"+DJ)); /* Parsing of cell formulas. The original formula text is mostly preserved, --- 1932,1936 ---- where ABSR = (hd R="$"), ABSC = (hd C="$"), R = if ABSR then R else str (max 1 (val R+DI)), ! C = if ABSC then C else colstr (max 0 (colno C+DJ)); /* Parsing of cell formulas. The original formula text is mostly preserved, *************** *** 1965,1972 **** = S if take 1 S="\""; = S where S = regsub "g" "::" S "__yyqual__", ! S = regsub "" "^[$]?([A-Z])[$]?([0-9]+)$" S (reg 1++reg 2), S = regsub "" ! "^[$]?([A-Z])[$]?([0-9]+):[$]?([A-Z])[$]?([0-9]+)$" S (sprintf "%s__yy__%s" (reg 1++reg 2,reg 3++reg 4)); --- 1974,1981 ---- = S if take 1 S="\""; = S where S = regsub "g" "::" S "__yyqual__", ! S = regsub "" "^[$]?([A-Z][A-Z]?)[$]?([0-9]+)$" S (reg 1++reg 2), S = regsub "" ! "^[$]?([A-Z][A-Z]?)[$]?([0-9]+):[$]?([A-Z][A-Z]?)[$]?([0-9]+)$" S (sprintf "%s__yy__%s" (reg 1++reg 2,reg 3++reg 4)); *************** *** 1991,2003 **** if isvar X: = [(I,J)] ! where [(C,R)] = regex "" "^([A-Z])([0-9]+)$" (strq 'X) (reg 1,reg 2), ! J:Int = ord C-ord "A", I:Int = val R-1; = [(I,J) : I in [I1..I2], J in [J1..J2]] where [(C1,R1,C2,R2)] = ! regex "" "^([A-Z])([0-9]+)__yy__([A-Z])([0-9]+)$" (strq 'X) (reg 1,reg 2,reg 3,reg 4), ! J1:Int = ord C1-ord "A", I1:Int = val R1-1, ! J2:Int = ord C2-ord "A", I2:Int = val R2-1; otherwise: = []; --- 2000,2012 ---- if isvar X: = [(I,J)] ! where [(C,R)] = regex "" "^([A-Z][A-Z]?)([0-9]+)$" (strq 'X) (reg 1,reg 2), ! J:Int = colno C, I:Int = val R-1; = [(I,J) : I in [I1..I2], J in [J1..J2]] where [(C1,R1,C2,R2)] = ! regex "" "^([A-Z][A-Z]?)([0-9]+)__yy__([A-Z][A-Z]?)([0-9]+)$" (strq 'X) (reg 1,reg 2,reg 3,reg 4), ! J1:Int = colno C1, I1:Int = val R1-1, ! J2:Int = colno C2, I2:Int = val R2-1; otherwise: = []; *************** *** 2014,2026 **** if isvar X: = cellval (I,J) ! where [(C,R)] = regex "" "^([A-Z])([0-9]+)$" (strq 'X) (reg 1, reg 2), ! J:Int = ord C-ord "A", I:Int = val R-1; = make_range (I1,I2) (J1,J2) where [(C1,R1,C2,R2)] = ! regex "" "^([A-Z])([0-9]+)__yy__([A-Z])([0-9]+)$" (strq 'X) (reg 1,reg 2,reg 3,reg 4), ! J1:Int = ord C1-ord "A", I1:Int = val R1-1, ! J2:Int = ord C2-ord "A", I2:Int = val R2-1; otherwise: = 'X; --- 2023,2035 ---- if isvar X: = cellval (I,J) ! where [(C,R)] = regex "" "^([A-Z][A-Z]?)([0-9]+)$" (strq 'X) (reg 1, reg 2), ! J:Int = colno C, I:Int = val R-1; = make_range (I1,I2) (J1,J2) where [(C1,R1,C2,R2)] = ! regex "" "^([A-Z][A-Z]?)([0-9]+)__yy__([A-Z][A-Z]?)([0-9]+)$" (strq 'X) (reg 1,reg 2,reg 3,reg 4), ! J1:Int = colno C1, I1:Int = val R1-1, ! J2:Int = colno C2, I2:Int = val R2-1; otherwise: = 'X; |