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:

Runtime Error: file past end, handle #1

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



Anmeldungsdatum: 02.11.2006
Beiträge: 2

BeitragVerfasst am: 02.11.2006, 03:40    Titel: Runtime Error: file past end, handle #1 Antworten mit Zitat

Hallo,

ich habe ein kleines Programm geschrieben, dessen Sinn und Zeck es ist einige Werte (26273) aus einer Datei zu lesen und dann jeden einzelnen Wert 4-fach in einer neuen Datei zu schreiben.

Code:

OPEN "c:\old.txt" FOR INPUT AS #1
OPEN "c:\new.txt" FOR OUTPUT AS #2

zeile = 1
anzahl = 4

FOR a = 1 TO 26273

        FOR i = 1 TO zeile
            LINE INPUT #1, wert$
        NEXT i

        FOR j = 1 TO anzahl
            PRINT #2, wert$
            PRINT wert$
        NEXT j

        zeile = zeile + 1
NEXT a

CLOSE #1
CLOSE #2


Bedauerlicherweise schreibt das Programm nur 912 Werte in die Datei und bricht dann mit der Meldung ab "Runtime Error: file past end, handle #1". Was mache ich falsch?

Gruesse
Orange
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Lutz Ifer
Grillmeister


Anmeldungsdatum: 23.09.2005
Beiträge: 555

BeitragVerfasst am: 02.11.2006, 11:19    Titel: Antworten mit Zitat

Code:
OPEN "c:\old.txt" FOR INPUT AS #1
OPEN "c:\new.txt" FOR OUTPUT AS #2

anzahl = 4

DO
        LINE INPUT #1, wert$

        FOR j = 1 TO anzahl
            PRINT #2, wert$
            PRINT wert$
        NEXT j
LOOP UNTIL EOF(1)

CLOSE


hab mir erlaubt, noch ne kleine verbesserung vorzunehmen: der einsatz einer for-next-schleife macht dein programm starr, es ließt immer 26273 zeilen ein, egal wie lang die datei ist, eine do-loop-variante ließt immer die komplette datei, unabhängig von ihrer größe. eof(1) ist eine funktion, die einen wert <> 0 zurückgibt, wenn das ende der datei erreicht ist.

dein fehler war, dass du nicht bedacht hast, dass es auch innerhalb von dateien soetwas wie einen cursor gibt. soll heißen, du bist davon ausgegangen, dass du für jeden durchgang der for-next schleife alle zeilen von 1 bis momentane-stelle einlesen musst, nur um an die aktuelle zeile zu kommen, was aber falsch ist. mehrere line-inputs hintereinander lesen schön brav immer die jeweils folgende zeile ein.

gruß
Lutz böse Ifer
_________________
Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elvis



Anmeldungsdatum: 01.06.2006
Beiträge: 818
Wohnort: Deutschland, BW

BeitragVerfasst am: 02.11.2006, 11:45    Titel: Antworten mit Zitat

Ich meine, die DO...LOOP-Schleife muss anders aussehen...
Code:

OPEN "c:\old.txt" FOR INPUT AS #1
OPEN "c:\new.txt" FOR OUTPUT AS #1

anzahl = 4

DO UNTIL EOF(1)
             LINE INPUT #1, wert$
             
             FOR j = 1 TO anzahl
                    PRINT #2, wert$
                    PRINT wert$
             NEXT j
LOOP

Wenn es anders ist wird, wenn das Dateiende erreicht ist, noch ein
Durchgang gemacht, weil erst am Ende der Schleife überprüft wird,
ob das Dateiende erreicht ist. zwinkern


Grüße, Elvis
_________________
Geforce 7300GT (256MB GDDR3, Gainward) -- 2x 512MB (DDR2 800, MDT) -- AMD Athlon64 X2 EE 3800+ -- Asrock ALiveNF5-eSATA2+
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Lutz Ifer
Grillmeister


Anmeldungsdatum: 23.09.2005
Beiträge: 555

BeitragVerfasst am: 02.11.2006, 12:11    Titel: Antworten mit Zitat

Nö, sind beide möglich, aber in der tat, deine version ist besser, weils bei leeren dateien keinen runtime-error gibt.

Lutz böse Ifer
_________________
Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
orange



Anmeldungsdatum: 02.11.2006
Beiträge: 2

BeitragVerfasst am: 03.11.2006, 12:48    Titel: Antworten mit Zitat

Hallo,

vielen Dank, das funktioniert sehr gut! Ja, das stimmt ich habe nicht so viel Ahnung was das Programmieren mit und ohne Basic angeht. weinen

Viele Gruesse
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 QBasic. 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