Kommt drauf an. In den meisten Fällen ja.
Mit Hilfe der Befehle
PeekS() und
PokeS() brauchst du
Mid(),
Left() und
Right() gar nicht mehr.
Diese 3 befehle sind im Vergleich zu den Memorybefehlen sehr, sehr langsam.
Nehmen wir an, du hast einen String und möchtest nur die ersten 5 Zeichen haben, ich zeige dir, wie du es mit
Left() und
PeekS() machst:
Code: Alles auswählen
text$="StandFurz"
Debug Left(text$, 5) ; anfängerfreundlich, aber langsam
Debug PeekS(@text$, 5) ; für Fortgeschrittene, aber schnell
Variablen sind im Grunde nichts anderes als reservierter RAM, bloß dass PureBasic automatisch das reservieren und beschreiben des RAMs vornimmt. Man kann sich das so vorstellen:
Code: Alles auswählen
Define string$ ; entspricht AllocateMemory()
string$="tanga" ; entspricht PokeS()
Debug string$ ; entspricht PeekS()
Hast du dir im obigen Beispiel mal den Wert von *speicher angeschaut?
Richtig, es ist eine Zahl, genauer: Die Adresse deines reservierten Speichers im RAM.
Das @-Zeichen vor string$ ermittelt die Adresse des Speichers von string$.
wird dir also auch eine Zahl anzeigen.
Sogar das hier ist möglich:
Code: Alles auswählen
Define string$ ; Reservieren des Speichers (das übernimmt PB)
string$=Space(10024) ; Wir bestimmen, wie groß der Speicher sein soll (1024 Byte)
; string$="tanga" ; So wollen wir diesmal nicht speichern!
PokeS(@string$, "tanga") ; sondern so :-)
; Debug string$ ; So wollen wir diesmal nicht kontrollieren
Debug PeekS(@string$) ; sondern so :-)
Du kannst, wie ich schon sagte, zum Beispiel auch
Mid() durch einen
PeekS() Befehl ersetzen. Das ist sehr viel schneller, vor allem je größer der String ist.
Doch dazu musst du wissen, was ein
Offset ist. Eine genaue Übersetzung habe ich jetzt nicht, aber das ist ein "verschobener Bereich".
Um aus dem Wort PUREBASIC das Wort BAS heraus zu bekommen kannst du so vorgehen:
Oder so:
Code: Alles auswählen
*buffer=AllocateMemory(500) ; Diesmal nur 500 Byte reservieren
; Wir speichern PUREBASIC in den Speicher
PokeS(*buffer, "PUREBASIC")
; Wir wollen BAS haben
Debug PeekS(*buffer+5, 3)
*buffer ist diesmal nur eine andere Bezeichnung für *speicher.
Du erinnerst dich, *buffer ist in Wirklichkeit eine Zahl, die Adresse des Speichers.
Da jedes Zeichen von PUREBASIC genau 1 Byte lang ist, wir aber bei B anfangen wollen zu lesen müssen wir zum Wert von *buffer noch 5 zeichen hinzuaddieren.
würde aber BASIC ausgeben, ohne den 2. Parameter liest
PeekS() immer bis zum Ende des Speicherbereichs. Der 2. Parameter sagt, wie viele Bytes (also Zeichen) gelesen werden sollen, hier also 3.
Tada, wir erhalten BAS als Ergebnis.