guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How to read from a file


From: Cecil Westerhof
Subject: Re: How to read from a file
Date: Fri, 18 Jun 2010 18:21:40 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)

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

[Prev in Thread] Current Thread [Next in Thread]