-         

Ergebnis 1 bis 9 von 9

Thema: Funktion um einen String Array zu leeren "loeschen"

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    15.04.2007
    Beiträge
    55

    Funktion um einen String Array zu leeren "loeschen"

    Anzeige

    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

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Fürchte, da is nix zu machen.
    Um wieviele Elemente geht es denn ?
    Zeitkritische Sache ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    15.04.2007
    Beiträge
    55
    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

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    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.

    Zitat Zitat von sato
    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

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.08.2004
    Ort
    Graz
    Beiträge
    342
    Wozu überhaupt leeren? Die falschen Daten einfach nicht auszuwerten genügt doch, dafür reicht zb. eine Bit-Variable:
    Code:
    Received_Nice_Data = 1
    ...
    If Received_Nice_Data = 1 Then
    ' auswerten
    mfg

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    15.04.2007
    Beiträge
    55
    Hallo Netzman

    Hat Recht, wozu leeren, die werden sowieso überschrieben.

    Danke

    Gruss
    Sato

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    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.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Zitat Zitat von peterfido
    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.

    Zitat Zitat von peterfido
    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

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.08.2004
    Ort
    Graz
    Beiträge
    342
    Noch schneller gehts mit Memcopy, wie jemand im englischen Forum bemerkt hat

    mfg

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •