![]() |
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 |
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. |
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
|
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.... |
Re: dynamisches array in datei speichern
Das will er ja wissen.
|
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....
|
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 |
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) |
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:
Damit sollten eigenelich die Elemente der Höhe nebveneinander mit einem trennzeichen geschrieben werden
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; wenn ein Neues Längenelement kommt, dann geht er eine zeile tiefer ich hoffe es konnte dir weiterhelfen |
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... |
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 13:17 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