Datei öffnen & auslesen in TurboPascal

Dieses Thema im Forum "Programmieren" wurde erstellt von dragon_MF, 2. Januar 2003.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. dragon_MF

    dragon_MF Megabyte

    Registriert seit:
    17. August 2001
    Beiträge:
    1.109
    C:\TP\BIN\zahlen.txt\');
    reset(dateivar);
    while not EoF(dateivar) do begin
    read(dateivar,Ausgabe);
    write(Ausgabe);
    close(dateivar);
    end;
    readln;
    END.

    Die Datei zahlen.txt existiert bereits mit Inhalt.
    Wenn ich dieses Programm aber nun starte, erhalte ich in der Zeile "while not eof..." die Fehlermeldung, dass die Datei angeblich nicht geöffnet sei. Doch dies ist sie doch mit "reset(dateivar)" oder etwa nicht?
    Gruß

    Martin
     
  2. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Handtuch\' :-)

    Man stört sich wieder...

    MfG & CU
     
  3. dragon_MF

    dragon_MF Megabyte

    Registriert seit:
    17. August 2001
    Beiträge:
    1.109
    naja, erst umwandeln is ja etwas umständlicher als es sein muss, ne...
    Ich versuch\'S nachher mal über file ob es dann irgendwie direkt geht...

    @IOResult: aha.

    Ich danke dir an dieser Stelle für deine (ausdauernde) Hilfe, falls nochwas ist, melde ich mich, ansonsten schönen Tag noch und cu
     
  4. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Hi...

    prinzipiell kannst Du auch mit strings rechnen, nur müssen diese vorher nach int umgewandelt werden. Ich glaube das hatte ich hier schon gepostet, aber für Dich noch mal die Funktion:

    FUNCTION StrToInt(Text: STRING): LongInt;
    VAR Zahl: LongInt;
    CODE: INTEGER;
    BEGIN
    VAL(Text, Zahl, CODE);
    StrToInt := Zahl;
    END;

    Du kannst aber auch statt der DateiVar TEXT, DateiVar FILE, oder was auch immer :-) verwenden.

    Achso: Zu IOResult. Das ist nichts weiter wie eine Fehlerbehandlung für E/A Operationen. Falls also z.B. eine Datei nicht gefunden wird (o. angelegt), kommt eben eine kontrollierte Fehlermeldung und Dein Programm bleibt in der Laufzeit. Lässt Du dagegen IOResult weg, stürzt Dein Programm mit einem Laufzeitfehler (Runtim Error) ab.

    IOResult sollte also immer für Dateioperationen verwendet werden.

    MfG & CU
     
  5. dragon_MF

    dragon_MF Megabyte

    Registriert seit:
    17. August 2001
    Beiträge:
    1.109
    ja stimmt, das funktioniert soweit, das Problem ist nur, dass die ausgabe nur zum test war und ich eigentlich zahlen aus der textdatei auslesen lassen möchte, mit denen ich dann mathematische Operationen durchgführe, das geht mit strings ja schlecht, oder?
    Gruß

    Martin
     
  6. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Eingabe <Dateiname> oder Tasten [Strg-Untbr] für Abbruch : \');
    READLN(FileName);
    END;

    PROCEDURE Generieren;
    BEGIN
    ASSIGN(DateiVar, FileName);
    RESET(DateiVar);
    WHILE NOT EoF(DateiVar) DO
    BEGIN
    READLN(DateiVar, Ausgabe);
    WRITELN(Ausgabe);
    END;
    CLOSE(DateiVar);
    end;

    BEGIN
    Input;
    Generieren;
    READLN;
    END.

    Es läuft fehlerfrei. An der IOResult arbeite ich aber noch, die macht irgendwie Probleme. Beachte vor allem die Änderungen in den Variablen.

    MfG & CU
    [Diese Nachricht wurde von SourceLE am 07.01.2003 | 09:31 geändert.]
     
  7. dragon_MF

    dragon_MF Megabyte

    Registriert seit:
    17. August 2001
    Beiträge:
    1.109
    so geschehen...
     
  8. dragon_MF

    dragon_MF Megabyte

    Registriert seit:
    17. August 2001
    Beiträge:
    1.109
    weiß nich, wie das wär... ;)
    Hilft aber leider auch nich, Lesefehler bleibt.
     
  9. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Hi...

    wie wär\'s wenn Du unter USES CRT auch noch DOS einträgst?
    Also USES CRT, DOS;

    MfG & CU
     
  10. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Nö! Jetzt bin ich auch ratlos. Schick mal Dein Progi rüber, vielleicht seh ich da mehr...
     
  11. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    s und INT\'s (Interfaces) enthalten.

    TVision kannst Du weglassen. Object wahrscheinl. vorerst auch.

    Für Deine Quellcodes erstellst Du Dir z.B. ein Verzeichnis EXAMPLE o. MyCode; ist aber egal. Dort kommt aber auch die .TXT hin.

    Das Bin Verzeichniss sollte aber sauber bleiben (sonst löschst du versehentl. noch was falsches).

    MfG & CU
     
  12. dragon_MF

    dragon_MF Megabyte

    Registriert seit:
    17. August 2001
    Beiträge:
    1.109
    jo, hab nüscht gesehen, musste noch nen readln einbauen, aber die ERgibnmisse nun hier:
    Wenn ich nur den dateiname eingebe nölt er wie TP rum, dass die Datei nich da is( FEHLER!...)
    Wenn ich den Pfad komplett eingebe in deine Überprüfung, läuft diese erfolgreich durch und ich erhalte auch wieder in der Zeile read(dateivar,ausgabe) die Meldung, dass ein Lesefehler aufgetreten ist...
    Bist du jetzt schlauer?
     
  13. dragon_MF

    dragon_MF Megabyte

    Registriert seit:
    17. August 2001
    Beiträge:
    1.109
    @erstens: Stimmt, ich habe das reset in erinnerung in der schleife gehabt, was zwar noch unsinniger gewesen wäre, aber dadurch dachte ich es wäre zumindeest geögffnet gewesen....egal, hab ich ja behiben....

    @zweitens: Alle entsprechenden ist gut: Für units ist das unit-verzeichnis bereits eingetragen und was bitte sollen die anderen sein? meine tpu\'S liegen auch bei den units (sind ja welche) dahe verstehe ich die trennung nich und object-verzeichnis für mein proggi brauch ich wohl kaum und wozu is include? hab nur mal mitbekommen, dass man in C++ dateien includiert, doch hier sind es doch alles dateien, die in "units" liegen, die mit verwendet werden....
    ich bin etwas ratlos, wo ich die txt hinpacken muss und was ich dort angeben soll...
    Zumal eine Ausgabe in eine datei im bin-verzeichnis in eine text-datei mal erfolgreich war...
    [Diese Nachricht wurde von dragon_MF am 06.01.2003 | 20:04 geändert.]
     
  14. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    wurde nicht gefunden.\');
    HALT; END;
    CLOSE(FileSource);
    FileChk:=(IOResult=0)
    END;

    Du musst bloss noch Deine Variablen anpassen.

    MfG & CU
    [Diese Nachricht wurde von SourceLE am 06.01.2003 | 20:01 geändert.]
     
  15. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    )
    reset(dateivar); // zum Bearbeiten geöffnet
    while not EoF(dateivar) do begin // Widerhole bis EOF
    read(dateivar,Ausgabe); //Übergabe der Variablen
    write(Ausgabe); //auf Bildschirm ausgeben
    close(dateivar); //Datei schliessen** Und an dieser Stelle zu früh
    end; //Wiederholung Ende
    readln; //Taste erwartet
    ...

    **Nach bereits EINEM Durchlauf wird Deine Datei geschlossen; nicht erst wenn END OF FILE erreicht wird. Das kann nach z.B. erst 100 Durchläufen der Fall sein! Darum darf die Datei erst hinter der WHILE geschlossen werden.

    Nun Frage 2. Du musst evtl einige Einstellungen im Compiler vornehmen. Unter TP findest du unter OPTIONEN|DIRECTORY alle Einstellungen für die Includedateien und für die Erzeugung von EXE/UNIT und Projektdateien. Sie mal dort nach und trage alle entsprechenden Verzeichnisse ein.

    Bin gespannt ob\'s dann funzt, müsste aber...

    MfG & CU
    [Diese Nachricht wurde von SourceLE am 06.01.2003 | 19:23 geändert, wegen grammatikalischen Fehlern. :-)]
    [Diese Nachricht wurde von SourceLE am 06.01.2003 | 19:28 geändert.]
     
  16. dragon_MF

    dragon_MF Megabyte

    Registriert seit:
    17. August 2001
    Beiträge:
    1.109
    zum ersten: Wieso? reset öffnet doch und setzt auf anfang...vor EoF kam kein befehl zum schließen!

    Aber egal, das is ja jetz gelöst.
    Ich hab die Pfadangabe weggelassen, sowohl proggi als auch datei liegen in C:\TP\BIN, doch ohne Pfadangabe sagt er, dass er die Datei nicht finden konnte...also war das vorher mit dem pfad wohl richtig, nur warum hat er dann einen Lesefehler?
    Gruß

    Martin
     
  17. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Hi...

    zunächst noch mal zu Deiner ersten Frage. Das konnte einfach nicht gehen, da beim ersten Durchlauf die Datei schon vor EOF geschlossen wurde.

    Nun zu Deinem 2. Problem. Eigentl. sehe ich da keinen Fehler, es könnte nur sein das die Verzeichnisangabe für die Datei ZAHLEN.TXT falsch ist, wenn nicht sogar überflüssig. Wenn das Programm und die Datei in ein und dem selben Verzeichnis sind, kann die Pfadangabe ausgelassen werden.

    Am besten wäre aber du baust in Dein Progi eine manuelle Eingabe für die Dateiangabe und eine Fehlerbehandlung ein.

    MfG & CU
     
  18. dragon_MF

    dragon_MF Megabyte

    Registriert seit:
    17. August 2001
    Beiträge:
    1.109
    Danke. stimmt, sollte nicht sein...doch es funzt leider noch immer nicht... ;-(
    Habs rausgenommen (aus der while-Schleife) und nun erhalte ich die Meldung, dass ein Lesefehler bei Laufwerk/Diskette aufgetreten sei (is keine Diskette, is auf Festplatte).
    Woran kann das nun wieder liegen?
     
  19. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Hi...

    wenn ich das hier richtig sehe, darf das CLOSE(DATEIVAR) nicht in der WHILE-Schleife stehen, sondern erst hinter >>> END;

    Versuch\'s mal...

    MfG & CU
     
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen