 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Nullchecker
Anmeldungsdatum: 03.08.2013 Beiträge: 34
|
Verfasst am: 18.06.2014, 15:05 Titel: Problem mit Datenausgabe auf Bildschirm |
|
|
Mein Testprogramm gibt nur den Text "Das ist ein Test!" auf dem Bildschirm aus. Der Text "Der Test hat geklappt!" wird nicht angezeigt. Der Cursor blinkt am Ende dort, wo er auch blinken würde, wenn alles angezeigt würde. In der Datei Test.txt sind alle Daten vorhanden(also hat er sie richtig eingelesen). Wo liegt mein Fehler?
Hier das Programm:
DIM AS INTEGER x
DIM AS INTEGER y
DIM AS INTEGER i
Dim AS STRING tmp (1 TO 10, 10), dateiname="Test.txt"
Dim As Integer nr = FREEFILE
tmp(1, 1)= "Das"
tmp(1, 2)= "ist"
tmp(1, 3)= "ein"
tmp(1, 4)= "Test!"
tmp(2, 1)= "Der"
tmp(2, 2)= "Test"
tmp(2, 3)= "hat"
tmp(2, 4)= "geklappt!"
OPEN dateiname FOR Output AS #nr
WRITE #nr, tmp(1, 2), tmp(1, 2), tmp(1, 3), tmp(1, 4)
WRITE #nr, tmp(2, 1), tmp(2, 2), tmp(2, 3), tmp(2, 4)
CLOSE #nr
x= 1
y= 0
OPEN dateiname FOR INPUT AS #nr
DO
LINE Input #nr, tmp(x, y)
FOR i = 0 TO 3
y= y+1
PRINT tmp(x, y)
NEXT
x= x+1
LOOP UNTIL EOF (nr)
Sleep |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4700 Wohnort: ~/
|
Verfasst am: 18.06.2014, 15:42 Titel: |
|
|
LINE INPUT liest eine komplette Zeile ein. Entweder du liest alle acht Variablen einzeln mit INPUT ein (Angabe mehrerer Variablen hintereinander, aber nicht eines ganzen Arrayfeldes; oder viel besser noch über eine Schleife), oder, weil es zwei Zeilen sind, zweimal LINE INPUT - dann hast du aber alle Anführungszeichen vom WRITE noch drin.
Dass dein Test beim ersten Mal angeblich funktioniert, ist irreführend - du schreibst in die Datei nämlich, wenn du das nochmal genau anschaust, in Wirklichkeit
Code: | "ist","ist","ein","Test!"
"Der","Test","hat","geklappt!" |
(Tippfehler in Zeile 20, der hier aber sogar hilfreich ist)
Ich würde das so auslesen:
Code: | for zeile as integer = 1 to 2
for wort as integer = 1 to 4
input #nr, tmp(zeile, wort)
next
next |
_________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 18.06.2014, 15:45 Titel: WRITE und INPUT |
|
|
Hallo,
du kannst mit LINE INPUT nicht mehrere "Spalten" eines Arrays automatisch befüllen lassen. LINE INPUT liest den ganzen Inhalt der Zeile - vom Anfang bis exklusive zum Zeilenumbruch - in einen einzigen String ein. Im ersten Durchlauf ist x=1 und y=0, das heißt "LINE INPUT #nr, tmp(x,y)" liest die ganze Zeile in die einzelne Array-Zelle tmp(1,0) ein. Mit den Zellen tmp(1,1) bis tmp(1,10) passiert dabei gar nichts. Die bleiben, wie sie sind.
Deine For-Schleife mit dem Laufindex i ist auch komisch, weil du i nirgends verwendest.
Wenn du das hier
Code: | WRITE #nr, tmp(1, 1), tmp(1, 2), tmp(1, 3), tmp(1, 4) |
wieder spaltenweise einlesen willst, musst du's so schreiben:
Code: | INPUT #nr, tmp(z, 1), tmp(z, 2), tmp(z, 3), tmp(z, 4) |
wobei z der Index der aktuellen Zeile wäre.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4700 Wohnort: ~/
|
Verfasst am: 18.06.2014, 16:00 Titel: |
|
|
Übrigens solltest du hier zum Testen beim Einlesen lieber ein anderes Array verwenden und nicht das, welches schon mit den richtigen Werten vorbelegt ist - sonst weißt du ja nicht, ob die Werte wirklich richtig gelesen wurden oder (wie hier) nur wegen der Vorbelegung noch stimmen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Nullchecker
Anmeldungsdatum: 03.08.2013 Beiträge: 34
|
Verfasst am: 18.06.2014, 18:04 Titel: |
|
|
Vielen Dank für die schnellen Antworten von euch.
@Sebastian: Gute Erklärung, habe Programm nach Deiner Anleitung geändert,
funktioniert jetzt. Den Tippfehler beim ersten Write hatte ich übersehen. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|