Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Problem mit Datenausgabe auf Bildschirm

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Nullchecker



Anmeldungsdatum: 03.08.2013
Beiträge: 34

BeitragVerfasst am: 18.06.2014, 15:05    Titel: Problem mit Datenausgabe auf Bildschirm Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4700
Wohnort: ~/

BeitragVerfasst am: 18.06.2014, 15:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 18.06.2014, 15:45    Titel: WRITE und INPUT Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4700
Wohnort: ~/

BeitragVerfasst am: 18.06.2014, 16:00    Titel: Antworten mit Zitat

Ü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
Benutzer-Profile anzeigen Private Nachricht senden
Nullchecker



Anmeldungsdatum: 03.08.2013
Beiträge: 34

BeitragVerfasst am: 18.06.2014, 18:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz