Autor Beitrag
tante_tilli
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 11.11.05 18:45 
Hi Leute,
Ich hab seit ein paar Wochen angefangen in Delphi zu programmieren.
Ich hab jetzt ein kleines Programm geschrieben mit dem ich Texdateien, die 2 Eingaben aus 2 Edit Feldern speichern, erstellen, löschen und bearbeiten kann. Die Textfiles die im Ordner der exe Datei enthalten sind werden über eine Listbox angezeigt. Über die Listbox wird auch
der Dateiname ausgelesen. Das neu erstellen und das löschen klaptt schon ganz gut, aber ich weis nicht wie ich die Dateien zum bearbeiten einlesen soll.

Könnt ihr mir bitte helfen ?
Das Programm hab ich mit Delphi 2005 erstellt.
Das Programm hab ich an den Post angehängt.

Hier noch der Quelltext
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
unit Eintrag;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    ListBox1: TListBox;
    name: TEdit;
    alter: TEdit;
    speichern: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure speichernClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  searchResult:TSearchRec;
  name,alter,bearbeiten,filename:shortstring;
  data:textfile;
  listboxindex:integer;


implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
if FindFirst('*.txt', faAnyFile, searchResult) = 0 then
repeat
listbox1.items.add(searchResult.Name);
until FindNext(searchResult) <> 0;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
alter.Visible := true;
name.Visible := true;
speichern.Visible := true;
end;

procedure TForm1.speichernClick(Sender: TObject);
begin
filename:=name.Text+'.txt';
AssignFile(data,filename);
rewrite(data);
writeln(data,name.text,',',alter.text);
Closefile(data);

listbox1.Clear;
if FindFirst('*.txt', faAnyFile, searchResult) = 0 then
repeat
listbox1.items.add(searchResult.Name);
until FindNext(searchResult) <> 0;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
listboxindex:=listbox1.ItemIndex;
edit1.Text:=floattostr(listboxindex);
Edit2.Text:=ListBox1.Items.Strings[ListBox1.ItemIndex];

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
alter.Visible := true;
name.Visible := true;
speichern.Visible := true;

?????????????????????????????????????????????
was muss hier hin um die Datei auszulesen ?
end;

procedure TForm1.Button3Click(Sender: TObject);
var
pfad:shortstring;
begin
pfad:=extractfilepath(application.exename);
deletefile(edit2.text);

listbox1.Clear;
if FindFirst('*.txt', faAnyFile, searchResult) = 0 then
repeat
listbox1.items.add(searchResult.Name);
until FindNext(searchResult) <> 0;
end;

end.


Moderiert von user profile iconGausi: Quote- durch Delphi-Tags ersetzt
Einloggen, um Attachments anzusehen!
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 11.11.05 19:08 
Moin!

Zunächstmal: Du gehst etwas sehr umständlich an das Problem ran, da du für jeden Datensatz eine Datei erstellst. Es wäre sehr viel einfacher, wenn du alle Datensätze in eine Datei speichern würdest. Mach dich mal über INI-Dateien schlau, das sollte dir helfen.

Jetzt zu deinem Programm und den Problemen:
1. Du hast einen krassen Fehler drin: du verwendest FindFirst() ohne anschließend ein FindClose() zu machen! :shock: So gehts richtig:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.FormCreate(Sender: TObject);
begin
  if FindFirst('*.txt', faAnyFile, searchResult) = 0 then
    repeat
      listbox1.items.add(searchResult.Name);
    until FindNext(searchResult) <> 0;
  FindClose(searchResult);
end;

2. Du solltest deinen Code einrücken, damit kann man wesentlich besser den Überblick behalten!
3. Du speicherst die Daten in den Dateien in einer Zeile mit Komma. Besser wäre es, wenn du die beiden Werte in je einer eigenen Zeile speichern würdest:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
filename := name.Text +'.txt';
AssignFile(data,filename);
ReWrite(data);
WriteLn(data,name.text);
WriteLn(data,alter.text);

CloseFile(data);

Dann kannst du so die Daten wieder auslesen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
filename := name.Text +'.txt';
AssignFile(data,filename);
ReSet(data);
ReadLn(data,name.text);
ReadLn(data,alter.text);

CloseFile(data);

cu
Narses
Muffin
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 99

WinXP Pro SP2
D7 Personal
BeitragVerfasst: Sa 12.11.05 20:14 
In dem Fall würde ich zu typisierten Daten raten.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
type datensatz = record
       name: shortstring;
       adresse: shortstring;
     end;

var datei: file of datensatz;


Lesen und Schreiben funktioniert sehr einfach:

ausblenden Delphi-Quelltext
1:
2:
3:
read(datei, datensatz);
edit1.text := datensatz.name;
edit2.text := datensatz.adresse;


ausblenden Delphi-Quelltext
1:
2:
3:
datensatz.name := edit1.text;
datensatz.name := edit2.text;
write(datei,datensatz);


Genaueres findest du hier: www.dsdt.info/tutorials/typdateien/
tante_tilli
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 14.11.05 19:31 
Danke für die tollen Tips ;-)
Werde das nacher gleich mal ausprobieren.