Archiv verlassen und diese Seite im Standarddesign anzeigen : Funktion um einen String Array zu leeren "loeschen"
Hallo
Gibts es in Bascom eine Funktion um einen String Array zu leeren "loeschen"?
Oder nuss man es in einen For/Next loop alle variabeln des array loeschen?
Gruss
Sato
Fürchte, da is nix zu machen.
Um wieviele Elemente geht es denn ?
Zeitkritische Sache ?
Hallo Picknick
Es ist ein String Array von etwa 100 Elemente die in eine ISR routine von der Seriellen Schnitstelle eingesammelt werden.
Nachdem die String Array Voll ist, teste ich die ersten 4 Zeichen, fals die nicht korrekt sind, dann stimmen die gesammelten Daten nicht und danach möchte ich diesen Array leeren. Da es anscheinend keinen Befehl in Bascom dafür existiert, werde es wahscheinlich so machen müssen.
dim zeichen as string * 100
for i = 1 to 100
zeichen(i) = ""
next
Gruss
Sato
Du sprachst anfangs von einem String-Array. Darauf bezog sich PicNicks Antwort.
Wenn du nur einen String der Länge 100 hast, brauchst du nur auf die erste Stelle ein Null-Byte zu schreiben, und schon ist der String leer. Die noch dahinter stehenden zeichen werden von allen String Funktionen ignoriert.
Dazu brauchst du nur Zeichen="" einzugeben.
dim zeichen as string * 100
for i = 1 to 100
zeichen(i) = ""
next
Zeichen(i) = "" geht allerdings nicht. Dazu müsstest du ein Byte Array über den String legen. Dann kannst du jede Stelle direkt adressieren.
Gruß
Rolf
Wozu überhaupt leeren? Die falschen Daten einfach nicht auszuwerten genügt doch, dafür reicht zb. eine Bit-Variable:
Received_Nice_Data = 1
...
If Received_Nice_Data = 1 Then
' auswerten
mfg
Hallo Netzman
Hat Recht, wozu leeren, die werden sowieso überschrieben.
Danke
Gruss
Sato
peterfido
16.06.2009, 00:24
Ein Versuch wäre folgendes wert:
dim zeichen(100) as string * 1
dim sleer as string *100 at zeichen overlay
zum leeren dann sleer=""
Falls das nicht geht würde ich eine long-Variable als Array im Overlay Dimensionieren, so brauchts dann nur noch 25 statt 100 Durchgänge beim auf 0 setzen.
Ein Versuch wäre folgendes wert:
dim zeichen(100) as string * 1
dim sleer as string *100 at zeichen overlay
zum leeren dann sleer=""
Geht zwar an der eigentlichen Frage vorbei, aber warum nicht. Nur:
dim zeichen(100) as string * 1
belegt tatsächlich 200 Byte im SRAM (Null-Byte!), während
dim sleer as string *100 at zeichen overlay
nur die ersten 101 davon belegt.
sleer=""
setzt Zeichen(1)="" und sleer auf "", alles andere bleibt wie es ist.
Falls das nicht geht würde ich eine long-Variable als Array im Overlay Dimensionieren, so brauchts dann nur noch 25 statt 100 Durchgänge beim auf 0 setzen.
Eine Long-Variable wird natürlich auch nicht in einem Befehl auf 0 gesetzt, sondern in 4 Byte Schritten. Ob eine Long auf 0 setzen schneller geht als einen String auf "" zu setzen, müsste man mal ausprobieren, glaube ich aber nicht.
Außerdem brauchst du wieder 50 Long Variablen um die 200 String-Byte abzudecken.
Du setzt dabei am Ende 200 Byte auf 0. Wenn du ein Byte-Array drüberlegst und nur jedes zweite Byte - die wo die Zeichen des Strings liegen - auf 0 setzt, sind es halt nur 100 Zuweisungen.
Gruß
Rolf
Noch schneller gehts mit Memcopy, wie jemand im englischen Forum bemerkt hat ;)
mfg
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.