Autor Beitrag
HorusKaton
Hält's aus hier
Beiträge: 5

Win XP
Delphi 7, HTML
BeitragVerfasst: Mo 26.05.08 22:22 
Wie im Titel schon erwähnt möchte ich (mittels eines Buttons) eine Textdatei öffnen, die darin gespeicherte Zahl ändern und dann auch sofort wieder speichern. Leider klppt das nicht so ganz, nach jedem Klick auf den Button steht in meiner Datei nichts mehr. So sieht der Code aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button1Click(Sender: TObject);
var merker : integer;
Datei : textfile;
begin
Assignfile(Datei, 'Antwort1.qai2');
Reset(Datei);
readln(Datei, merker);
merker := merker + 1;
Closefile(Datei);
Assignfile(Datei, 'Antwort1.qai2');
Rewrite(Datei);
writeln(Datei, merker);
end;


Weiß jemand von euch, wo der Fehler liegt?

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mo 26.05.2008 um 23:56
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 26.05.08 22:42 
in zeile 11, sagst du, dass er deine datei zurücksetzen soll...
HorusKaton Threadstarter
Hält's aus hier
Beiträge: 5

Win XP
Delphi 7, HTML
BeitragVerfasst: Mo 26.05.08 23:00 
Mmh, und was soll ich jetzt machen? Ich programmiere noh nicht lange Delphi, aber die Zeile zu löschen wäre definitiv falsch
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 26.05.08 23:07 
tja, dann hast du ein problem ;-)

aber mal im ernst, du kannst bei 'ner textdatei nicht wahlfrei zurückschreiben... wenn dann brauchst du 'ne typisierte datei ... z.b. 'n file of char

eine andere möglichkeit ist, die daei komplett einzulesen und gesammelt zurückzuschreiben... (a) im hauptspeicher (da könntest dann auch den rewrite nehmen) oder (b) über eine tmp. datei ...

<HTH>
HorusKaton Threadstarter
Hält's aus hier
Beiträge: 5

Win XP
Delphi 7, HTML
BeitragVerfasst: Mo 26.05.08 23:12 
Mmh, ehrlich gesagt hab ich jetzt zwar nicht wirklich verstanden was du meinst (typisch n00b eben) aber ich kann ja mal ein paar Sachen versuchen die ich vermute, die du meinst^^
Muck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98
Erhaltene Danke: 8

Win 8, Win 7, Vista, Win XP
Delphi XE3, Delphi 2009, Delphi 2007, Delphi 5
BeitragVerfasst: Di 27.05.08 00:18 
Hallo,

die Datei ist leer, da ein CloseFile(Datei) am Ende fehlt. Die Dateipuffer werden erst bei Schliessen der Datei oder beim Aufruf der Prozedur Flush(Datei) zur Platte geschrieben.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button1Click(Sender: TObject);
var merker : integer;
Datei : textfile;
begin
if fileexists('Antwort1.qai2') then begin
  Assignfile(Datei, 'Antwort1.qai2');
  Reset(Datei);
  readln(Datei, merker);
  Closefile(Datei);
end else merker:=0;
merker := merker + 1;
Assignfile(Datei, 'Antwort1.qai2');
Rewrite(Datei);
writeln(Datei, merker);
CloseFile(Datei);
end;


So sollte es klappen.

bye Markus
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 765
Erhaltene Danke: 130



BeitragVerfasst: Di 27.05.08 00:18 
Mit ReadLn kannst Du nur Strings auslesen (merker). Dieser String wird in Integer (StrToInt) umgewandelt, erhöht, wieder in einen String (IntToStr) verwandelt und kann dann geschrieben werden.

ub60
Muck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98
Erhaltene Danke: 8

Win 8, Win 7, Vista, Win XP
Delphi XE3, Delphi 2009, Delphi 2007, Delphi 5
BeitragVerfasst: Di 27.05.08 01:33 
Hallo,

das Programm rennt ganz tadellos, Du kannst mit readln integer aus einer Textdatei lesen.
Getestet mit Delphi 7 und Delphi 2007. Delphi macht fuer Dich die Umwandlung automatisch.

bye

Markus
HorusKaton Threadstarter
Hält's aus hier
Beiträge: 5

Win XP
Delphi 7, HTML
BeitragVerfasst: Di 27.05.08 13:08 
@Muck: Danke, aber es geht immer noch nicht. Egal wie oft ich auf den Button klicke, wenn ich die Datei manuell öffne steht da immer noch 0 drin.
Und verstehe ich deinen Code jetzt richtig, dass überprüft wird, ob die Datei besteht, wenn ja, dann wird sie geöffnet und in den merker geschrieben und wenn sie nicht besteht, dann soll merker = 1 in die Datei geschrieben werden?
Muck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98
Erhaltene Danke: 8

Win 8, Win 7, Vista, Win XP
Delphi XE3, Delphi 2009, Delphi 2007, Delphi 5
BeitragVerfasst: Di 27.05.08 14:31 
Hallo,

nun wie gesagt, ich habe diesen kleinen Code auf meinem Computer mit Delphi 7 und Delphi 2007 getestet. Laeuft ganz problemlos. Ursache muss also woanders liegen.
- z.B. Andere Delphi Version
- Andere Compiler Schalter
- Vielleicht hast Du die Datei zweimal auf der Platte und checkst nicht die richtige Datei
- Vielleicht musst Du die alte Datei einmal loeschen

Aendere doch mal den Dateinamen in z.B. 'c:\test.txt' und versuche es nochmal.

Bei mir laeuft alles mit einer deutschen Delphi 7 und einer amerikanischen Delphi 2007 Version.

Bye

Markus
HorusKaton Threadstarter
Hält's aus hier
Beiträge: 5

Win XP
Delphi 7, HTML
BeitragVerfasst: Di 27.05.08 14:45 
Ok, mein Fehler, hab deinen Code falsch kopiert, sodass ich ein kleines begin-end-Problem hatte. Jetzt gehts aber, vielen dank, damit wäre mein problem gelöst