Forum: Mikrocontroller und Digitale Elektronik Lookup als "String" übergeben


von Sungod (Gast)


Lesenswert?

Hi...

Ist möglich das label "Buchstabe" für lookup als string zu übergeben? 
Irgendwie klappt es nicht..

Bsp.

Dim Buchstabe as string * 1
Dim Hexwert as String * 4
Dim Feld as Byte

Buchstabe = "S"
Feld = 1

Hexwert = lookup(Feld , Buchstabe)

End

S:
Data &H3C , &H00

T:
Data &H60 , &H18

von Rene H. (Gast)


Lesenswert?

Abgesehen davon, dass Du Dich bemühen könntest Deine Frage nicht einfach 
so dahin zu rotzen, ist die Antwort nein!

Das Label wird im Kompilierungsvorgang substituiert. Du willst es zur 
Laufzeit.

Grüsse,
René

PS: es gibt noch andere Sprachen wie Bascom.

von Sungod (Gast)


Lesenswert?

ja sorry für's "dahinrotzen"...hab 'ne Erkältung..

nene Spaß beiseite..

Es ist also nicht möglich genau so wie beim "Feldzeiger" auch einen 
String an den Tabellennamen zu übergeben?
Wie kann ich denn dann je nachdem...eine bestimmte Tabelle 
anspringen...?

P.S. Es gibt noch Land hinter dem Meer!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was willst Du erreichen?

(Ansonsten: Hinweise auf die verwendete Programmiersprache sind nicht 
schlecht, auch wenn man hier recht leicht erkennt, daß das wohl 
irgendein Basic-Dialekt ist).

von Rene H. (Gast)


Lesenswert?

Ich kann kein Bascom, aber Basic kenne ich (ist schon ein paar 
Jahrzehnte hin).

Ich würde sagen, dass Du das zur Laufzeit nur mit einem zwei 
dimensionalen Array hinbekommst.

Grüsse,
René

PS: mein Hinweis auf die Sprache, hatte den Ursprung, dass man im Titel 
oder Text die Programmiersprache erwähnen sollte.

von versuch (Gast)


Lesenswert?

select case buchstabe
  case 'S': hexwert=lookup(feld,s)
  case 'T': hexwert=lookup(feld,t)
end select

Und hexwert muß vom Datentyp her den Datenelementen entsprechen.

von Sungod (Gast)


Lesenswert?

BASCOM


ok...also es ist für LED-Dot-Matrix-Module Es gibt ein Wort oder einen 
Satz in einem String. Von diem Inhalt wird jeweils von links nach rechts 
je ein Buchstabe "abgeschnitten"...

Text = "Heute ist Montag"
For Position_buchstabe = 1 To Len(text)
Buchstabe = Mid(text , Position_buchstabe , 1)
...
...


Jetzt enthält "Buchstabe" den Buchstaben B

Nun wollte ich aus der Tabelle am Ende des Programms mir die 8 HEX-Werte 
holen und in ein Array schreiben lassen...

 For Zeigerposition = 0 To 7  '8 Durchläufe weil 8 Hexwerte pro 
Buchstabe
 Hex_array(i) = Lookup(zeigerposition ,buchstabe)

Dann wenn das Array "voll" mit 8 Werten ist, wird durch eine 
For/Next-Scheife die HEX-Werte an den MAX7219 (64-LED-Driver) 
gesendet...

So sieht es aus....
nun wenn ich aber "Buchstabe" nicht als String/Variable Definieren 
kann...muss ich mir was anderes überlegen

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Sungod schrieb:
> So sieht es aus....
> nun wenn ich aber "Buchstabe" nicht als String/Variable Definieren
> kann...

Warum solltest Du das nicht können?

von Karl H. (kbuchegg)


Lesenswert?

Und noch ein Hinweis.
Du brauchst nicht für jeden Buchstaben einen eigene Lookup Tabelle.

Ein 'Buchstabe' ist im Computer auch nichts anderes als eine Zahl. Dazu 
gibt es die ASCII Tabelle, die einem sagt, welche Codezahl für welchen 
Buchstaben steht. D.h. dein Buchstabe ist im Grunde bereits eine Zahl. 
Hast du aber diese Zahl, dann ist es ein leichtes auszurechnen, wo in 
einer einzigen großen Lookup die 8 Bytes für diesen Buchstaben beginnen, 
denn du weißt ja, dass für jeden Buchstaben genau 8 Bytes notwendig 
sind. Also beginnt der erste Buchstabe (mit dem Code 0) in der Lookup 
Tabelle an der Position 0, der Buchstabe mit dem Code 1 beginnt an der 
Position 8, der mit dem Code 2 an der Position 16 und so weiter.


Im übrigen willst du auch nicht die MID Funktion benutzen, um dir ein 
Zeichen nach dem anderen aus dem String rauszuholen. Denn von MID 
kriegst du ja keine Zeichen, sondern du kriegst wieder einen String. 
Genau das willst du aber nicht, denn so schaffst du nicht den Übergang 
von Strings zu einzelnen Zeichen.
Du kannst aber in BASCOM in einem String genau wie in einem Array ganz 
einfach auf die einzelnen Zeichen zugreifen
1
DIM MyEinzelByte AS BYTE
2
 DIM MyStrlen AS BYTE
3
 DIM MyIndex AS BYTE
4
 
5
 MyString = "Hello, World"
6
 MyStrlen = LEN(MyString)
7
 FOR MyIndex = 1 TO MyStrlen 
8
       MyEinzelByte = MyArray(MyIndex)
9
 NEXT

In "MyEinzelByte" liegt dann genau 1 Zeichen aus dem String vor. Und da 
es sich bei MyEinzelByte bereits um den Datentyp Byte handelt, kannst du 
dann auch ganz einfach damit rumrechnen. Zum Beispiel, indem du 
zunächste den ASCII Code für ein Leerzeichen abziehst, denn ein 
Leerzeichen ist im ASCII Code das erste Zeichen mit einer sichtbaren 
Repräsentierung. Die davor liegenden Zeichen haben keine sichtbare 
Darstellung, würden also in der Lookup Tabelle nur Platz verbrauchen. 
Und dann die so erhaltene Zahl mit 8 multiplizieren um sie als Index in 
die große Lookup Tabelle zu benutzen, aus der du dann die 8 Bytes 
rauskriegst, die in deinen Display Speicher kopiert werden müssen.


http://www.rn-wissen.de/index.php/Bascom_Strings_und_Bytes

von mue_c (Gast)


Lesenswert?

Hallo Karl-Heinz,
es wäre aber noch wichtig zu erwähnen, was MyArray ist, denn darauf wird 
er nicht selber kommen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.