Hi,
kannst du dann vielleicht eine solche Datei posten?
Ansonsten sehe ich nicht ganz warum dein Code nur so arbeiten sollte.
Delphi-Quellcode:
var List : TList;
fs : TFileStream;
buffer : ^TDatensatz;
length : Integer;
begin
list := Tlist.Create;
...
try
while (fs.Position < fs.Size) do
begin
new(buffer);
fs.Read(buffer.id, 4);
fs.Position := fs.Position + 1;
fs.Read(length, 2);
fs.Position := fs.Position + 1;
setLength(buffer.Text, length);
fs.Read(buffer.Text, length);
list.Add(buffer);
end;
finally
fs.Free;
end;
end;
So sollte das ganze eigentlich klappen (wenn die Datei so aufgebaut ist wie du sagst (und natürlich ich keinen Fehler gemacht habe). An sich empfiehlt sich hier eine Liste. Intern wird zwar auch ein Array verwendet und du kannst auch per Index wahlfrei auf bestimmte Elemente zugreifen, aber die Größenanpassung ist hier von Delphi übernommen. Dein Array immer nur um 1 Element zu erweitern ist sehr schlecht. Es kostet Zeit neuen Speicher zu allozieren und das alte Array dort reinzukopieren. Eine List alloziert gleich eine vielzahl von weiteren Elementen. Sind diese neu allozierten Plätze zu einem gewissen Grad gefüllt, wird wieder um ein gutes Stück vergrößert. Hast du einen Overhead (an Zeit) von O, dann teilt der sich damti auf die Anzahl n der allozierten Elemente auf, ist also in deinem Fall 0/1 = O und das in jeder Iteration, im Falle der Liste O/n und n ist halt von Delphi gewählt (und das passiert automatisch).
Gruß Der Unwissende
[edit]
Delphi Tag geöffnet, quote geschlossen...
[/edit]