Op vrijdag 18 jun 2010 16:31 CEST schreef Cecil Westerhof: > When looking at: > http://www.gnu.org/software/guile/docs/faq/OLD-guile-faq.html > > The following code should work: > #!/usr/bin/guile \ > -e main -s > !# > (use-modules (ice-9 readline)) > (activate-readline) > > (define (main args) > (let ((input-file (cadr args)) > (output-file (caddr args))) > (with-input-from-file input-file > (lambda () > (while (not (eof-object? (peek-char))) > (display (read-line)) > (newline)))))) > > But when executing it, I get: > ERROR: Unbound variable: read-line > > What am I doing wrong?
I found it: #!/usr/bin/guile \ -e main -s !# (use-modules (ice-9 readline)) (use-modules (ice-9 rdelim)) (activate-readline) (define (main args) (let ((input-file-name (cadr args)) (output-file-name (caddr args)) (input-file "") (output-file "") (this-line "")) (set! input-file (open-file input-file-name "r")) (set! output-file (open-file output-file-name "w")) (while (not (eof-object? (peek-char input-file))) (set! this-line (read-line input-file)) (write-line this-line output-file) ) (close-port output-file) (close-port input-file))) A file of 5.000.000 lines and 163 MB is processed in 26 seconds. At the moment it is just copying, but that is properly the most expensive part. There should be some error checking and the processing should be done, but that is the next step. Could this be done more efficient? By the way, it is not that bad. My Emacs Lisp code takes about two times as long. It does also a replace, but that will not take 50% of the time. So it looks like Guile has a good performance notwithstanding that it is said that Guile's IO performance is not very fast at the moment. It is about as fast as a Perl script. The problem with the Perl script is that it only works with ASCII. It goes wrong on files that contain other characters. That is why I at the moment use the Emacs Lisp script. I am wondering what will happen when Guile's IO performance becomes good. -- Cecil Westerhof Senior Software Engineer LinkedIn: http://www.linkedin.com/in/cecilwesterhof