Delphi-PRAXiS

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)

zitruslimmonade 30. Mai 2006 17:30


dynamisches array in datei speichern
 
mhh, eventuell ne dumme frage, aber ich hoff auf eine weniger dumme antwort...
wie genau kann ich ein dynamisches array in eine datei speichern ? koennt ihr mir mal ein kleines beispiel geben ?

recht herzlichsten Dank schon jetz

gruss chris

Real_Thunder 30. Mai 2006 17:39

Re: dynamisches array in datei speichern
 
Hier ein Denkansatz:

Datei Öffnen

mit einer Schleife , die bis zum arrayende geht Zeile für Zeile reinschrieben

Datei schließen

Mit der Forensuche währe dir sicherlich geholfen.

Solltest du dennoch nicht weiterkommen, dann sage einfach bescheid.

zitruslimmonade 30. Mai 2006 17:42

Re: dynamisches array in datei speichern
 
und die einzelnen felder (sorry ich vergas das es ein mehrdimensionales array ist) mit nem trennzeichen speichern und dementsprechend auslesen ? das koennte problematisch werden denk ich

Real_Thunder 30. Mai 2006 17:51

Re: dynamisches array in datei speichern
 
man kann element mit high und lengh ansprechen

dann benutzt du halt 2 schleifen

eine für die länge, das andere für die höhe,

gebe mir mal ein beispiel, wie die datei am ende aussehen soll

Element[0,0] Element[0,1] Element[0,2]
Element[1,0] Element[1,1] Element[1,2]
Element[2,0] Element[2,1] Element[2,2]

oder

Element[0,0]
Element[0,1]
Element[0,2]
Element[1,0]
Element[1,1]
Element[1,2]
Element[2,0]
Element[2,1]
Element[2,2]


oder
User1= name: Element[0,0] alter:Element[0,1] status:Element[0,2]
User1= name: Element[1,0] alter:Element[1,1] status:Element[1,2]

etc....

3_of_8 30. Mai 2006 17:52

Re: dynamisches array in datei speichern
 
Das will er ja wissen.

Real_Thunder 30. Mai 2006 17:54

Re: dynamisches array in datei speichern
 
Naja er will ja wissen, wie man die reinspeichert... wie die datei am ende aussheen soll, ist ja ihm überlassen....

zitruslimmonade 30. Mai 2006 18:00

Re: dynamisches array in datei speichern
 
also nach dem schema sieht gerade mein array aus

0,0/0,1/0,2
1,0/1,1/1,2

dabei ist die laenge nicht bekannt da es ja wie gesagt dynamisch ist, jetzt mag ich die dateien so speichern das ich sie spaeter wieder in ein dynamisches array in diesem style einspielen kann

SirThornberry 30. Mai 2006 18:06

Re: dynamisches array in datei speichern
 
Soll das Array unbedingt mit Trennzeichen in die Datei? Oder geht es dir nur darum es zu speichern und dann wieder zu laden?
Wie ist dein Array definiert? (es kommt auf den Inhalt des Arrays an wie man das ganze speichert)

Real_Thunder 30. Mai 2006 18:06

Re: dynamisches array in datei speichern
 
ok.. an sich ist es kein problem, die daten mit den trennzeichen zuz speichern..

also du erstellst eine schleife mit der höhe, und eine mit der breite...

am ende jeder Schleife fügst du das trennzeichen ein

und auslesen geht dann wieder genau so, rückwärts

ich tipp ehier einfach mal ein beispiel en:
Delphi-Quellcode:
var
  y,x: integer;
  trennzeichen : String;

begin:
 trennzeichen:= '<TZ>';
// Hier Datei Öffnen

  for x :=0 to length(deinArray)-1 do begin
    zeile:='';
    for y=0 to height(deinArray)-1 do beginn
      zeile = zeile + trennzeichen + deinArray[x,y];
    end;
  zeile := copy (zeile,length(trennzeichen));
  //  hier neue zeile in die Datei Schreiben
  end;
//  Hier Datei schließen
end;
Damit sollten eigenelich die Elemente der Höhe nebveneinander mit einem trennzeichen geschrieben werden

wenn ein Neues Längenelement kommt, dann geht er eine zeile tiefer


ich hoffe es konnte dir weiterhelfen

zitruslimmonade 30. Mai 2006 18:09

Re: dynamisches array in datei speichern
 
jo in etwa so dacht ich mir das.. das array ist vom typ string und hat ca 15 spalten und in spitzenzeiten bis 2000 und mehr zeilen...
eine variante mit oder ohne trennzeichen ist mir egal... muss halt einfach auszulesen sein... das speicher koennt ich mir wie oben notiert vorstellen, und das einlesen zurueck ins array ???
sorry fuer dumme fragen...

SirThornberry 30. Mai 2006 18: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 18: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 18: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 18: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 18:36

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

himitsu 31. Mai 2006 11: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 11: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 18:15 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 by Thomas Breitkreuz