my retarded escape from badly written logfiles added by C-Keen on Fri Sep 9 13:05:05 2011
(use data-structures srfi-13 srfi-1) ; parses lines like ; sintel_fps_30_res_352:288_lvl_2.1.mkv MEASURING total frames :1850, dropped frames: 1425. (define f (with-input-from-file "sintel.txt" read-lines)) (define-record measurement name fps resolution level total-frames dropped-frames) (define name-fields `("_" ((name 0) (fps 2) (resolution 4 ,(lambda (r) (let ((l (string-split r ":"))) (cons (string->number (car l)) (string->number (cadr l)))))) (level 6 ,(lambda (l) (string-take l 3)))))) (define result-fields `(" " ((#f 0 ,(lambda (f) (get-fields f name-fields))) (total-frames 4 ,(lambda (l) (string->number (string-filter char-set:digit l)))) (dropped-frames 7 ,(lambda (l) (string->number (string-filter char-set:digit l))))))) (define (get-fields line fields) (let ((line (string-split line (car fields)))) (let loop ((fs (second fields)) (res '())) (cond ((null? fs) (flatten (reverse res))) (else (let* ((f (car fs)) (n (car f)) (t (list-ref line (second f))) (c (and (= (length f) 3) ((third f) t))) (r (if n (list n (or c t)) (or c t)))) (loop (cdr fs) (cons r res)))))))) (define (field-ref name f) (cond ((member name f) => cadr) (else (error "No such field name " name)))) (print " (map (lambda (f) (get-fields f result-fields)) f)")