Add new attachment

Only authorized users are allowed to upload new attachments.

List of attachments

Kind Attachment Name Size Version Date Modified Author Change note
png
forth-string.png 12.4 kB 2 08-Aug-2010 15:36 Carsten Strotmann
png
zero-term-string.png 13.2 kB 1 08-Aug-2010 15:46 Carsten Strotmann

This page (revision-5) was last changed on 08-Aug-2010 15:58 by Carsten Strotmann  

This page was created on 08-Aug-2010 15:29 by Carsten Strotmann

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Difference between version and

At line 7 added 102 lines
[{Image src='forth-string.png' align='center'}]
So sieht der String FORTH an der Adresse addr im Speicher unter FORTH aus.
* [."|dot-string]
* ["|string]
* [,"|compile-string]
* [nullstring?|nullstring-question]
* ["lit|quote-literal]
* [.(|dot-comment]
* [(|comment]
* [)|end-comment] - dies ist kein Forth Wort, sondern ein Stoppzeichen
!!String-Manipulationen
Hier im Glossar bezeichnet der Stackkommentar ( string -- ) die Adresse eines counted Strings, dagegen ( addr len -- ) die Charakterisierung durch die Anfangsadresse der Zeichenkette und ihre Länge.
Keine Stringvariable? - Benutze:
{{{
: String: Create dup , 0 c, allot DOES> 1+ count ;
}}}
* [caps]
* [capital]
* [upper]
* [capitalitze]
* [/string|cut-string]
* [-trailing|minus-trailing]
* [scan]
* [skip]
* [?"|question-quote]
* [bounds]
* [type]
* [>type|to-type]
* [place]
* [attach]
* [append]
* [detract]
* [match]
* [search]
!! Im Dictionary
* [(find|paren-find]
* [find]
!!0-terminated Strings
Es gibt noch eine andere Darstellungsform für Strings, die beispielsweise für MS-DOS geeigneter ist. Diese Strings werden zwar ebenfalls durch eine Adresse gekennzeichnet; diese Adresse enthält aber kein count byte. Statt dessen werden diese Zeichenketten mit einem Nullbyte abgeschlossen.
[{Image src='zero-term-string.png' align='center'}]
* [asciz]
* [>asciz|to-asciz]
* [counted]
!! Konvertierungen: Strings -- Zahlen
!String in Zahlen wandeln
* [digit?|digit-question]
* [accumulate]
* [convert]
* [number?|number-question?]
* [number]
* [dpl]
Ein Beispiel der Umwandlung von Zeichen in Zahlen:
In FORTH wird die Eingabe von Zahlen oft mit der allgemeinen Texteingabe und über die Befehle zur Umwandlung von Strings in Zahlen realisiert. In der Literatur wird dazu oft diese Lösung mit __QUERY__ angeboten:
{{{
: in# ( string -- d tf n tf addr ff )
query bl word number? ;
}}}
Diese Lösung ist ungünstig, da __QUERY__ den __TIB__ löscht. Zugleich stellt die Definition von __NUMBER?__ eine unglückliche Stelle im volksFORTH dar. Es gibt im Laxen&Perry-F83 ein Wort gleichen Namens, das ganz anders (besser!) mit den Parametern umgeht. Hier folgt die Definition des F83-NUMBER?, das auf dem volksFORTH __NUMBER?__ aufbaut:
{{{
: F83-NUMBER? ( string -- d f )
number? ?dup IF 0< IF extend THEN true exit THEN
drop 0 0 false ;
}}}
Damit stellt das Wort __INPUT#__ eine wenig aufwendige Zahleneingabemöglichkeit für 16/32Bit-Zahlen dar:
{{{
\ input#
: input# ( string -- d f )
pad c/l 1- >expect \ get 63 char maximal
pad F83-number? ; \ convert string->number
}}}
So kann der Anwender das übergebene Flag auswerten und die doppelt-genaue Zahl entsprechend seinen Vorstellungen einsetzen, im einfachsten Fall mit DROP zu einer einfachgenauen Zahl machen.
!Zahlen in Strings wandeln
* [#|number]
* [#s|number-s]
* [hold]
* [sign]
* [#>|number-greater]
Version Date Modified Size Author Changes ... Change note
5 08-Aug-2010 15:58 4.012 kB Carsten Strotmann to previous
4 08-Aug-2010 15:47 2.408 kB Carsten Strotmann to previous | to last
3 08-Aug-2010 15:46 2.354 kB Carsten Strotmann to previous | to last
2 08-Aug-2010 15:34 1.085 kB Carsten Strotmann to previous | to last
1 08-Aug-2010 15:29 1.035 kB Carsten Strotmann to last
« This page (revision-5) was last changed on 08-Aug-2010 15:58 by Carsten Strotmann