Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Die ASCII-Steuerzeichen in FreeBASIC

von RedakteurytwinkySeite 1 von 1

Die Zeichen die FreeBASIC darstellen kann, haben Nummern von 0 bis 255. Unterschiede, die sich aus verschiedenen
Zeichensätzen ergeben, aber auch der Unterschied Text- und Grafikmodus sind hierbei erstmal nicht so wichtig.
(Auch die neuen Zeichen, die über WChr() zu Verfügung stehen, sind hier nicht das Thema..)
Die Zeichen des ASCII-Codes lassen sich in verschiedenen Tabellen nachsehen, u.a. in der Befehls-Referenz,
FB-Wiki u.a.m.(Eine schöne Tabelle Externer Link!ist diese hier, die Spalten Binär und Oct sind dabei nicht ganz so wichtig ^^ )
Natürlich kann ich versuchen, alle Zeichen auf dem Bildschirm auszugeben:

Dim As Integer Zeile, Spalte
For Zeile=0 To 255 Step 16
  For Spalte=0 To 15
    Print Chr(Zeile+Spalte) &" ";
  Next Spalte
  Print
Next Zeile
Sleep
End

..das sieht aber nicht unbedingt gut aus, außerdem piepst der Rechner auch zwischendurch(kein gutes Zeichen..)
Des Rätsels Lösung: Die Zeichen ab Nr. 32(Leerzeichen) lassen sich 'ohne Probleme' darstellen.
Un was ist mit den Zeichen 0..31?
Nun, in den verschiedenen ASCII-Tabellen haben diese Zeichen eine, meist englische, Beschreibung: 07 BEL (z.B.)

Const BEL=07 'Const deshalb, damit es nicht im Programm geändert werden kann,
'da es ja als Funktion im ganzen Programm benutzt werden soll
Print "Fertig.." & Chr(BEL)

zeigt, was passiert: es ertönt ein Piep(was dem Namen BEL->Bell=Glocke entspricht).
Beachte: Die Programmausführung wird erst am Ende des 'Pieps' fortgesetzt!
Dieses Zeichen führt also eine Funktion aus. Deshalb heißen die Zeichen aus diesem Bereich auch Steuerzeichen.
Nun ist diese Schreibweise etwas umständlich, einfacher wäre diese Variante:

Const BEL=Chr(07) 'Const deshalb, damit es nicht im Programm geändert werden kann,
'da es ja als Funktion benutzt wird
Print "Fertig.." & BEL

..aha, der Rechner gibt "Fertig" aus, gefolgt von einem Piep. Toll, soll also eine Meldung von einem Piep begleitet
werden, brauche ich nur &BEL an einen String anzuhängen und schon piepst es..
Seit FreeBASIC 0.17b gibt es aber noch eine weitere Möglichkeit:

Const BEL=!"\007" 'Const deshalb, damit es nicht im Programm geändert werden kann,
'da es ja als Funktion benutzt wird
Print "Fertig.." & BEL

Was ist denn das nun wieder?
Es ist nichts grundsätzlich Neues, in den früheren FB-Versionen gab es eine ähnliche Form der Darstellung auch
schon, nur mußte dazu am Programmanfang ein "Option Escape" stehen, dann wurden Strings, die mit einem "\"
begannen, als Steuerzeichen intepretiert.
Neu ist nun, daß "Option Escape" nicht mehr so ohne Weiteres unterstützt wird. Stattdessen wird so ein String mit '!'
eingeleitet und der Compiler 'weiß' dann, daß in dem String Steuerzeichen enthalten sind.
(Die Darstellung !"\007" ist hier übermäßig ausführlich, deutet aber an, daß die Zeichennummer maximal 3-stellig
sein kann und kann bei Bedarf auch !"\7" sein)
Was nützt das nun? Alle Zeichen können nun in einem String untergebracht werden und die Funktionen werden
ausgeführt, wenn der String mit einem "!" beginnt.
Allerdings unterstützt FreeBASIC nicht alle Funktionen, beachtet werden aber auf alle Fälle die Folgenden:

Nr Darstellung  Beschreibung
 0 \00          ist das Stringende(steht es zu Beginn wird der Rest also nicht ausgegeben..)
 3 \03          ist das Zeichen für Abbruch, kann aber nicht abgefragt werden, da es sofort zum Programmabbruch führt
 7 \07             gibt einen Piepston aus
 8 \08 oder \b  setzt den Cursor eine Position zurück, bleibt aber in derselben Zeile
 9 \09 oder \t  setzt den Cursor um eine Tablänge weiter
10 \10 oder \n  setzt den Cursor eine Zeile tiefer
13 \13 oder \r  setzt den Cursor an den Zeilenanfang
27 \27          hat keine Funktion für den Compiler, wird aber in Programmen oft benutzt,
                um einen Abbruch(Escape) zu signalisieren(auf deutschen Tastaturen auch Ctrl-ü)

Wem also die Darstellung mit

Const CrLf=Chr(13) &Chr(10)

oder weil Chr() ja mehrere Zeichen 'kann':

Const CrLf=Chr(13,10)

zu umständlich ist, der kann mit

Const CrLf=!"\13\10"

dasselbe erreichen. Oder aber ganz professionell

Const CrLf=!"\r\n"

Fazit: Eine durchaus umfangreiche Ausgabemeldung, wie z.B. eine Hilfe-Seite läßt sich ohne Probleme in einer
Print-Anweisung unterbringen und kann mit den unterstützten Steuerzeichen auch prima gestaltet werden.

Beachte:Chr(0) kann nicht immer durch !"\000" ersetzt werden, siehe hier

Wie so oft, gilt auch hier: Zu Risiken und Nebenwirkungen sehen Sie in der FreeBASIC-Befehlsreferenz nach,
sonst fragen Sie im Chat #fb-portal/#freebasic.de oder im Forum..

 

Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 04.08.2007 von Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 31.01.2012 von Redakteurytwinky gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen