Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi dynamisches array in datei speichern (https://www.delphipraxis.net/70458-dynamisches-array-datei-speichern.html)

SirThornberry 30. Mai 2006 17:12

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.

zitruslimmonade 30. Mai 2006 17:18

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 ?

SirThornberry 30. Mai 2006 17:26

Re: dynamisches array in datei speichern
 
ja gibt es. Du schreibst vor die eigentlichen Daten jeweils die Länge der Daten:
Delphi-Quellcode:
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;
Wenn es sich um dynamiche Array's handelt solltest du natürlich auch noch die Größe des Arrays ganz an den Anfang schreiben.

Real_Thunder 30. Mai 2006 17:27

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:

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;
Nicht getesten, und sicherlich fehler drin, aber ein Denkansatz.

MfG Real_Thunder

zitruslimmonade 30. Mai 2006 17:36

Re: dynamisches array in datei speichern
 
ich dank recht herzlich und werd es versuchen anzuwenden..

himitsu 31. Mai 2006 10:44

Re: dynamisches array in datei speichern
 
Oder wie in diesem Post beschrieben:Array Per Sendbuf über ServerSocket senden.

Nur halt nicht an 'nen anderen PC übertragen, sondern in 'ne Datei schreiben :)

DP-Maintenance 31. Mai 2006 10:55

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.
Seite 2 von 2     12   

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