Home

Tipps zur QBASIC und Quick BASIC Programmierung


Auswahlseite
Tipps für die optimale Programmierung
Aufruf QuickBASIC (Aufrufparameter)
Fehler und Fehlercodes

Tipps für die optimale Programmierung

  • Integer und Long Integer statt Gleitkomma verwenden. Die Division von ganzen Zahlen wird durch den rückwärtigen Schrägstrich (\) gekennzeichnet. Der normale Schrägstrich (/) zeigt eine Gleitkommadivision an. Bevor die Division ausgeführt wird, werden die Operanden auf Ganzzahlen oder lange Ganzzahlen gerundet und müssen daher größer als -2147483648,5 und kleiner als +2147483647,5 sein. Der Quotient einer Ganzzahldivision wird auf eine ganze Zahl abgeschnitten.

  • Tastenabfrage (kürzester Code wird erreicht durch Prüfen der Länge des gelieferten Codes )
    DO
     X$=INKEY$
      LOOP UNTIL LEN(X$)
    
  • Stringverkettungen vermeiden, besonders bei Anzeigen. Sie kosten Laufzeit und sind zu nichts gut.
    schlecht: PRINT A$+B$
    gut:      PRINT A$;B$
    

    Strings durch MID$ statt durch Verkettung aufbauen (Zeitersparnis).

  • Numerische Variablen in Dateien wenn möglich binär statt als ASCII-Werte ablegen. Das spart Speicherplatz und Zeit.
    OPEN FILENAME$ FOR BINARY AS #1
    PUT #1,,X%      GET #1,,X%
    PIT #2,,Y%      GET #1,,Y%
    
  • Sequentielle Dateien: Puffergröße angeben, falls Puffer größer als 512 Bytes sein kann und nur vorwärts gelesen wird:
    OPEN FILENAME FOR INPUT AS #1 LEN = 4096

BC und QB

