![]() |
Re: dynamisches array in datei speichern
wenn nur dein Programm die Datei wieder lesen können muss würde ich nicht mit Trennzeichen arbeiten weil dann das Laden länger dauert (schließlich muss erst nach dem nächsten Trennzeichen gesucht werden).
Handlet es sich um normale Strings oder um begrenzte/statiche (String[größe])? Wenn es sich um statiche handelt kann man einfach den Speicher mit einem Rutsch in die Datei kopieren. Ansonsten muss man die Stringlänge jeweils mit dazu packen bzw. ein Trennzeichen wenn man das denn will. |
Re: dynamisches array in datei speichern
also die string laengen sind definitif nicht abzusehen und von zeile zu zeile und eintrag zu eintrag verschieden...
das mit dem trennzeichen kann ich verstehen das es ewig dauern koennte... vor allem wenn es mehr als 1000 zeilen sind... gibts da irgendwie ne andere moeglichkeit die daten zu speichern um sie spaeter wieder nutzbar zu machen ? |
Re: dynamisches array in datei speichern
ja gibt es. Du schreibst vor die eigentlichen Daten jeweils die Länge der Daten:
Delphi-Quellcode:
Wenn es sich um dynamiche Array's handelt solltest du natürlich auch noch die Größe des Arrays ganz an den Anfang schreiben.
var lLen : Word; //sollte in der Regel reichen außer die Strings sind länger als 64*** zeichen.
lStream: TFileStream; begin lStream := TFileStream.Create(YourFileName, fmCreate); for x := ... do for y := ... do begin //Lenge des Strings ermitteln lLen := Length(YourArray[x,y]; //Länge in Datei schreiben (2 Byte Lang) lStream.Write(lLen, SizeOf(lLen)); //Direct dahinter den String schreiben lStream.Write(YourArray[x,y][1], lLen); end; end; lStream.Free; end; |
Re: dynamisches array in datei speichern
Also das Auslesen ist ca. genau so leicht
Wenn du dich mit PHP auskennst, dann kennst du die Funktion Explode da es diese für Delphi nicht gibt, macht man sich einfach eine. Dies Packst du einfach unter das {R *.dfm}
Delphi-Quellcode:
type TExplode_Array= array of String;
function Explode(const Separator, S: string; Limit: Integer = 0): TExplode_Array; var SepLen: Integer; F, P: PChar; ALen, Index: Integer; begin SetLength(Result, 0); if (S = '') or (Limit < 0) then Exit; if Separator = '' then begin SetLength(Result, 1); Result[0] := S; Exit; end; SepLen := Length(Separator); ALen := Limit; SetLength(Result, ALen); Index := 0; P := PChar(S); while P^ <> #0 do begin F := P; P := AnsiStrPos(P, PChar(Separator)); if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F); if Index >= ALen then begin Inc(ALen, 5); SetLength(Result, ALen); end; SetString(Result[Index], F, P - F); Inc(Index); if P^ <> #0 then Inc(P, SepLen); end; if Index < ALen then SetLength(Result, Index); end; und dann Benutz du es So:
Delphi-Quellcode:
Nicht getesten, und sicherlich fehler drin, aber ein Denkansatz.var x_element: Array of TExplode_Array; x,y: Integer; aktueles_zeilen_array[y]: Array Of String; // Datei Öffnen // zeilenanzahl auslesen for y = 0 to zeilenanzahl -1 do beginn x_element[y] := Explode('<tz>', zeileninhalt); end; MfG Real_Thunder |
Re: dynamisches array in datei speichern
ich dank recht herzlich und werd es versuchen anzuwenden..
|
Re: dynamisches array in datei speichern
Oder wie in diesem Post beschrieben:
![]() Nur halt nicht an 'nen anderen PC übertragen, sondern in 'ne Datei schreiben :) |
DP-Maintenance
Dieses Thema wurde von "Christian Seehase" von "Windows API / MS.NET Framework API" nach "Object-Pascal / Delphi-Language" verschoben.
Kein Problem mit der Windows-API |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz