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

Reply via email to