gforth
[Top][All Lists]
Advanced

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

Re: Split a string and characters


From: Zelphir Kaltstahl
Subject: Re: Split a string and characters
Date: Sun, 4 Dec 2022 19:15:33 +0000

On 12/4/22 19:45, Bernd Paysan wrote:
Am Sonntag, 4. Dezember 2022, 13:11:18 CET schrieb Zelphir Kaltstahl:
Hello GForth users!

Forth beginner here. I have a little program, in which I read a file line by
line using a line-buffer as follows:

~~~~

: input-filename s" input" ;

256 Constant max-bytes-line
Create line-buffer max-bytes-line 2 + allot
input-filename r/o open-file throw Value puzzle-input-handle

: total-score ( c-addr length -- ??? )

    0  \ accumulator value for score
    begin puzzle-input-handle file-eof? not
    while
      \ read lines until the file has been completely processed
      line-buffer max-bytes-line puzzle-input-handle read-line throw

      \ check that everything was read OK from the line buffer
      swap dup 0 > rot and

      if
        line-buffer swap  \ acc c-addr length
...
~~~~

It took me quite a while to figure out how to read a file line by line and
do something with each line, but ultimately I managed to find this way : )
Would be great, if there were more readable examples out there or in the
manual though.

Having the line in line-buffer, I now need to split the string at a space
character:

~~~~
s"  "
~~~~

But that is another string and I am not sure that qualifies as a character.
BL is the word you are looking for, the one that returns a space character.

And you want to

require string.fs

in gforth-0.7.3 to get $SPLIT defined (or start gforth with string.fs as
argument).
Ah, thank you! That works!
Also $split is not available in GForth 0.7.3 and neither is string-split:

~~~~
$ gforth
Gforth 0.7.3, Copyright (C) 1995-2008 Free Software Foundation, Inc.
Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license'
Type `bye' to exit
gforth-0.7.3> ./gforth string.fs
Gforth 0.7.3, Copyright (C) 1995-2008 Free Software Foundation, Inc.
Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license'
Type `bye' to exit
s" foo bla" bl $split   ok
type bla ok
type foo ok

The Gforth manual on gforth.org is the upcoming Gforth 1.0 manual, so it
contains features that weren't available in Gforth 0.7.3, or only available as
loadable files.

OK, I will keep that in mind : )

Thank you!
Regards,
Zelphir

--
repositories: https://notabug.org/ZelphirKaltstahl




reply via email to

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