Overview
Comment: | Added snippets to txtdb that disentangle bits n pieces of xml from gnumeric file |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | dev |
Files: | files | file ages | folders |
SHA1: |
b8bf0ef6c45868b758a7c70944988543 |
User & Date: | matt on 2013-07-14 00:45:45 |
Other Links: | branch diff | manifest | tags |
Context
2013-07-14
| ||
02:19 | Extracting sheets to txtdb now works check-in: 81649543cf user: matt tags: dev | |
00:45 | Added snippets to txtdb that disentangle bits n pieces of xml from gnumeric file check-in: b8bf0ef6c4 user: matt tags: dev | |
00:10 | Added snippets to txtdb that disentangle bits n pieces of xml from gnumeric file check-in: d5b4f70c2b user: matt tags: dev | |
Changes
Modified txtdb/txtdb.scm from [890ea3efe1] to [9e703b192e].
︙ | ︙ | |||
14 15 16 17 18 19 20 | ;; Read a non-compressed gnumeric file (define (txtdb:read-gnumeric-xml fname) (with-input-from-file fname (lambda () (ssax:xml->sxml (current-input-port) '())))) | < < < < < < < < < < < < < | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | ;; Read a non-compressed gnumeric file (define (txtdb:read-gnumeric-xml fname) (with-input-from-file fname (lambda () (ssax:xml->sxml (current-input-port) '())))) (define (find-section dat section #!key (depth 0)) (let loop ((hed (car dat)) (tal (cdr dat))) (if (list? hed) (let ((res (find-section hed section depth: (+ depth 1)))) (if res res (if (null? tal) #f (loop (car tal)(cdr tal))))) (if (eq? hed section) tal (if (null? tal) #f (loop (car tal)(cdr tal))))))) (define (sheet->txtdb dat) (let ((at-info (find-section dat '@)) ;; misc info about the sheet (sheet-name (find-section dat 'http://www.gnumeric.org/v10.dtd:Name)) (cells (find-section dat 'http://www.gnumeric.org/v10.dtd:Cells))) (print "sheet-name: " sheet-name) (print "Rownum\tColnum\tType\tValue") (for-each (lambda (cell) (let ((rownum (string->number (car (find-section cell 'Row)))) (colnum (string->number (car (find-section cell 'Col)))) (valtype (let ((res (find-section cell 'ValueType))) (if res (car res) #f))) (value (let ((res (cdr (filter (lambda (x)(not (list? x))) cell)))) (if (null? res) "" (car res))))) (print rownum "\t" colnum "\t" valtype "\t" value))) cells))) (define (extract-txtdb dat) (let ((sheets (find-section dat 'http://www.gnumeric.org/v10.dtd:Sheets))) (for-each (lambda (sheet) (sheet->txtdb sheet)) sheets))) #| (define x (txtdb:read-gnumeric-xml "testdata-stripped.xml")) ;; Write out sxml (with-output-to-file "testdata.sxml" (lambda()(pp x))) ;; (serialize-sxml a output: "new.xml") (with-output-to-file "testdata-stripped.xml" (lambda ()(print (sxml-serializer#serialize-sxml y)))) ;; Read in sxml file (with-input-from-file "testdata.sxml" (lambda ()(set! y (read)))) (find-section x 'http://www.gnumeric.org/v10.dtd:Workbook) (define sheets (find-section x 'http://www.gnumeric.org/v10.dtd:Sheets)) (define sheet1 (car sheets)) (define cells-sheet1 (find-section sheet1 'http://www.gnumeric.org/v10.dtd:Cells)) (map (lambda (c)(find-section c 'Row)) cells-sheet1) (for-each (lambda (cell) (let* ((len (length cell)) (row (car (find-section cell 'Row))) (col (car (find-section cell 'Col))) (val (let ((res (cdr (filter (lambda (x)(not (list? x))) cell)))) (if (null? res) "" (car res))))) (print "Row=" row " col=" col " val=" val))) cells-sheet1) (map (lambda (c)(filter (lambda (x)(not (list? x))) c)) cells-sheet1) |# |