'konstante Arrays'

Hallo, Leute!

Wie kann ich ein „konstantes Array“ erstellen?

Die folgenden Konstrukte werden von VB nett ausgemeckert:

  1. const befehl1 as byte = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14)
  2. const befehl1() as byte = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14)
  3. const befehl1(14) as byte = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14)

Ich bin den weiten Weg ‚nicht-Array-Weg‘ gegangen (das Dingen musste zunächst erstmal laufen) , also
const Befehl101 as byte = 1
… … … …
const Befehl114 as byte = 14

Und bin mit dieser Lösung aber nicht so recht zufrieden.
Zu lang, schleppend, schlecht lesbar … und 42 Zeilen Code zu tippern (für 3 Befehle a 14 Byte…)

Es geht dabei um VB6/SP5.

Bin für jede Anregung dankbar.

Grüße, Michael

Hallo Michael,

das Problem hatte ich auch schon öfter und hab es folgendermaßen gelöst:

dim befehl1 'wird als Konstante verwendet - daher keine Zuweisungen im Programm
befehl1 = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14)

Das liefert dir z. B. für befehl1(3) den Wert 4 - das Array beginnt bei Index Null.

Damit ist zwar rein technisch befehl1 nicht als Konstante definiert, aber wenn du es im Kommentar erklärst, dann sollte jeder Programmierer wissen, dass er diese Variable im Code nicht mehr verändern sollte.

lg Maria

Hallo Michael,

Hallo, Maria!

das Problem hatte ich auch schon öfter und hab es
folgendermaßen gelöst:

dim befehl1 'wird als Konstante verwendet - daher
keine Zuweisungen im Programm
befehl1 = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14)

Das liefert dir z. B. für befehl1(3) den Wert 4 - das Array
beginnt bei Index Null.

Damit ist zwar rein technisch befehl1 nicht als Konstante
definiert, aber wenn du es im Kommentar erklärst, dann sollte
jeder Programmierer wissen, dass er diese Variable im Code
nicht mehr verändern sollte.

-D Da bin ich zwischenzeitlich auch drauf gekommen; trotzdem vielen Dank!!! Gestern hab ich wohl vor lauter HEXerei die octalen Bäume im binären Wald nicht mehr gesehen *lach*.

Leider kommt diese Lösung für diesen Anwendungsfall nicht in Frage.

Du hast zwar recht, wenn du sagst das der Hinweis im Kommentar reichen sollte… aber wir sind alle nur Menschen, gell?
Ich möchte halt gerne auf der konstant (hehe) sicheren Seite sein. - Ein falscher Befehl könnte einige (zehn-)tausend Euro Schaden verursachen; da die Veränderung vor der Checksummenberechnung passieren würde/könnte und somit von der Maschine nicht erkannt werden kann.

Ich habe in der zwischenzeit weiter gegoogelt, wie auch schon gestern vor meinem posting, aber in dieser Hinsicht nichts gefunden und F1 gibt zum Thema Konstanten zwar einiges her schweigt sich über Arrays jedoch aus.

Sollte es vielleicht garnicht möglich sein?

Viele Grüße,
Michael

Hallo Michael,

hier ist ein ‚Workaround‘.

Erstelle eine Funktion, die die Werte zurückgibt. Damit ist eine Wertzuweisung
wie Befehl1(6) = 14 nicht möglich.

Public Function Befehl1(Counter As Integer)

 Dim lBefehl1 As Variant
 lBefehl1 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)

 If (Counter \>= LBound(lBefehl1) And Counter 

Viele Grüße
Thomas
2 Like

Noch ein Workaround:

Private Const mcMyConst As String = „1,2,3,4,5,6,7,8,9,10,11,12,13,14“

Public Property Get Konstante(Byval Index As Integer) As Integer
Dim arrConst() as Integer

arrConst() = Split(mcMyConst, „,“)
Konstante = arrConst(Index)
End Property

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

2 Like

Hallo, Leute!

Zunächst einmal ein dickes Danke für eure Antworten und ein ebenso dickes sorry, das ich erst so spät antworte, aber ich war verhindert.

Jeder Eurer Lösungsvorschläge ist gut, aber in meienm Anwendungsfall leider nicht anwendbar. - Das liegt aber daran, das ich mich mißverständlich ausgedrückt hatte…

ich picke nicht aus jedem Befehlsarray einen raus, um daraus einen neuen Befehl zu basteln, sondern die 14 Byte in einem Array stellen einen kompletten Befehl dar.

In dieser Testversion komme ich mit drei Befehlen aus, um die Grundfunktionen anzusprechen, der vollständige Befehlssatz beläuft sich jedoch auf knapp 70 Stück.

Ich bin mittlerweile hingegangen und habe ein seperates Modul (Name: „FINGERWEG“ :smiley:) erstellt, in dem ich, wie von Maria vogeschlagen, die Befehle als arrays deklariere.
Leider nicht mit dem Konstanten-Schutz den ich mir gewünscht habe aber in den Apfel muß ich wohl beißen.

Vielen Dank Euch!

Grüße, Michael