;;; pregexp9.scm -
; extract all lines in a file that match a regex and write them to another file
; uses precompile regex, will save some time, but still very, very slow
; uses Dr. Scheme's pre-compiled library regexes
(define-macro do-list
(lambda (var listform . body)
(let (( g (gensym) ))
`(DO ((,g ,listform (CDR ,g))
(,var '()))
((NULL? ,g))
(SET! ,var (CAR ,g))
,@body))))
(define (open-output-file-writeover out-file)
(if (file-exists? out-file)
(delete-file out-file))
(open-output-file out-file)
)
(define (match-lines-to-file pattern in-port out-port)
(do ((line " " (read-line in-port))
(i 0 (+ i 1)))
((eof-object? line) #t)
(let ((answer (regexp-match pattern line)))
(if (not answer)
'()
(display (format "~%~A:~A" i line) out-port) ))))
;-----------------------------------------------------------------------
; run program
; example1
;(define out-file "adieu_de_sucy.txt")
;(define in-file "adieu10.txt")
;(define pattern "de Sucy")
;(define out-port (open-output-file-writeover out-file))
;(define in-port (open-input-file in-file))
;(match-lines-to-file pattern in-port out-port)
;(close-input-port in-port)
;(close-output-port out-port)
; example2
;(define dir "c:\\balzac\\balzacbooksnofront\\")
;(do-list item (directory-list dir)
; (display (format "~%~a" item)))
; example3
(define out-file "adieu_de_sucy.txt")
(define in-file "adieu10.txt")
; pre-compile regexp before using it.
(define pattern (regexp "de Sucy"))
(define out-port (open-output-file-writeover out-file))
(define dir "c:\\balzac\\balzacbooksnofront\\")
(do-list file (directory-list dir)
(let ( (in-port (open-input-file in-file)) )
(match-lines-to-file pattern in-port out-port)
(close-input-port in-port)
)
)
(close-output-port out-port) Text file Source (historic): geocities.com/soho/square/3472
geocities.com/soho/squaregeocities.com/soho
(to report bad content: archivehelp @ gmail)
|
|
|
|
|