From: Nala Ginrut <nalaginrut@gmail.com>
To: Adam Faiz <adam.faiz@disroot.org>
Cc: guile-devel@gnu.org, Ricardo Wurmus <rekado@elephly.net>,
Maxime Devos <maximedevos@telenet.be>
Subject: Re: [PATCH v1] rdelim: Add new procedure `for-line-in-file`.
Date: Mon, 16 Dec 2024 12:55:11 +0900 [thread overview]
Message-ID: <CAPjoZodxtoUVo6ZDQYryMnp38n8OSyLkT5GYMF6-9s-tFKXS1g@mail.gmail.com> (raw)
In-Reply-To: <7e7993ce-f238-fd3f-393b-7eeeec526bfc@disroot.org>
[-- Attachment #1: Type: text/plain, Size: 1943 bytes --]
Hi Adam!
I was confused with the name "file" here since it acts more like a port
rather than a filename. If it's expected to be a opened port passed from
the caller, it's better rename to "port".
In your context, I think you want to check if it's the end of file, so you
may use eof-object?
To make your patch more useful, IMHO, you may support filename string and
file port both. And close the port properly when it's end.
Best regards.
On Mon, Dec 16, 2024, 12:06 Adam Faiz <adam.faiz@disroot.org> wrote:
> From 3c7e1af1f4812d0e4c5d10e841cf9546e5ba2887 Mon Sep 17 00:00:00 2001
> From: AwesomeAdam54321 <adam.faiz@disroot.org>
> Date: Sun, 15 Dec 2024 23:48:30 +0800
> Subject: [PATCH v1] rdelim: Add new procedure `for-line-in-file`.
>
> * module/ice-9/rdelim.scm (for-line-in-file): Add it.
>
> This procedure makes it convenient to do per-line processing of a text
> file.
> ---
> module/ice-9/rdelim.scm | 12 +++++++++++-
> 1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/module/ice-9/rdelim.scm b/module/ice-9/rdelim.scm
> index d2cd081d7..833639219 100644
> --- a/module/ice-9/rdelim.scm
> +++ b/module/ice-9/rdelim.scm
> @@ -23,7 +23,8 @@
> ;;; similar to (scsh rdelim) but somewhat incompatible.
>
> (define-module (ice-9 rdelim)
> - #:export (read-line
> + #:export (for-line-in-file
> + read-line
> read-line!
> read-delimited
> read-delimited!
> @@ -206,3 +207,12 @@ characters to read. By default, there is no limit."
> line)
> (else
> (error "unexpected handle-delim value: " handle-delim)))))
> +
> +(define (for-line-in-file file proc)
> + "Call PROC for every line in FILE until the eof-object is reached.
> +The line provided to PROC is guaranteed to be a string."
> + (while #t
> + (let ((line (read-line file)))
> + (if (string? line)
> + (proc line)
> + (break)))))
> --
> 2.41.0
>
>
[-- Attachment #2: Type: text/html, Size: 2657 bytes --]
prev parent reply other threads:[~2024-12-16 3:55 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-16 3:05 [PATCH v1] rdelim: Add new procedure `for-line-in-file` Adam Faiz
2024-12-16 3:55 ` Nala Ginrut [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAPjoZodxtoUVo6ZDQYryMnp38n8OSyLkT5GYMF6-9s-tFKXS1g@mail.gmail.com \
--to=nalaginrut@gmail.com \
--cc=adam.faiz@disroot.org \
--cc=guile-devel@gnu.org \
--cc=maximedevos@telenet.be \
--cc=rekado@elephly.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).