-
Bug in Bascom?
Hallo Bascom Gemeinde,
ich hab da was komisches was ich nict verstehe, bzw ich glaube ich versteh das schon aber Bascom nicht. Also:
Ich hab ein Byte-Array Namens Alle() da schreibe ich Strings rein z.B.:
Alle(2) = " "
Alle(3) = Left(toaddr , 1)
wenn ich das dann wieder auslese passiert das was ich auch will : es stehen die entsprechenden ASCII Werte drin. Aber jetzt kommts:
Alle(4) = Mid(toaddr , 2 , 1)
Das klappt nicht und der Compiler meldet : Error 213 String expected for
assignment[ALLE(4)].......
Wieso String expected??? ALLE() ist doch als Byte-Array gedimmt!!!
und mit LEFT gehts aber mit MID nicht!!!
Wenn ich aber nun sage OK du bekommst was du willst also nen Byte und ich compiliere das:
Alle(4) = Asc(mid(toaddr , 2 , 1))
bekomme ich : Error 31 Invalid datatype.....
Nur.... so klappts:
B = Mid(toaddr , 2 , 1)
Alle(4) = Asc(b)
Kann mir das wer erklären????
Gruß
Matthes
-
Wenn du mit String Befehlen arbeitest solltest du auch Strings definieren und keine Byte-Arrays! So einfach läßt sich das nicht immer vermischen.
Nebenbei: Deine grüne Farbe ist schrecklich lesbar
-
Die Frabe ist ja schrecklich zu lesen :P
Mid liefert als Ergebnis ein String. Wenn Alle() Byte ist, passt das nicht.
Aber die Lösung hast du ja gefunden.
=asc(mid(....)) geht mit BASCOM nicht. Jeder Schritt benötigt eine Zeile.
A = 5 * B + 1 geht z.B. auch nicht.
A = 5 * B : A = A + 1 würde gehen. Der : leitet einen neuen Befehl ein.
Ist leider etwas aufwendiger, aber nicht zu ändern. In Assembler wäre es ja auch nicht möglich gewesen ;)
EDIT: Tja, da hab ich ne Minute zu langsam geschrieben ;)
-
Hi Frank,
das ist ja richtig, ABER warum geht denn das:
Alle(4) = Asc(mid(toaddr , 2 , 1))
nicht?
-
OK das erklärt es!
Danke!
-
OK das erklärt es!
Danke!
-
Was ich aber noch nicht verstehe ist, warum ich LEFT(n,y) dem Bytearray zuweisen kann MID(str,x,y) aber nicht.
Gruß
Matthes
-
Die Frage ist gut! Laut der Hilfe, sollte es auch ein String sein.
Evtl ist das der Bug ;)
-
du solltest einmal die hilfe lesen. du musst es als string definieren.
es ist kein bug in bascom. du zauberst nur was hinein, was nicht hinein gehört. wenn du fussball spielst, kannst du keine tischtennisregeln verwenden.
mfg pebisoft
-
@pebisoft
Nenne es wie Du willst, aber es ist zumindest offensichtlich, dass BASCOM das Ergebniss von LEFT(String,x) als Byte wenn nicht interpretiert, so zumindest die Verwendung des Ergebnisses als Byte zulässt.
Matthias