Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   try & except Problem (https://www.delphipraxis.net/71766-try-except-problem.html)

atreju2oo0 21. Jun 2006 06:27

Re: try & except Problem
 
mach aus dem rewrite mal nen normales write...

Waldteufel 21. Jun 2006 07:01

Re: try & except Problem
 
Zitat:

Zitat von atreju2oo0
mach aus dem rewrite mal nen normales write...

Aber nur aus dem zweiten. ;-) Rewrite öffnet nämlich die Datei...

alzaimar 21. Jun 2006 07:15

Re: try & except Problem
 
Zitat:

Zitat von Waldteufel
Zitat:

Zitat von atreju2oo0
mach aus dem rewrite mal nen normales write...

Aber nur aus dem zweiten. ;-) Rewrite öffnet nämlich die Datei...

Stimmt zwar, aber im Kontext des Codes ist es falsch (WriteLn statt Write, beide auf Writeln, dafür das Reset auf Rewrite):
Delphi-Quellcode:
try
  assignfile (datei, 'rekord.txt');   //rekord wird geladen
  reset (datei);
  readln (datei, rekordhalter);
  readln (datei, punkttxt);
  closefile (datei);
except
  reset (datei);
  rewrite (datei, 'NoName');
  rewrite (datei, '10');
  closefile (datei);
  assignfile (datei, 'rekord.txt');
end;
Da stimmen mehrere Sachen nicht.
  • Erstmal muss das AssignFile VOR das Try.
  • 'Reset' öffnet eine Datei zum Lesen, 'Rewrite' öffnet sie zum Schreiben, initialisiert sie aber (sie ist also nach dem Rewrite komplett leer).
  • Den Dateinamen solltest Du irgendwo als Konstante deklarieren.
  • Dein Codefragment setzt 'Rekordhalter' und 'PunkteTxt' nur dann, wenn die Datei existiert, sonst ist der Inhalt der Variablen undefiniert.
Dann würde ich das anders lösen: Der Inhalt der Datei kann nur gelesen werden, wenn die Datei auch existiert, bzw. wird sie mit Vorgabewerten belegt, wenn sie noch nicht exisitiert:
Delphi-Quellcode:
Const
  MyFilename = 'rekord.txt';
  VorgabeName = 'NoName';
  VorgabePunkte = '10';
...
  assignfile (datei, MyFileName);  
  If Not FileExists (MyFileName) Then Begin // Wenn die Datei nicht existiert, wird sie mit Vorgabewerten belegt
    ReWrite (datei);                       // Öffnet die Datei zum Schreiben und setzt den Dateiendezeiger nach vorne
    Try                                    // Fehlerbehandlung für 'rewrite' fehlt.
      rekordhalter := VorgabeName;         // Jetzt sind die Variablen belegt
      PunktTxt := VorgabePunkte;
      WriteLn (datei, RekordHalter);       // Vorgabewerte in die Datei schreiben
      WriteLn (datei, PunktTxt);
    Finally
      CloseFile (Datei);
    End
  End
  Else Begin                               // Datei existiert, kann also gelesen werden
    reset (datei);                         // Hier müsste noch eine komplette Fehlerbehandlung rein
    Try                                    // Denn die Datei kann gesperrt sein, oder sonstwas
      readln (datei, rekordhalter);
      readln (datei, punkttxt);
    Finally
     closefile (datei);
    End
  End;
...
Die Fehlerbehandlung für das Öffnen der Datei kann man durch umschließen der gesamten Routine mit einem Try...Except erreichen, nurdas das etwas ungenau ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:36 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz