Hallo maltec,
fertige Lösungen gibt es selten im Forum.
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.
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