Autor Beitrag
Dede
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 21

Win 2000, Suse Linux 8.0
D6 Ent
BeitragVerfasst: Sa 04.09.04 16:18 
Mein Problem ist derzeit das ich mehrere Daten von versch. Record Typen habe. Die würde ich nämlich gerne zusammen in einer Datei speichern.

Eine Sache hab ich schon ausprobiert hatte allerdings nicht den nötigen Erfolg.
Ich habe mir einen Header definiert, der angibt, wieviele Datensätze von den versch. Record Typen in der Datei sind. Im Prinzip so:

ausblenden volle Höhe 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:
tHeader = record 
                  AnzahlDatensätzevonRecord1 : Integer;
                  AnzahlDatenSätzevonRecord2 : Integer;
                end;
tHeaderFile = file of tHeader;

tRecordItem1 = record
                 ... //Hier halt die Definition
               end;
tRecordArrItem1 = array of tRecordItem1;
tRecordItem1File = file of tRecordItem1;

// Die Definition von tRecordArrItem2 ist ähnlich
...
procedure SaveToFile (RecordArrItem1 : tRecordArrItem1; RecordArrItem2 : tRecordArrItem2, FileName : string);
var HeaderFile : tHeaderFile
    Header : tHeader;
    RecordItem1File : tRecordItem1File;
begin
  AssignFile(HeaderFile,FileName);
  Rewrite(HeaderFile);
  Header.AnzahlDatensätzevonRecord1 := Length(RecordArrItem1);
  Header.AnzahlDatensätzevonRecord2 := Length(RecordArrItem2);
  Write(HeaderFile,Header);
  CloseFile(HeaderFile);

  AssignFile(RecordItem1File,FileName);
  Reset(SpellFile); // Hier das erste Problem, das Reset setzt FilePointer wieder zurück auf den Anfang :(

  for i:= 0 to Length(RecordArrItem1)-1 do
    Write(RecordItem1File,RecordArrItem1);
  CloseFile(RecordItem1File);

  // Hier würde nun das Item2 kommen...
end;


ich hoffe ich hab mich etwas verständlich ausgedrückt...

Gruß
Dede
Viper
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 88



BeitragVerfasst: Sa 04.09.04 17:18 
Hallo Dede.

Ich würde das einfach über einen FileStream machen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var
  i: integerM
  FileStr: TFileStream;
begin
  FileStr := TFileStream.Create('Dateiname', fmCreate);
  try
    //1. Record-Typ in die Datei speichern
    FileStr.Write(AnzahlRecord1, SizeOf(Integer) );
    for i := 0 to AnzahlRecord1 - 1 do
      FileStr.Write(DeinRecord1[i], SizeOf(TDeinRecord1) );
    
    //2. Record Typ speichern
    //ähnlich wie oben...
end;


Ich habe jetzt einfach andere Variablennamen verwendet, trotzdem ist ja wohl klar was gemeint ist.
Beim Laden der Datei einfach:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
FileStr := TFileStream.Create('Dateiname', fmOpenRead);
//und...
FileStr.Read(AnzahlRecord1, SizeOf(integer) );
setLength(DeinRecord1, AnzahlRecord1);
for i := 0 to AnzahlRecord1 - 1 do
  Str.Read(DeinRecord1[i], SizeOf(TDeinRecord1) );
//... das ganze halt für den 2. Typ

_________________
"Der Sinussatz ist nur was für Leute, die Teichbesitzer mit Insel und Baum sind. Alle anderen können ihn vergessen" (Mein Mathe-Prof.)
Dede Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 21

Win 2000, Suse Linux 8.0
D6 Ent
BeitragVerfasst: Sa 04.09.04 18:01 
Hm... Da wäre ich jetzt selber wohl nicht drauf gekommen, werd ich nachher gleich mal ausprobieren.

Schonmal Vielen Dank

Gruß
Dede
Dede Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 21

Win 2000, Suse Linux 8.0
D6 Ent
BeitragVerfasst: Sa 04.09.04 19:10 
Funktioniert wunderbar...

Dankeschön