Hallo ,
Wie kann ich aus einen String die eingegebene Zeichenkette nacheinander aus werten .
Also Buchstabe eins dan zwei dan drei usw.
Grüße Jan
Du bist in Begriff, Forum64 zu verlassen, um auf die folgende Adresse weitergeleitet zu werden:
Bitte beachte, dass wir für den Inhalt der Zielseite nicht verantwortlich sind und unsere Datenschutzbestimmungen dort keine Anwendung finden.
letzter Beitrag von Hexworx am
Hallo ,
Wie kann ich aus einen String die eingegebene Zeichenkette nacheinander aus werten .
Also Buchstabe eins dan zwei dan drei usw.
Grüße Jan
Da gibt es natürlich eimal die Methode mit ASC(MID$())
Oder man berechnet die Stringadresse und arbeitet dann Garbage-Collection frei mit PEEK.
Schönen Gruß.
Hier noch mal die Antwort, wie man die Stringadresse berechnet:
Das Beispiel zeigt das Auslesen des Strings a$.
Beschreiben kann man den String dann natürlich mit poke.
0 :a$="12345"
1 :a=peek(34+(a$<""))+peek(35+(a$<""))*256
2 :fori=atoa+len(a$)-1:printpeek(i);:next
Das zweite Beispiel zeigt, wie man einen String als Maschinencode ausführen kann.
0::a$=chr$(96):rem--string-sys(a$)
10 :syspeek(34+(a$<""))+peek(35+(a$<""))*256
Man kann damit also Maschinencode z.B. aus Data-Zeilen in einem String packen und ausführen.
Schönen Gruß.
Hallo Junior,
Die Antwort von Markus ist absolut zutreffend.
Bitte lass dich nicht auf BIF ein, denn der geht gern komplizierte Umwege, die für dich absolut nicht zielführend sind.
Mid$ ist für den Anfang mehr als ausreichend, und auch später wirst du Wege finden die deutlich besser sind als das was BIF hier anbietet.
Das wird dir hier so ziemlich jeder bestätigen.
Ok ,danke erstmal mit dem mid$ hat alles geklappt .danke !
Halb-OT:
Die String Funktionen wie LEFT(), RIGHT(), MID(), LEN() und andere String-Funktionen z.B. zum Suchen von Teilstrings in anderen, besseren Programmiersprachen und BASIC-Dialekten sind gute Grundlagen, falls Du später mal in einer anderen Programmiersprachen was machen wirst. Stringfunktionen gibt es in ähnlicher Form in den meisten höheren Programmiersprachen.
Wenn Du die mal in BASIC kapiert hast, wirst Du später automatisch was Ähnliches suchen.
So schwierig ist das gar nicht.
Und im Prinzip sogar sehr logisch und zudem ohne Gefahr der Stringaufräumung und sogar schneller.
Schönen Gruß.
BladeRunner:
Für Assenblerprogrammierer wie dich bietet der Trick die Gelegenheit auch Assemblerlösungen zu posten.
Sofern du dich beteiligen willst.
Schönen Gruß.
Es wurde nach Auswertung von Stringketten gefragt. Ihm wurde die Lösung geboten die sich anbietet - Mid$ wurde genau für solche Zwecke in BASIC integriert.
Es wurde weder nach Peek-Gefrickel gefragt, was der Fragesteller ob seiner Nicht-Erfahrung mit dem Programmieren am C64 auch nicht gebrauchen kann noch nach dem (fragwürdigen) Ausführen von MaschinenCode per String.
Das übliche BIFsche Gebastel hilft hier nicht, es verwirrt, stört, geht an der Fragestellung vorbei und ist fehleranfällig für Einsteiger wie unseren Junior.
Es wurde auch nicht nach "Tricks" gefragt, und ich werde mich hüten hier irgendein Assemblerprogramm reinzupflegen, wo die Antwort auf die gestellte Frage so einfach auf der Hand liegt - ganz ohne Tricks.
Nochmal, C64 Junior: Hüte Dich vor BIF und seinen "Tricks".
So schwierig ist das gar nicht.
Und im Prinzip sogar sehr logisch und zudem ohne Gefahr der Stringaufräumung und sogar schneller.
Schönen Gruß.
Aus dem Wiki abgewandelt:
vs:
Also ich glaube mal nicht, daß
if peek(i)then:
komplizierter ist, als
if asc(mid$(a$,i,1)then:
Da muß man ebso trixen.
Und weil das mit dem peek einfacher ist, geht es auch schneller.
Schönen Gruß.
Nur ein Hinweis: Bei String-Operationen läuft die Garbage Collection allmählich voll und BASIC wird irgendwann sehr langsam, siehe auch:
https://www.c64-wiki.de/index.php/Garbage_Collection
@Ryk:
Das kann möglicherweise sein, falls man viele Strings benutzt, wie z.B. ein String-Feld.
Mit peek hat man das Problem jedenfalls nicht, da peek rein numerisch arbeitet.
Schönen Gruß.
An der peek-Lösung stört mich nur eins: Die wird auf anderen Basic-Versionen nicht ohne Anpassung laufen.
Selbst auf den C64 mit Business Basic halte ich das erst einmal für nicht selbstverständlich...Wobei Business Basic auf dem C64 echt der Hammer ist: 61183 Bytes frei und dazu eine schnelle Garbage Collection. Und obendrein noch eine Basic-Erweiterung.
Ich denke auch dass es zum Lernen der Sprache am Sinnvollsten ist die innewohnenden Konstrukte kennen zu lernen. Wenn man damit an Grenzen stößt kann man langsam anfangen diese zu brechen. Aber die erste Lernphase zu überspringen ist nicht zielführend. Eine Garbage Collection kann in der Tat zum Problem werden, aber bis Junior da dran stösst wird es wohl ein bissel brauchen.
Eine Garbage Collection kann in der Tat zum Problem werden
So ist es. Und wenn die doch mal zum Problem wird, ist es am einfachsten, eine schnelle Garbage Collection Routine zu installieren. Dann braucht man sich auch nicht umgewöhnen oder die Kompatibilität zu anderen Basicversionen leiden lassen.
Ich denke auch dass es zum Lernen der Sprache am Sinnvollsten ist die innewohnenden Konstrukte kennen zu lernen.
So ist es.
Je nach Zweck kann GC auch schon beim ersten Projekt ein Problem werden. Beispiel Adventure Game Interpreter mit String-Operationen, das ist ja nunmal einer der Klassiker, für die man überhaupt String-operationen dieser Art nutzt, einen schlauen Rat habe ich aber auch nicht, BIF's PEEK-"Trick" scheint overkill als Rat für Beginner und außerdem nicht gerade universell hilfreich, String-Vermeidung (my personal favorite) führt dann schnell zum Gedanken: "Wozu dann überhaupt BASIC?" und zur ketzerischen Antwort "Eben -> Lern Assembler" Sorry...
Aber kein Grund, gleich alles Korn in die Flinte zu werfen oder den Sand in den Kopf zu stecken, leg einfach mal mit MID$ los, wenn das nicht tut, merkt man das schon früh genug
Das finde ich auch eine gute Einstellung. Yep, zuerst die Grundlagen verstehen.
"Grundlagen verstehen" ist schön und gut, aber man sollte rechtzeitig den Absprung von Basic 2 schaffen...
Besser is es.
Vor dem "Absprung" würde ich mir mal BASIC Compiler reinziehen, da kriegt man dann schon einen kleinen Eindruck, was in Assembler alles möglich ist, was in BASIC nicht oder nur endlahm geht.
https://www.c64-wiki.de/index.php/Compiler
Aber lass dich nicht irritieren, mach dein BASIC Ding