Strings und Memorybanks

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

mpreu

Betreff: Strings und Memorybanks

BeitragSa, Okt 19, 2013 10:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde gern einen String, gespeichert in einer Variablen in eine Bank schreiben, und dort aber auf die einzelnen Zeichen zugreifen wollen können, d.h. sie auch einzeln oder paarweise auslesen können.

Wie müsste ich da vorgehen?

p.s. Bevor ich es vergesse, ich möchte den String in einer bank speichern und weitestgehend auf Befehle wie Mid$ etc. verzichten wollen.

Eingeproggt

BeitragSa, Okt 19, 2013 10:42
Antworten mit Zitat
Benutzer-Profile anzeigen
PeekByte in weiterer Verbinung mit Chr wäre da wohl das Richtige.
Das setzt aber natürlich voraus, dass du die zu "peekende" Position weißt oder sie aus Ascii-Wert-Vergleichen heraus finden müsstest.

mfG, Christoph

EDIT: Achja, zum Schreiben des Strings in eine Bank wäre dann PokeByte zuständig. Musst du in einer Schleife für jedes Zeichen machen.
Und vergiss nicht, dir am Ende gut zu überlegen ob das ganze Gewurschtel dann wirklich besser is als Mid, Instr und Co Wink
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

PhillipK

BeitragSa, Okt 19, 2013 10:48
Antworten mit Zitat
Benutzer-Profile anzeigen
in anlehnung an Eingeproggts antwort:

Damit du die positionen weißt, könntest du anfangs eine art inhaltsliste schreiben, einfach nur zahlen.

Wichtig ist, das du eindeutig weißt, das ab einer bankposition nun strings kommen!
Alternativ, schreibe erst eine identifizierungszahl rein. Zb Byte 1 ist string, byte 2 ist int... damit du dich zurecht findest Wink

Sobald du weißt, das ein string kommt, schreibst du noch folgende sachen:
1: Anzahl der Zeilen deines Strings
2 bis 2+n: Beginn position einer jeden Zeile in der bank
Folgend: Zeichenwerte deiner Zeilen.

Nun musst du noch aufpassen, wie lang deine Zeilen sind, das könntest du alternativ in die "inhaltsliste" reinschreiben oder anderweitig rausfinden.


So kannst du die ersten paar stellen deiner bank raussuchen und gucken, was drinsteht. Bist du bei deinem wunschstring angekommen (oder du weißt zb durch eine variable, wo du anfangen musst zu suchen) kannst du jede Zeile wiederfinden die du haben willst.
Wichtig ist dann nurnoch, das du dich mit den indexzahlen nicht vertust Smile
 

mpreu

BeitragSa, Okt 19, 2013 10:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Also das Auslesen mit PeekByte ist mir klar.
Wie kann ich aber z.B. s$ = Hallo Du Welt" in einer Bank speichern und dann nur das Wort "Du" auslesen und dann in einer Variablen, sagen wir neu_s$ speichern?

Also im Großen ganzen wie Mid$, nur eben ohne Mid$.

Also ohne den Text zu kennen, sondern nur anhand Offset und Länge des zu kopierenden Textes.

Xeres

Moderator

BeitragSa, Okt 19, 2013 11:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kann mir nicht recht vorstellen, wie man in BB einen String zerteilen sollte, ohne von den String Funktionen Gebrauch zu machen. Oder warum man das wollen sollte... Schneller wirds damit bestimmt nicht.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
  • Zuletzt bearbeitet von Xeres am So, Okt 20, 2013 11:16, insgesamt einmal bearbeitet
 

Kruemelator

BeitragSa, Okt 19, 2013 11:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Du sagst du willst Mid() nicht benutzen aber etwas programmieren was GENAU das tut was Mid macht.

Strings in Banken abzulegen hat zwar Vorteile aber auch Nachteile.
Vorteile:
1. sehr schnell Buchstaben AUSTAUSCHEN! aber nicht einfügen oder anhängen
2. es ist möglich Banken "aneinander" zuhängen (Stichwort: Verkettet Liste)
3. man kann(muss) Banken als Referenz an Funktionen übergeben (Bank wird, egal wieoft du sie an Funktionen übergibst NIE kopiert)

Nachteile:
1. Banken müssen gelöscht werden wenn man sie nicht mehr braucht sonst ist irgendwann der Arbeitsspeicher voll
2. du kannst nicht mehr einfach "+" benutzen, wie bei Strings, um Texte aneinander zu hängen
3. Blitz Befehle nutze Strings, das heist du müsst jedesmal wieder hin- und herwandeln

Hier ein paar der Funktionen die man für Banken dann benötigt:
Erstellen()
Löschen()
Kopieren()
Zusammenfügen()
Einfügen()
AuslesenVonBis() das wäre als das selbe wie Mid()
AbschneidenVorne()
AbschneidenHinten()
Ersetzen()
Suchen()
...

