Overview
Comment: | Closer |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | dev |
Files: | files | file ages | folders |
SHA1: |
cc4d26222410bd5b7c645c6d65ad7df0 |
User & Date: | matt on 2013-07-14 16:25:31 |
Other Links: | branch diff | manifest | tags |
Context
2013-07-14
| ||
17:22 | Closer check-in: a1e941a7b1 user: matt tags: dev | |
16:25 | Closer check-in: cc4d262224 user: matt tags: dev | |
14:39 | Oops. Went down a messy road. Snapshot this point in time. check-in: bdf18ad3a8 user: matt tags: dev | |
Changes
Modified txtdb/txtdb.scm from [6cd63ce3c8] to [2a05c3812f].
︙ | ︙ | |||
120 121 122 123 124 125 126 127 128 129 130 131 132 133 | sheet-name)) (define (sxml->file dat fname) (with-output-to-file fname (lambda () ;; (print (sxml-serializer#serialize-sxml dat)) (pp dat)))) ;; Write an sxml gnumeric workbook to a txtdb directory structure. ;; (define (extract-txtdb dat targdir) (create-directory (conc targdir "/sxml") #t) (let* ((wrkbk (find-section dat 'http://www.gnumeric.org/v10.dtd:Workbook)) (wrk-rem (remove-section dat 'http://www.gnumeric.org/v10.dtd:Workbook)) | > > > > > > > > | 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | sheet-name)) (define (sxml->file dat fname) (with-output-to-file fname (lambda () ;; (print (sxml-serializer#serialize-sxml dat)) (pp dat)))) (define (file->sxml fname) (let ((res (read-file fname read))) (if (null? res) (begin (print "ERROR: file " fname " is malformed for read") #f) (car res)))) ;; Write an sxml gnumeric workbook to a txtdb directory structure. ;; (define (extract-txtdb dat targdir) (create-directory (conc targdir "/sxml") #t) (let* ((wrkbk (find-section dat 'http://www.gnumeric.org/v10.dtd:Workbook)) (wrk-rem (remove-section dat 'http://www.gnumeric.org/v10.dtd:Workbook)) |
︙ | ︙ | |||
155 156 157 158 159 160 161 | (define (import-gnumeric-file fname targdir) (extract-txtdb (read-gnumeric-file fname) targdir)) ;; Write a gnumeric compressed xml spreadsheet from a txtdb directory structure. ;; (define (txtdb-export dbdir fname) | | | > | | | | 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 | (define (import-gnumeric-file fname targdir) (extract-txtdb (read-gnumeric-file fname) targdir)) ;; Write a gnumeric compressed xml spreadsheet from a txtdb directory structure. ;; (define (txtdb-export dbdir fname) (let* ((sxml-dat (txtdb->sxml dbdir)) (tmpf (create-temporary-file (pathname-strip-directory fname))) (tmpgzf (conc tmpf ".gz"))) (with-output-to-file tmpf (lambda () (print (sxml-serializer#serialize-sxml sxml-dat ns-prefixes: (list (cons 'gnm "http://www.gnumeric.org/v10.dtd")))))) (system (conc "gzip " tmpf)) (file-copy tmpgzf fname #t) (delete-file tmpgzf))) (define (hash-table-reverse-lookup ht val) (hash-table-fold ht (lambda (k v res)(if (equal? v val) k res)) #f)) (define (read-dat fname) (let ((section-rx (regexp "^\\[(.*)\\]\\s*$")) (comment-rx (regexp "^#.*")) ;; This means a cell name cannot start with # |
︙ | ︙ | |||
198 199 200 201 202 203 204 | (print "ERROR: Unrecognised line in input file " fname ", ignoring it") (loop (read-line inp) section res)))))))) (define (get-value-type val expressions) (cond ((string->number val) '(ValueType "40")) ((equal? (substring val 0 1) "=") | | | 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 | (print "ERROR: Unrecognised line in input file " fname ", ignoring it") (loop (read-line inp) section res)))))))) (define (get-value-type val expressions) (cond ((string->number val) '(ValueType "40")) ((equal? (substring val 0 1) "=") (let ((exid (hash-table-ref/default expressions val #f))) (if exid (list 'ExprID exid) (let* ((values (hash-table-keys expressions)) ;; note, values are the id numbers (new-max (+ 1 (if (null? values) 0 (apply max values))))) (hash-table-set! expressions val new-max) (list 'ExprID new-max))))) (else '(ValueType "60")))) |
︙ | ︙ | |||
226 227 228 229 230 231 232 | (list 'http://www.gnumeric.org/v10.dtd:Cell (list '@ val-type (list 'Row (conc row-num)) (list 'Col (conc col-num))) value))) dat))) (define (txtdb->sxml dbdir) (let* ((sht-names (read-file (conc dbdir "/sheet-names.cfg") read-line)) | | | | > | | > | 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 | (list 'http://www.gnumeric.org/v10.dtd:Cell (list '@ val-type (list 'Row (conc row-num)) (list 'Col (conc col-num))) value))) dat))) (define (txtdb->sxml dbdir) (let* ((sht-names (read-file (conc dbdir "/sheet-names.cfg") read-line)) (wrk-rem (file->sxml (conc dbdir "/sxml/workbook.sxml"))) (sht-rem (file->sxml (conc dbdir "/sxml/sheets.sxml"))) (sheets (fold (lambda (sheetname res) (let* ((sheetdat (read-dat (conc dbdir "/" sheetname ".dat"))) (cells (dat->cells sheetdat)) (sht-meta (file->sxml (conc dbdir "/sxml/" sheetname ".sxml")))) (cons (append (append sht-meta (list (list 'http://www.gnumeric.org/v10.dtd:Name sheetname))) cells) res))) '() sht-names))) (append wrk-rem (list (cons 'http://www.gnumeric.org/v10.dtd:Workbook (list (cons 'http://www.gnumeric.org/v10.dtd:Sheets sheets))))))) ;; (define ( ;; ;; optional apply proc to rownum colnum value ;; ;; NB// If a change is made to this routine please look also at applying |
︙ | ︙ |