Wie kann ich ein array in bascom füllen?

maltec

Neues Mitglied
01. Juli 2008
6
0
0
Sprachen
hallo zusammen,

wie beschreibe ich ein array in bascom?

als Beispiel:

Ich möchte eine Keyliste mit mehreren ID`s in ein array schreiben, und einen gelesen key gegen prüfen.

Folgender Versuch in Kurzform schlug fehl:
z = "id3"
a = array(id1,id2,id3)
fori i = 1 to 3
If array(i) = z then print "Treffer"
else print "Leider nicht dabei"
End if
next

Gruß und Dank

maltec
 
Hab es vorerst so gelöst:


Dim Array(112) As String * 16
Array(1) = "ed0000062898f902"
If Array(i) = z Then
...


Gruß

Marco
 
Hallo maltec,

fertige Lösungen gibt es selten im Forum. :confused:

Denn: ein wenig Spass und Entdeckerfieber muss schon auch noch dabei sein. :) Außerdem freut man sich über eine eigene Lösung mehr als über gelieferte Lösungen. So ist das halt. Aber schauen wir uns doch die Themen mal an, die im Zusammenhang mit Deiner Frage stehen. Eine Lösung für Dein Problem hast Du ja schon selbst gefunden. :p
Funktioniert es auch so wie Du Dir das vorgestellt hast?

Schaun wer mal wie weit wir mit unserer Betrachtung kommen:

Arrays sind in BASCOM nichts anderes als eine Gruppe identischer Variablen welche sich im Speicher hintereinander angereiht befinden. Sie sind so angeordnet, dass mittels einer einzigen Variable und einem Index darauf zugegriffen werden kann.
Mir ist jetzt in Deinem ersten Code-Beispiel
z = "id3"
a = array(id1,id2,id3)
nicht ganz klar, was Du hier machen möchtest. Um Dir zu helfden ist es sinnvoll, etwas mehr Code bereitzustellen damit wir auch sehen können wie Du die Daten und Variablen initialisierst. Im zweiten Beitrag von Dir sieht das ganze schon besser aus aber gehen wir zurück an den Anfang.

Nehmen wir an, Du hast eine String-Variable die Du mit Deinem Array vergleichen möchtest. Nehmen wir weiter an, der String selbst kann 4 Zeichen lang sein (+ zusätzliches NULL Zeichen, also 5 Byte im Arbeitsspeicher pro Eintrag).

Was hältst Du dann von folgender Lösung:
Code:
Dim Key As String * 4
Dim Key_list(10) As String * 4

Dim Count_var As Byte
Dim Keys As Byte
Keys = 10

Restore Data_key_list
For Count_var = 1 To Keys
   Read Key_list(count_var)
Next

'----- Hauptschleife -----
Do
Loop

End

' Datendefinition
Data_key_list:
Data "key1" , "key2" , "key3" , "key4" , "key5"
Data "key6" , "key7" , "key8" , "key9" , "key0"

Das ganze funktioniert auf dem Prinzip:
- ich lege die Daten im Speicher fest an
- konstruiere mir mein Array
- und befülle mit einer FOR-Schleife das Array mit Daten.


Wie Du es machst bleibt letzendlich Dir überlassen. Es erscheint mir aber als elegante und saubere Lösung. Sicherlich kannst Du auch jeden einzelnen Wert diskret runterprogrammieren

Code:
Key_list(1) = "Key1"
Key_list(2) = "Key2"
....
Key_list(10) = "Key0"

Folgende Überlegung am Schluss:
Würde ein String nicht 0-terminiert sein, also mit {000} dann könnte man schön eine Overlay über das Array legen und mit overlaystring = "Key1Key2Key3...." Das Array befüllen.
Man kann in Bascom zwar einen solchen String mit "Key1{000}Key2{000}...." definieren. Leider hört aber der Kompiler beim ersten 0-Terminierungszeichen auf und befüllt das restliche Array nicht. Ich weiß nicht ob das so gewollt ist oder ob das ein Fehler ist. Eine Lösung für das Problem habe ich jedenfalls bis heute nicht gefunden.
Eine weitere Möglichkeit wäre das Anlegen der Keys im Speicher und das verwenden von Speicher-Kopierfunktionen. Hierbei musst Du mit Referenzen arbeiten und wissen, wo das Array abgelegt ist.


Doch ich glaube, das reicht erst mal an Infos oder?
Hoffe Dir ein wenig weitergeholfen und BASCOM Wissen vermittelt zu haben.

Grüße,
Markus
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)