Autor Beitrag
hibbert
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Mo 05.04.04 21:25 
Hi,
ich habe ein Record mit 2 String in eine .dat - Datei gespeichert.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
type
   klasse=record
   name,vorname:string[255];
   end;
...
liste: array [1..35] of klasse;

Nun habe ich insgesamt 20 Werte gespeichert.
Beim Programmstart sollen nun die Werte von Vorname in eine Combobox geladen werden.
Das gleiche soll mit den Werten von nachname passieren, nur in eine andere Combobox.

Das laden eines einzelnen Strings ist ja kein Problem
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var f:file of klasse;
ds:klasse;
begin
AssignFile(F,'11 Klasse.dat');
    Reset(F);
    Seek(F,0);     // Zeiger auf 1.DS stellen
    Read(F,DS);   // DS lesen
    CloseFile(F);
edit1.Text:=ds.vorname;
edit2.Text:=ds.name;


Doch wie bringe ich das ganze in eine schleife und wie findere ich heraus, wieviele Datensätze in dem Record gespeichert sind?

thx hibbert


Moderiert von user profile icontommie-lie: Topic verschoben

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
rokdd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 329

Win XP
D6
BeitragVerfasst: Mo 05.04.04 21:30 
hallo,
wieviele das sind ist unwichtig, denn du musst nur auf das dateiende warten. der befehl dafür ist eof

Robert
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Mo 05.04.04 21:38 
Ok Danke, das ist nun mein qt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure LoadKlasse(klasse:string);
var f:file of klasse;
ds:klasse;
x:integer;
begin
AssignFile(F,'data\'+klasse+'.dat');
for x:=0 to 40 do // das record kann den max. wert 35 bekommen
  begin
    AssignFile(F,'data\'+klasse+'.dat');
  Reset(F);
  Seek(F,x);     // Zeiger auf 1.DS stellen
  if eof=true then break;
  Read(F,DS);   // DS lesen
  CloseFile(F);
  form1.nachname.Items.Add(ds.name);
  form1.vorname.Items.Add(ds.vorname);
  end;
end;

doch nun kommt diese "nette" meldung:
Fehlermeldung hat folgendes geschrieben:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EInOutError aufgetreten. Meldung: 'E/A-Fehler 6'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------

wie muss meine schleife richtig aussehen?

thx hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
rokdd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 329

Win XP
D6
BeitragVerfasst: Mo 05.04.04 21:47 
also... :-)

deine variante:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
for x:=0 to 40 do // das record kann den max. wert 35 bekommen
  begin
    AssignFile(F,'data\'+klasse+'.dat');
  Reset(F);
  Seek(F,x);     // Zeiger auf 1.DS stellen
  if eof=true then break;
  Read(F,DS);   // DS lesen
  CloseFile(F);
  form1.nachname.Items.Add(ds.name);
  form1.vorname.Items.Add(ds.vorname);
  end;

1. du durchläufst assign 40 mal
2. warum 40 mal?
3. du öffnest die datei 40 mal!
4. habe keine delphihilfe hier deswegen ganz grob:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
    AssignFile(F,'data\'+klasse+'.dat');
  Reset(F);
  Seek(F,x);     // Zeiger auf 1.DS stellen
repeat 
  Read(F,DS);   // DS lesen
  form1.nachname.Items.Add(ds.name);
  form1.vorname.Items.Add(ds.vorname);
until(eof(F));  
CloseFile(F);
  end;


hoffe es funzt

robert
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Mo 05.04.04 22:13 
rokdd hat folgendes geschrieben:

hoffe es funzt


Jo es funzt so gut, dass ich damit arbeiten werde :wink:

Nun mal im ernst:

Es funzt so, wie ich mir das vorgestellt habe.

Danke für deine Hilfe.

Hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
rokdd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 329

Win XP
D6
BeitragVerfasst: Mo 05.04.04 22:18 
freut mich! hoffe du hast deine fehler auch verstanden und nicht nur abgetippt...

Gute nacht!

robert
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Mo 05.04.04 22:22 
rokdd hat folgendes geschrieben:
freut mich! hoffe du hast deine fehler auch verstanden und nicht nur abgetippt...
robert


mhh, also ich habe den QT nicht abgetippt :evil: ich habe ihn kopiert :wink:

Im grunde habe ich das schon verstanden, ich wusste nur nicht wie ich das machen sollte, also das mit der schleife, denn ich arbeite erst seit ein paar tagen mit records.

Hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Di 06.04.04 09:20 
rokdd hat folgendes geschrieben:
also... :-)

...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
...
repeat 
  Read(F,DS);   // DS lesen
  form1.nachname.Items.Add(ds.name);
  form1.vorname.Items.Add(ds.vorname);
until(eof(F));  
...

...



Ganz korrekt ist das noch nicht, aber kommt dem schon sehr nahe: Bei dieser variante wird der lese vorgang immer mindestens einmal durchlaufen! Was aber wenn die datei leer ist? ...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
while not eof(f) do
begin
  Read(F,DS);   // DS lesen
  form1.nachname.Items.Add(ds.name);
  form1.vorname.Items.Add(ds.vorname);
end;


wäre das normale vorgehen :wink:

_________________
mfg.
mâximôv
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Di 06.04.04 11:09 
ok danke, das "normale" vorgehen hab ich bis jetzt noch nicht gebraucht, aber das brauche ich später betimmt nochmal :wink:

danke.

MfG hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej