 |
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 |
orange
Anmeldungsdatum: 02.11.2006 Beiträge: 2
|
Verfasst am: 02.11.2006, 03:40 Titel: Runtime Error: file past end, handle #1 |
|
|
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 |
|
 |
Lutz Ifer Grillmeister

Anmeldungsdatum: 23.09.2005 Beiträge: 555
|
Verfasst am: 02.11.2006, 11:19 Titel: |
|
|
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 Ifer _________________ Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft. |
|
Nach oben |
|
 |
Elvis

Anmeldungsdatum: 01.06.2006 Beiträge: 818 Wohnort: Deutschland, BW
|
Verfasst am: 02.11.2006, 11:45 Titel: |
|
|
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.
Grüße, Elvis _________________ Geforce 7300GT (256MB GDDR3, Gainward) -- 2x 512MB (DDR2 800, MDT) -- AMD Athlon64 X2 EE 3800+ -- Asrock ALiveNF5-eSATA2+ |
|
Nach oben |
|
 |
Lutz Ifer Grillmeister

Anmeldungsdatum: 23.09.2005 Beiträge: 555
|
Verfasst am: 02.11.2006, 12:11 Titel: |
|
|
Nö, sind beide möglich, aber in der tat, deine version ist besser, weils bei leeren dateien keinen runtime-error gibt.
Lutz Ifer _________________ Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft. |
|
Nach oben |
|
 |
orange
Anmeldungsdatum: 02.11.2006 Beiträge: 2
|
Verfasst am: 03.11.2006, 12:48 Titel: |
|
|
Hallo,
vielen Dank, das funktioniert sehr gut! Ja, das stimmt ich habe nicht so viel Ahnung was das Programmieren mit und ohne Basic angeht.
Viele Gruesse |
|
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.
|
|