Aufruf des Compilers BC:
BC Quelldatei [,[Objektdatei][,[Listdatei]]][Optionsliste[;]
ggf. werden fehlende Angaben nachverlangt.

Aufruf QuickBASIC:
QB [/RUN] Quelldatei /AH /B /C:puf /G /NOHI /L [Bib] /MBF /CMD ZeiKe

BC und QB haben folgende Optionen, die mit einem / oder - eingeleitet werden:
      BC QB  j=ja   n=nein   a=automatisch   d=im Dialog anzugeben
/A     j  n  Erzeugt Assemblercodeliste
/AH    j  j  Dynamische Felder dürfen den gesamten Speicherplatz einnehmen
/B     n  j  Ermöglicht den Einsatz eines Monochrommonitors mit einer
             Farbgrafikkarte (CGA).
/C:    j  j  Puffergröße für COM
/CMD   n  j  Parameter für COMMAND$
/D     j  a  Laufzeit Überprüfung ein
/E     j  a  ON ERROR mit RESUME Zeilennummer wird verwendet
/G     n  j  Beim CGA soll der Bildschirm schnellstmöglich aktualisiert werden.
             (Problem des Flimmerns beim CGA)
/H     n  j  Verwendet die höchstmögliche Bildschirmauflösung
/L     n  j  Bibliotheksname, ohne Angabe: qb.qlb
/MBF   j  j  Verwende MBF (Microsoft Binärformat)
/NOHI  n  j  Ermöglicht den Einsatz eines Monitors ohne intensive Anzeige
/O     j  d  Erzeuge eigenständiges .EXE-Programm
/R     j  n  Speichere Datenfelder zeilenweise
/RUN   n  j  Starte Quelldatei sofort
/S     j  a  Zeichenkettenkonstanten nicht in Symboltabelle eintragen
/V     j  a  Ereignisverfolgung zwischen einzelnen Anweisungen
/W     j  a  Ereignisverfolgung zwischen Zeilennummern/ Zeilenmarken
/X     j  a  ON ERROR mit RESUME, RESUME NEXT oder RESUME 0 wird verwendet
/ZD    j  n  Zeilennummernverwendung für SYMDEB
/ZI    j  n  Debug-Informationen für CodeView

/A bei BC und QB

Erzeugt ein Listing von disassembliertem Objektcode für jede Quellzeile und zeigt den vom Compiler erzeugten Assemblercode

/AH bei BC und QB

Ermöglicht es, dynamische Felder, die Datensätze, Zeichenketten fester Länge oder numerische Daten enthalten, den gesamten verfügbaren Speicher einzunehmen.
Wenn diese Option nicht angegeben ist, beträgt die maximale Größe pro Datenfeld 64 K. Diese Option wirkt sich nicht auf die Übergabe von Daten an Prozeduren aus.

/B bei QB

Ermöglicht den Einsatz eines monochromen Farbmischmonitors mit einer CGA- Farbgrafikkarte.

/C bei BC und QB

/C:Puffergröße

Setzt für jeden seriellen Schnittstellenadapter die Größe des Puffers, der die Daten darüber empfängt. Die Option hat keine Auswirkungen, falls ein solcher Adapter nicht vorhanden ist. Die Standard-Puffergröße für beide Anschlüsse beträgt insgesamt 512 Bytes; die maximale Größe ist 32767 Bytes.

/D bei BC

Erzeugt Debug-Code für die Laufzeit-Fehlerprüfung und aktiviert CTRL-BREAK.

Diese Option ist identisch mit der Option "Debug-Code erstellen" des Befehls "EXE-Datei erstellen" aus dem Menü "Ausführen" innerhalb der QuickBASIC-Umgebung.

/E bei BC

Zeigt das Vorhandensein von ON ERROR mit RESUME Zeilennummer an. Vergleiche Option /X

/H bei QB

Die Bildschirmanzeige erscheint in der höchsten von der Hardware unterstützten Auflösung.

/MBF bei BC und QB

konvertiert Zahlen im Microsoft-Binär-Format(MBF) in das IEEE-Format.

Hintergrund
QuickBASIC 4.5 verwendet das IEEE-Format zur Darstellung numerischer Daten. Das IEEE-Format umfasst einen größeren Darstellungsbereich als das MBF.

Mit der Option /MBF kann QuickBASIC das alte MBF-Format früherer BASIC-Varianten (wie BASICA, GWBASIC, QuickBASIC vor Version 4.0) verarbeiten.

Die Unterschiede sind nur für Direktzugriffsdateien mit Realdaten relevant.

Die Befehle CVS, CVD, MKS$ und MKD$ verarbeiten das IEEE-Format, die Befehle CVSMBF, CVDMBF, MKSMBF$ und MKDMBF$ verarbeiten MBF.

Durch Setzen der Option /MBF werden die Befehle CVS, CVD, MKS$ und MKD$ auf die Behandlung von MBF umgemünzt.

/NOHI bei QB

Erlaubt die Verwendung eines Monitors, der keine Intensivanzeige unterstützt.

/O bei BC

Erzeugt ein eigenständiges .EXE-Programm, das ohne Laufzeitmodul ablaufen kann.

/R bei BC

Speichere Datenfelder zeilenweise. Normalerweise speichert QuickBASIC Datenfelder spaltenweise.

/S bei BC

Zeichenkettenkonstanten (diese sind im Quellprogramm in " eingekleidet) sollen nicht in die Symboltabelle eintragen werden.

Diese Option ist beim Auftreten der Fehlermeldung "Out of String Space" in einem Programm zu verwenden, in dem zu viele Zeichenkettenkonstanten vorkommen.

/V bei BC

Schaltet die Ereignisverfolgung für COM (Datenübertragung), PEN (Lichtstift), STRIG (Joystick), TIMER (Uhr), PLAY (Musikpuffer) und KEY (Tasten) ein. Diese Option ist zu verwenden, wenn zwischen den einzelnen Anweisungen auftretende Ereignisse geprüft werden sollen.

/W bei BC

Schaltet die Ereignisverfolgung für
COM    (Datenübertragung),
PEN    (Lichtstift),
STRIG  (Joystick),
TIMER  (Uhr),
PLAY   (Musikpuffer) und
KEY    (Tasten)
ein.

Diese Option ist zu verwenden, wenn nur zwischen Zeilennummern bzw. Zeilenmarken, nicht jedoch zwischen einzelnen Anweisungen auftretende Ereignisse geprüft werden sollen.

/X bei BC

Zeigt das Vorhandensein von ON ERROR mit RESUME, ON ERROR mit RESUME NEXT, oder ON ERROR mit RESUME 0 an. Vergleiche Option /E

/ZD bei BC

Erzeugt eine Objektdatei, die Datensätze mit Zeilennummern enthält, die den Zeilennummern der Quelldatei entsprechen. Diese Option ist zur Fehlerbeseitigung auf Quellebene mit Hilfe des "Microsoft Symbolic Debug Utility" die mit dem "Microsoft Macro Assembler" ab Version 4.0 verfügbar ist, behilflich.

/ZI bei BC

Erzeugt eine Objektdatei, die Debug-Informationen enthält. Diese Option ist zur Fehlerbeseitigung mit Hilfe des "Microsoft Code View Debuggers", der mit dem "Microsoft Macro Assembler" ab Version 5.0 verfügbar ist, behilflich.

FEHLER und Fehlercodes

Beispiel für eine Fehlerbehandlungsroutine

Die Fehler F01 bis F30 betreffen Programm- und Syntaxfehler,
die Fehler F50 bis F76 betreffen Dateiverwaltung und Peripherie.

F01 NEXT without FOR
F02 Syntax Error
F03 RETURN without GOSUB
F04 Out of data
F05 Illegal function call
F06 Overflow
F07 Out of Memory
F08 Undefined Linenumber
F09 Subscript out of range
F10 Duplicate definition
F11 Division by Zero
F12 Illegal direct
F13 Type Mismatch
F14 Out of String Space
F15 String too long
F16 String Formula too complex
F17 Can't Continue
F19 No RESUME
F20 RESUME without ERROR
F22 Missing Operand
F23 Line Buffer Overflow
F24 Device Timeout
F25 Device Fault
F26 FOR without NEXT
F27 Out of Paper
F29 WHILE without WEND
F30 WEND without WHILE
F50 Field Overflow
F51 Internal Error
F52 Bad File Number
F53 File not found
F54 Bad File Mode
F55 File already open
F57 Device I/O-Error
F58 File already exists
F61 Disk full
F62 Input past End
F63 Bad Record Number
F64 Bad File Name
F66 Direct Statement in File
F67 Too many Files
F68 Device unavailable
F69 Communications Buffer Overflow
F70 Permission denied
F71 Disk not ready
F72 Disk Media Error
F74 Rename across Disks
F75 Path / File Access Error
F76 Path not found


F01 NEXT without FOR
Zu einer NEXT-Anweisung existiert keine vorangegangene FOR-Anweisung, oder eine hinter NEXT angegebene Variable stimmt nicht mit der bei zugehörigen FOR-Anweisung angegebenen Laufvariablen überein.
F02 Syntax Error
Der auszuführende Befehl ist nicht verständlich. Seine Syntax ist fehlerhaft.
F03 RETURN without GOSUB
Bei der Ausführung wurde ein RETURN entdeckt, ohne dass vorher ein entsprechendes GOSUB ausgeführt wurde.
F04 Out of data
Eine READ-Anweisung findet keine DATA- Daten.
F05 Illegal function call
Es wurde versucht, einen Parameter außerhalb des gültigen Bereiches an eine Funktion zu übergeben.

Beispiele: -Die Satznr. bei GET# / PUT# ist 0 oder negativ,
-USR- Befehl ohne vorheriges DEF USR,
-Indizierung eines Feldes mit einem negativen oder einem zu großen Index,
-usf.


F06 Overflow
Das Ergebnis einer Berechnung oder eine angegebene Zahl ist zu groß und deshalb nicht darstellbar.
F07 Out of Memory
Das Programm ist zu groß, so dass für Variablen und Stack nicht mehr genügend Platz zur Verfügung steht, oder die Verschachtelung bei stackbelastenden Anweisungen ist zu tief, oder aufgrund von nicht korrekt beendeten Schleifen und Unterprogrammen wächst der Stack bis zum Programmkollaps.
F08 Undefined Linenumber
Es wurde Bezug auf eine nicht vorhandene Zeilennummer genommen.
F09 Subscript out of range
Ein Feldelement wurde angesprochen, bei dem der Index entweder größer als der bei DIM festgelegte oder kleiner war als der mit OPTION BASE festgelegte; oder eine falsche Zahl von Dimensionen wurde verwendet.
F10 Duplicate definition
Es wurde versucht, ein bereits definiertes Feld nochmals zu definieren. Weiterhin kann es sein, dass der Befehl OPTION BASE zu spät (d.h., erst nach einer Felddimensionierung) verwendet wurde.
F11 Division by Zero
Es wurde versucht, durch 0 zu dividieren, oder das Ergebnis 0 soll mit einer negativen Zahl potenziert werden.

Ggf. muss vor der Division auf 0 geprüft werden (Programmanpassung)


F12 Illegal direct
Im Direkt- Modus soll eine Funktion aufgerufen werden, die im Direkt- Modus nicht erlaubt ist.

Situation umgehen oder ein Miniprogramm schreiben.


F13 Type Mismatch
Bei String- und/oder mathematischen Operationen stimmen die verwendeten Variablen vom Typ her nicht überein.
F14 Out of String Space
Trotz Bereinigung des Hauptspeichers von nicht benötigten Zeichenketten kann das System eine Zeichenkette nicht mehr ablegen.

Das Programm muss korrigiert werden, notfalls muss die Logik verändert werden.


F15 String too long
Es wurde versucht, einen String zu erzeugen, der die maximal mögliche Stringlänge überschreitet.
F16 String Formula too complex
Die geplante Stringoperation ist so komplex, dass sie der Computer nicht versteht.

neu (und einfacher) formulieren!


F17 Can't Continue
Es wurde entweder CONT ohne voriges STOP ausgeführt, oder nach einem STOP wurde das Programm verändert.
F19 No RESUME
Nach einem ON ERROR GOTO wird festgestellt, dass die Fehlerbehandlungsroutine kein RESUME enthält.
F20 RESUME without ERROR
Das Programm lief auf eine RESUME- Anweisung, ohne dass vorher ein Fehler auftrat.
F22 Missing Operand
Ein Ausdruck (numerisch, logisch oder Zeichenkette) enthält einen Operator (wie +, -, AND, usw.), dem kein Operand folgt.
F23 Line Buffer Overflow
Es wurde eine Zeile eingegeben, die länger ist als 255 Zeichen.

Zeile durch Aufteilen verkürzen!


F24 Device Timeout
Die erwartete Antwort von einem Peripheriegerät ist nicht innerhalb der vorgegebenen Zeitgrenze eingetroffen.

Prüfen Sie, ob das Gerät vorhanden und eingeschaltet ist. Bei COM- Operationen kann man mit den Parametern CS Zeit, DS Zeit und CD Zeit längere Wartezeiten vorgeben oder die Signalprüfung abschalten. Weiterhin kann mit einer Befehlsfolge
ON ERROR GOTO und IF ERR = 24 THEN RESUME
in gewissen Grenzen Abhilfe geschaffen werden.


F25 Device Fault
Das angesprochene Gerät zeigt einen Hardwarfehler
F26 FOR without NEXT
Für das auszuführende FOR ist im Programm kein NEXT vorhanden.
F27 Out of Paper
Der angesprochene Drucker meldet Papierende

Drucker mit Papier versorgen, ggf. einschalten und Statusanzeige am Drucker prüfen.


F29 WHILE without WEND
Für das auszuführende WHILE ist im Programm kein WEND vorhanden.
F30 WEND without WHILE
Für das auszuführende WEND ist im Programm kein WHILE vorhanden.
F50 Field Overflow
Es wurde versucht, das FIELD größer zu machen als die bei OPEN angegebene Satzlänge.
F51 Internal Error
Die Systemkomponente DOS diagnostiziert einen internen Fehler.

Falls der Fehler reproduzierbar ist, muss das Betriebssystem geprüft werden. Am BASIC-Programm liegt es nicht!


F52 Bad File Number
Es wurde versucht, eine Datei anzusprechen, die nicht eröffnet wurde, oder die Dateinummer liegt außerhalb des zulässigen Rahmens, oder die maximal mögliche Anzahl Dateien ist bereits eröffnet.

Programm korrigieren, ggf. den Eintrag in der Datei CONFIG.SYS prüfen.


F53 File not found
Die angesprochene Datei kann nicht gefunden werden.

Dateispezifikation prüfen. Nachsehen, wo die Datei wirklich ist.


F54 Bad File Mode
Es wird versucht, mit einer Datei oder einem Gerät eine Operation durchzuführen, für die die Datei nicht geeignet ist (z.B. wird versucht, vom Drucker etwas zu lesen).
F55 File already open
Eine bereits eröffnete Datei soll nochmals eröffnet werden. Der gleiche Fehler wird auch gemeldet, wenn eine geöffnete Datei mit KILL gelöscht, oder mit NAME umbenannt werden soll.
F57 Device I/O-Error
Bei einer Lese- oder Schreiboperation trat ein nicht behebbarer Fehler auf.

Falls DFÜ (COM)-Schnittstelle: Kabel und Geräte prüfen.
Falls Diskette: Diskette prüfen, ggf. neu formatieren.
Falls Harddisk: Harddisk prüfen


F58 File already exists
Beim Umbenennen einer Datei wurde ein neuer Name gewählt, der bereits vorhanden ist.
F61 Disk full
Auf dem Zieldatenträger ist kein Platz mehr frei
F62 Input past End
Das Programm versucht, eine sequentielle Datei hinter ihrem Dateiende zu lesen.

Programm korrigieren. Es sollte EOF zur Überprüfung des Dateiendes eingesetzt werden.


F63 Bad Record Number
In einer GET- oder PUT- Anweisung für eine Datei mit wahlfreiem Zugriff wurde eine Satznummer angesprochen, die entweder kleiner als 1 oder größer als 16777215 ist.
F64 Bad File Name
In einer FILES-, KILL-, LOAD-, OPEN- oder SAVE-Anweisung wurde ein ungültiger Dateiname verwendet.
F66 Direct Statement in File
Beim Laden einer ASCII- Quellprogrammdatei wird eine Anweisung ohne Zeilennummer gefunden.

Bei QuickBASIC kann dieser Fehler nicht gemeldet werden.


F67 Too many Files
In der Directory des Datenträgers ist kein Platz für weitere Einträge.

Wählen Sie einen anderen Datenträger oder ein anderes Unterverzeichnis, löschen Sie nicht mehr benötigte Dateien, archivieren Sie Dateien!


F68 Device unavailable
Es wird versucht, eine Datei auf einem nicht vorhandenen Gerät anzusprechen.

Überprüfen Sie, ob es am Programm oder am Gerät liegt.


F69 Communications Buffer Overflow
Der Datenpuffer der Kommunikationsschnittstelle ist übergelaufen.

Es liegt ein Soft- oder Hardwarefehler vor. Wenn die Hardware in Ordnung ist, kann es die Software sein). Wenn es sich um Empfangsdaten handelt, hilft eventuell ein größerer Puffer (Option /C:<Puffer> beim Aufruf von QuickBASIC) oder eine passende ON ERROR GOTO- Behandlung.


F70 Permission denied
3 Ursachen sind möglich:
Bei Diskette: sie ist schreibgeschützt oder das Laufwerk ist defekt.
Bei Netzwerkbetrieb: es steht eine Sperre an - dann muss man warten.
Bei Netzwerkbetrieb: der Befehl UNLOCK wurde mit Parametern aufgerufen, die nicht zum vorherigen LOCK-Befehl passen.
F71 Disk not ready
Der Datenträger ist nicht bereit.

Warten bis das Laufwerk bereit ist, ggf. Laufwerk und Datenträger prüfen


F72 Disk Media Error
Beim Lesen oder Schreiben wurde ein Hardwarefehler gemeldet.
F74 Rename across Disks
In den Dateispezifikationen fürs Umbenennen sind unterschiedliche Laufwerke angegeben.

Rename funktioniert nur innerhalb der gleichen Partition.


F75 Path/File Access Error
Die angegebene Pfad/Dateispezifikation enthält einen Fehler.
F76 Path not found
Die angegebene Pfadspezifikation ist von der Syntax her korrekt, nur den Pfad gibt es nicht.
Seite zuletzt geändert am 26.1.2007