PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bug in Bascom?



Matthias Mikysek
01.04.2005, 18:55
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

Frank
01.04.2005, 20:29
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

Marco78
01.04.2005, 20:30
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 ;)

Matthias Mikysek
01.04.2005, 20:32
Hi Frank,

das ist ja richtig, ABER warum geht denn das:

Alle(4) = Asc(mid(toaddr , 2 , 1))

nicht?

Matthias Mikysek
01.04.2005, 20:34
OK das erklärt es!

Danke!

Matthias Mikysek
01.04.2005, 20:34
OK das erklärt es!

Danke!

Matthias Mikysek
01.04.2005, 20:37
Was ich aber noch nicht verstehe ist, warum ich LEFT(n,y) dem Bytearray zuweisen kann MID(str,x,y) aber nicht.

Gruß

Matthes

Marco78
01.04.2005, 21:30
Die Frage ist gut! Laut der Hilfe, sollte es auch ein String sein.

Evtl ist das der Bug ;)

pebisoft
01.04.2005, 22:28
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

Matthias Mikysek
01.04.2005, 23:45
@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