PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Daten in Array schreiben



infosystems
19.10.2006, 15:15
Hallo,

was mache ich da eigentlich falsch? Dauern bekomme ich eine Fehlermeldung.

Ich will ein array anlegen in dem ich Daten schreibe.
Das array soll aber keine feste Größe haben, sondern von der Anzahl der Buchstaben in dem Text vorgegeben werden.

Also zum Beispiel:

Bei "Test" soll das das Array in der Form Dim B1(4) angelegt werden,

bei "Testaufgabe" soll das Array die Form Dim B1(11) angelegt werden.

Warum bringt mein Code dauernd Fehlermeldung?

Darf ich als größe der Variable keine Variable angeben?


$regfile = "m8def.dat"
$crystal = 8000000

$framesize = 256
$swstack = 256
$hwstack = 256

Dim Anzeige As String * 100
Dim Laenge As Byte

Anzeige = "AB"
Laenge = Len(anzeige)

Print "Textlaenge =" ; Laenge

Dim B1(laenge) As Byte
Dim L As Byte
Dim Zeichen As String * 1
Dim Zeichenasc As Byte


Zeichen = Mid(anzeige , L , 1)

Print "Zeichen=" ; Zeichen

Zeichenasc = Asc(zeichen)

Print "Ask Wert des Zeichens =" ; Zeichenasc

B1(1) = &B01101111


End

Vielen Dank im Voraus

Rici

PicNick
19.10.2006, 15:46
..Darf ich als größe der Variable keine Variable angeben?

Simpel gesagt: Nein.

(du bist wahrscheinlich durch "malloc" und "new" etwas verwöhnt. :-) )

for_ro
19.10.2006, 17:09
Hallo,
bist du sicher, dass du eine solche "abgefahrene" Funktionalität wie dynamische Arrays überhaupt brauchst?
Wenn doch, kannst du aber auch, wie das jeder gute C-Programmierer das macht, mit Pointern direkt im - glaube ich - 1K großen SRAM vom Mega8 rumspringen.

Dim ar(1024) as byte
Dim ptr_a as int
ptr_a = varptr(ar(1))

und schon geht die Post ab.
Dazu gibt es PEEK und POKE, INP und OUT Funktionen.
Nee, jetzt mal ernsthaft, bestimmt kannst du deine Aufgabe ohne solche Arrays lösen. In deinem Beispiel sowieso, aber da steckt vielleicht noch mehr dahinter.

infosystems
20.10.2006, 09:48
Hallo,

Robert entschuldige bitte das ich hier nerve, aber ich bin leider Anfänger und habe immer wieder das Problem das ich nicht weiß welche Befehle ich überhaupt brauche.

Vielen Dank for_ro. Genau das war es. Ich brauche ja gar keine dynamische Arrays. Ich kannte diesen Befehl nicht. Aber damit kann ich das Problem lösen.
Ich versuche gerade eine Ausgabe auf einer Matrix Textanzeige zu basteln. Ohne eure Hilfe hab ich da keine Chance. Bin leider kein Programmierer, versuche es mir irgendwie beizubringen.

Vielen Dank und Entschuldigt noch einmal.

Rici

PicNick
20.10.2006, 09:57
Kein Problem.
Zur Erklärung:
Die Reihenfolge, wie etwas im Source-Code steht, ist nicht immer auch die reihenfolge, wie was abläuft.

Das läuft erst, wenn das Programm fertig ist und auf den µC übertragen ist:


Laenge = Len(anzeige)
Print "Textlaenge =" ; Laenge


Das da steht zwar danach, ist aber schon beim kompilieren relevant:


Dim B1(laenge) As Byte
Dim L As Byte

Der Kompiler reserviert Speicher für dieVariablen. Erst "B1, dann "L".
Damit er aber weiß, wo er "L" hintun kann, muß er natürlich jetzt schon wissen, wie lange "B1" ist.
Und deshalb isses so, wie es ist.