Hat nix mit dme Ansistring zu tun. Ich habe das Problem soweit gelößt.
Ich kann jetzt die ganze Datei auslesen:
Delphi-Quellcode:
procedure TForm1.ReadData(datei : string; var daten : TDatenArray );
var
fs : TStream;
i, id, check : Integer;
Len : Short;
text : string;
begin
fs := TFileStream.Create(datei, fmOpenReadWrite);
ProgressBar.Max := fs.Size;
ProgressBar.Position := 0;
fs.Seek(6,soFromBeginning);
i := 0;
repeat
inc(i);
SetLength( daten, i ); // datenarray lenge anpassen
check := fs.Read(id, SizeOf(id)); //Id auslesen
if check < SizeOf(id) then //Wenn es keine mehr gab abbrechen
break;
fs.Seek(1, soFromCurrent); //1 byte überspringen
fs.Read(Len, SizeOf(Len)); //Lenge des Strings
SetLength(text, Len); //Stringlänge setzten
fs.Read(PChar(text)^, Len); //String auslesen
daten[i-1].id := id;
daten[i-1].text := text;
//Label1.Caption := IntToStr(i);
//Label1.Update;
ProgressBar.StepBy(7+Len);
until check < SizeOf(id);
fs.Free;
end;
Für Len habe ich nen Short genommen, welcher nun nurnoch ähm 2Bye? Groß ist. Passt auf jedenfall.
Das unterbrechen habe ich auch ganz gut hinbekommen. Position und Size soll angeblich stark die Performence reduzieren.
Wobei wir auch genau beim nächsten Problem sind.
Meine Datei hat (die kleienre Variante) 18.000 Einträge.
Frage 1. Wieso liest er am anfang shcneller aus als zum Ende hin?
Frage 2. Was gibt es für eine Alternative zu meinem Array die daten schneller / besser zu speichern?
Und sonst, wo kann man noch Optimieren? Es dauert im moment echt arg lange