Autor Beitrag
Martello
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Di 10.03.09 23:28 
Hallo,
ich versuche gerade nach dem Motto lieber spät als garnicht von Turbo Pascal auf Delphi umzusteigen:-)
Es gelingt mir nicht, eine einfache Textdatei zu öffnen und zeilenweise anzeigen zu lassen.
Mit IO-Fehlermeldungen bricht der Ablauf jeweils ab. Der Compiler hingegen ist vollauf zufrieden.
In meiner TP-Denkart fällt mir nichts ein, woran es liegen könnte...
Kann es sein, dass die Datei zwar geöffnet wird, aber bei Button2Click nicht mehr als offen erkannt wird?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.Button1Click(Sender: TObject);
var inn: textfile;
begin
assignfile(inn,'c:\ort\text.txt');
reset(inn);
Edit2.Text:='geöffnet';
end;

procedure TForm1.Button2Click(Sender: TObject);
var zeile: string;
    inn: textfile;
begin
     readln(inn,zeile);
     Edit1.Text:=zeile;
end;

procedure TForm1.Button3Click(Sender: TObject);
var inn:textfile;
begin
closefile(inn);
end;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 10.03.09 23:30 
Hallo und :welcome: !

In den drei ButtonClicks hast du drei verschiedene Variablen. Du öffnest also die Datei in der ersten, in der zweiten Prozedur ist deine Variable aber nicht initialisiert. Das sollte dir der Compiler auch als Warnung sagen :!:

Am besten deklariere die Variable als Feld deines Formulars:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
TForm1 = class(TForm)
...
private
  inn: textfile;
end;
Martello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Di 10.03.09 23:37 
Dass das hier so schnell gehen würde, hätte ich ja nie zu hoffen gewagt:-)
Ich glaube, ich bleibe bei Delphi...

Vielen Dank.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 10.03.09 23:53 
user profile iconjaenicke hat folgendes geschrieben:
Am besten deklariere die Variable als Feld deines Formulars:
ausblenden Delphi-Quelltext
1:
TForm1 = class(TForm)					

Oder besser, eröffnet und schlieeßt die Datei in jeder Prozedur. Denn ich bin mir hundert Prozent sicher, dass wenn er mit der globalen Varaibel arbeitet, dass er irgendwann deren Zustand nicht mehr kennt oder schlimmer, die Datei wird irgendwo geschlossen, und dann ist das Geschrei hier im Forum wieder groß, weil das Schreiben oder Lesen fehlschlägt.
Martello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Mi 11.03.09 12:46 
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben:
Am besten deklariere die Variable als Feld deines Formulars:
ausblenden Delphi-Quelltext
1:
TForm1 = class(TForm)					

Oder besser, eröffnet und schlieeßt die Datei in jeder Prozedur. Denn ich bin mir hundert Prozent sicher, dass wenn er mit der globalen Varaibel arbeitet, dass er irgendwann deren Zustand nicht mehr kennt oder schlimmer, die Datei wird irgendwo geschlossen, und dann ist das Geschrei hier im Forum wieder groß, weil das Schreiben oder Lesen fehlschlägt.


Aus TP-Sicht war die Frage nach dem Datei-Status für mich nie relevant: Am Anfang geöffnet und am Schluß wieder geschlossen. Aber hier nach jedem Klick wieder schließen, finde ich nicht sehr sinnvoll, schließlich soll die Textdatei ja Zeile für Zeile ausgelesen werden. Die aktuelle FilePointer-Position ginge aber beim Schließen jedes mal verloren. Nein, die Übersicht über den Status offener Dateien sollte man als Entwickler schon jederzeit im Blick haben, zumindest bei kleinen Projekten :wink: .

Gruß
Martello
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 11.03.09 17:27 
Unsauberer Code fängt im Detail an und das ist einfach unsauber. Jetzt kann er es sich noch merken, aber wie sieht es in drei Wochen aus oder wenn jemand anders den Code in die Hände bekommt? IUnd sich die dateiposition in einer Variablen zu merken, sollte auch nicht so schwer sein.