Die Strings in Blitz können noch mehr, daher rate ich dir es zu lassen, es sei den Punkt 2. und Punkt 3. sind ein Absolutes muss.

Eingeproggt

BeitragSa, Okt 19, 2013 11:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie ich (etwas unzureichend) beschrieben habe:

1.) String mittels PokeByte in die bank schieben. Das geht nur byte-weise und hier leider nur unter verwendung von Mid.
2.) In der Bank die Funktionalität von Instr "nachprogrammieren", sprich mit PeekByte und Ascii-Wert-Vergleichen.
3.) Die gewünschten Zeichen wieder mittels Chr zu Buchstaben wandeln und die zu einem neuen String verketten.

Ist aber garantiert sowas von viiiel langsamer als die normalen String-Befehle... Das ist leider nur sowas wie eine "Fingerübung zum Erlernen von Banks" Sad

mfG, Christoph
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

mpreu

BeitragSa, Okt 19, 2013 12:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann sehe ich es als Fingerübung und würde dies dennoch gern versuchen.
Ich werde mal Eingeproggt´s Hinweisen nachgehen und das versuchen umzusetzen.

Jamagin

BeitragSo, Okt 20, 2013 9:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie wärs mit dem alten C64? *Ironie*


lg. Jamagin
Bevor du etwas neues beginnst, erledige das alte

BladeRunner

Moderator

BeitragSo, Okt 20, 2013 10:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch der hat bereits Stringbefehle, von daher ist dieser Vorsachlag leicht unangebracht Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Jamagin

BeitragSo, Okt 20, 2013 10:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, es ging mir nicht um die Sringbefehle, sondern mehr darum warum leicht wenn es kompliziert auch geht! Und ich hatte LEIDER nie einen C64, ich bin mit MSX großgeworden!

lg. Jamagin
Bevor du etwas neues beginnst, erledige das alte

BladeRunner

Moderator

BeitragSo, Okt 20, 2013 11:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Und der C64 ist kompliziert? Im Gegensatz zu modernen Systemen ist er sogar extremst leicht zu verstehen Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

DAK

BeitragSo, Okt 20, 2013 11:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Nur einen beschaffen (plus einem passenden Monitor und Diskettenlaufwerk) ist wohl etwas komplizierter Wink
Gewinner der 6. und der 68. BlitzCodeCompo

BladeRunner

Moderator

BeitragSo, Okt 20, 2013 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Na, nicht wirklich. Die werden zwar weniger aber sind problemfrei zu kriegen. Fürs Basteln langt auch eine Datassette, und ein Monitor ist nicht nötig, zumindest nicht solange man noch einen Fernseher mit analogem Kabelanschluss hat.
Aber wir schweifen ab.
Ich finde die Idee mittels einer Bank Stringbearbeitung zu implementieren um die Bank zu beherrschen reizvoll, egal ob es sinnig ist oder nicht. Wenn es seinen Zweck erfüllt (mpreu lernt was) ist es doch absolut probat.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

AnniXa

BeitragMo, Okt 21, 2013 23:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Jamagin hat Folgendes geschrieben:
Naja, es ging mir nicht um die Sringbefehle, sondern mehr darum warum leicht wenn es kompliziert auch geht! Und ich hatte LEIDER nie einen C64, ich bin mit MSX großgeworden!

lg. Jamagin


hey nichts gegen den C64!

der hatte nen supereasy und spaßiges basic drauf.
Poke 53281,0 und der bildschirm wurde schwarz (also der bereich wo man schreibt den ramen mit der adresse 53280,0)
keine ahnung warum ich das noch auswendig weis, aber es hat damals tierischen spaß gemacht.
|moonForge|
Ich bin Pokémon Meisterin seit 1998!

Jamagin

BeitragDi, Okt 22, 2013 6:20
Antworten mit Zitat
Benutzer-Profile anzeigen
@anniXa!

ja, die guten alten Zeiten! Ich hab immer bei/mit nen Freund auf den C64 gezockt....!
Da wären Bruce Lee, The Last Ninja, Giana Sisters, etc... ne Menge Spass halt!

Mit heute kein Vergleich das Feeling von damals!!!!

Aber das hat nichts mit diesem Thema hier zu tun, deshalb ziehe ich mich zurück! (Gibt es eine Sektion Cool Old Games - Retro?)


lg. Jamagin
Bevor du etwas neues beginnst, erledige das alte

BladeRunner

Moderator

BeitragDi, Okt 22, 2013 9:09
Antworten mit Zitat
Benutzer-Profile anzeigen
In andere Dialekte können wir gerne zum Basic V2 des C64 klönen. Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group