Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Lesen von Zeilen einer Datei


Schweini31 - Mo 14.01.08 17:44
Titel: Lesen von Zeilen einer Datei
Hallo,

ich schreibe gerade einen Vokabeltrainer.

Er kann schon reinschreiben und abspeichern aber leider kann er noch nicht richtig bzw. nur in einem schlechten Programmierstil laden:


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:
procedure TForm1.btSpeichernClick(Sender: TObject);
var ini:Tinifile;

begin
   for i:=0 to StrToInt(lbNummer.Caption)-1 do begin
ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+
    'Sprache.vok');
    ini.WriteString('Vokabeln','Deutsch'+IntToStr(i),lbSprache.Items[i]);
    ini.WriteString('Vokabeln','Fremdsprache'+IntToStr(i),lbFremd.Items[i]);
    ini.Free;
end;

end;

procedure TForm1.btLadenClick(Sender: TObject);
var ini:Tinifile;
begin
ini:=Tinifile.Create(ExtractFilePath(ParamStr(0))+
    'Sprache.vok');
    lbSprache.Items[0]:=ini.ReadString('Vokabeln','Deutsch0','');
    lbFremd.Items[0]  :=ini.ReadString('Vokabeln','Fremdsprache0','');
    lbSprache.Items[1]:=ini.ReadString('Vokabeln','Deutsch1','');
    lbFremd.Items[1]  :=ini.ReadString('Vokabeln','Fremdsprache1','');
    lbSprache.Items[2]:=ini.ReadString('Vokabeln','Deutsch2','');
    lbFremd.Items[2]  :=ini.ReadString('Vokabeln','Fremdsprache2','');
    lbSprache.Items[3]:=ini.ReadString('Vokabeln','Deutsch3','');
    lbFremd.Items[3]  :=ini.ReadString('Vokabeln','Fremdsprache3','');
    lbSprache.Items[4]:=ini.ReadString('Vokabeln','Deutsch4','');
    lbFremd.Items[4]  :=ini.ReadString('Vokabeln','Fremdsprache4','');
    lbSprache.Items[5]:=ini.ReadString('Vokabeln','Deutsch5','');
    lbFremd.Items[5]  :=ini.ReadString('Vokabeln','Fremdsprache5','');
    lbSprache.Items[6]:=ini.ReadString('Vokabeln','Deutsch6','');
    lbFremd.Items[6]  :=ini.ReadString('Vokabeln','Fremdsprache6','');
    lbSprache.Items[7]:=ini.ReadString('Vokabeln','Deutsch7','');
    lbFremd.Items[7]  :=ini.ReadString('Vokabeln','Fremdsprache7','');
    lbSprache.Items[8]:=ini.ReadString('Vokabeln','Deutsch8','');
    lbFremd.Items[8]  :=ini.ReadString('Vokabeln','Fremdsprache8','');
    lbSprache.Items[9]:=ini.ReadString('Vokabeln','Deutsch9','');
    lbFremd.Items[9]  :=ini.ReadString('Vokabeln','Fremdsprache9','');
    lbSprache.Items[10]:=ini.ReadString('Vokabeln','Deutsch10','');
    lbFremd.Items[10]  :=ini.ReadString('Vokabeln','Fremdsprache10','');
    lbSprache.Items[11]:=ini.ReadString('Vokabeln','Deutsch11','');
    lbFremd.Items[11]  :=ini.ReadString('Vokabeln','Fremdsprache11','');
    lbSprache.Items[12]:=ini.ReadString('Vokabeln','Deutsch12','');
    lbFremd.Items[12]  :=ini.ReadString('Vokabeln','Fremdsprache12','');
    lbSprache.Items[13]:=ini.ReadString('Vokabeln','Deutsch13','');
    lbFremd.Items[13]  :=ini.ReadString('Vokabeln','Fremdsprache13','');
    lbSprache.Items[14]:=ini.ReadString('Vokabeln','Deutsch14','');
    lbFremd.Items[14]  :=ini.ReadString('Vokabeln','Fremdsprache14','');
    lbSprache.Items[15]:=ini.ReadString('Vokabeln','Deutsch15','');
    lbFremd.Items[15]  :=ini.ReadString('Vokabeln','Fremdsprache15','');
    lbSprache.Items[16]:=ini.ReadString('Vokabeln','Deutsch16','');
    lbFremd.Items[16]  :=ini.ReadString('Vokabeln','Fremdsprache16','');
    lbSprache.Items[17]:=ini.ReadString('Vokabeln','Deutsch17','');
    lbFremd.Items[17]  :=ini.ReadString('Vokabeln','Fremdsprache17','');
    lbSprache.Items[18]:=ini.ReadString('Vokabeln','Deutsch18','');
    lbFremd.Items[18]  :=ini.ReadString('Vokabeln','Fremdsprache18','');
    ini.Free;

end;


lbNummer ist das Label das zählt wieviele Voks es sind. Bei beginn des Abfragens steht es auf 1.
Das sieht nun nicht so sauber aus...
Ich habe es auch schon probiert das er in lbSprache.Items[i] das reinschreibt was in Sprache[i] vorkommt doch nach eingier Zeit und nicht laden-können ist mir der Fehler aufgefallen:

Er schreibt beispielsweise in lbSprache.Items[0] das was in Sprache0,1,2,3,4,5

Habt ihr eine Idee?

Schweini


Xion - Mo 14.01.08 18:41

die "Laden-procedure" vereinfacht:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  A:=0;
  while ini.ReadString('Vokabeln','Deutsch'+inttostr(A),'')<>'' do {hier wäre besser etwas wie VarExists, also SectionExists eine Ebene niedriger. Weiß nicht, obs sowas gibt}
   begin
    lbSprache.Items[A]:=ini.ReadString('Vokabeln','Deutsch'+inttostr(A),'');
    lbFremd.Items[A]:=ini.ReadString('Vokabeln','Fremdsprache'+inttostr(A),''); 
    A:=A+1;
   end;