Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie kann ich einen Record in eine Datei schreiben/lesen (https://www.delphipraxis.net/29150-wie-kann-ich-einen-record-eine-datei-schreiben-lesen.html)

martin7452 4. Sep 2004 17:52


Wie kann ich einen Record in eine Datei schreiben/lesen
 
Hallo,
wie kann ich am einfachsten einen RECORD (nur STRINGS)) in eine Datei schreiben und lesen.
Gruß Martin

SirThornberry 4. Sep 2004 17:59

Re: Wie kann ich einen Record in eine Datei schreiben/lesen
 
da strings nur pointer sind musst du dir da selbst eine funktion schreiben welche die strings nacheinander in die datei schreibt da beim schreiben des gesamten records sonst nur die pointer in der datei landen

MrKnogge 4. Sep 2004 18:01

Re: Wie kann ich einen Record in eine Datei schreiben/lesen
 
Hallo !

Da gibt es mehrere Möglichkeiten, amleichtesten geht es eigentlich mit TFileStream.

Delphi-Quellcode:
var
  fs: TFileStream;
begin
  fs := TFileStream.Create('C:\test.dat', fmOpenWrite);
  try
    fs.Write(DeinRecord,SizeOf(DeinRecord));
  finally
    fs.free;
  end;
end;
gruss

Snoop007 4. Sep 2004 18:16

Re: Wie kann ich einen Record in eine Datei schreiben/lesen
 
in char umwandeln ( begrenzte länge 255 zeichen ) und diese dann speichern
mit z.b. BlockWrite

MrKnogge 4. Sep 2004 18:22

Re: Wie kann ich einen Record in eine Datei schreiben/lesen
 
brauchst du nicht, da die maximale Länge von Strings in records sowieso bei 255.

Elite 4. Sep 2004 18:25

Re: Wie kann ich einen Record in eine Datei schreiben/lesen
 
Genau auf die Weise wird er keinen Erfolg haben, denn gerade so werden nur die Pointer in die Datei geschrieben.
Es ist ganz wichtig, jeden einzelnen String in etwa so wie folgt zu speichern:

Delphi-Quellcode:
procedure WriteStringToStream(stream: TFileStream; str: string);
var
 len: integer;
begin
 len := length(str);            // Länge des strings ermitteln
 stream.write(len, SizeOf(len)); // Länge des Strings speichern
 stream.write(PChar(str)^, len); // String mittels PChar speichern
end;


procedure ReadStringFromStream(stream: TFileStream; var str: string);
var
 len: integer;
begin
 stream.read(len, SizeOf(len)); // Länge des Strings auslesen
 SetLength(str, len);          // Länge des Srings setzen
 stream.read(PChar(str)^, len); // Strings mittels PChar auslesen
end;
Das Speichern von Strings ist zwar sehr mühsam, lässt sich aber leider nicht viel einfacher machen. Muss man so hinnehmen. Auf jeden fall rate ich dir aber auch zu FileStreams!

Keldorn 4. Sep 2004 18:32

Re: Wie kann ich einen Record in eine Datei schreiben/lesen
 
Zitat:

Zitat von Elite
Das Speichern von Strings ist zwar sehr mühsam, lässt sich aber leider nicht viel einfacher machen. Muss man so hinnehmen. Auf jeden fall rate ich dir aber auch zu FileStreams!

doch, einfacher gehts mit Twriter und treader, die haben für viele Datentypen methoden zum speichern/lesen in streams (writestring,writeinteger, etc.), insbesondere bei unterschiedlichen Datentypen hat man hier Vorteile.

Zitat:

Zitat von MrKnogge
brauchst du nicht, da die maximale Länge von Strings in records sowieso bei 255.

wie kommst du darauf? klar kannst du in einem record auch einen string (nicht shortstring) >255 verwenden. die shortstrings mit max 255 Länge brauchst du imho nur bei typisierten Dateien, da du dort die Länge festlegen mußt.

Mfg Frank

MrKnogge 4. Sep 2004 18:40

Re: Wie kann ich einen Record in eine Datei schreiben/lesen
 
Zitat:

Zitat von Elite
Genau auf die Weise wird er keinen Erfolg haben, ...

Hab ich aber, ich speichere seit eh und je meine Daten so.

mytar 4. Sep 2004 18:57

Re: Wie kann ich einen Record in eine Datei schreiben/lesen
 
Zitat:

Delphi-Quellcode:
procedure WriteStringToStream(stream: TFileStream; str: string);
var
len: integer;
begin
len := length(str);            // Länge des strings ermitteln
stream.write(len, SizeOf(len)); // Länge des Strings speichern
stream.write(PChar(str)^, len); // String mittels PChar speichern
end;


procedure ReadStringFromStream(stream: TFileStream; var str: string);
var
len: integer;
begin
stream.read(len, SizeOf(len)); // Länge des Strings auslesen
SetLength(str, len);          // Länge des Srings setzen
stream.read(PChar(str)^, len); // Strings mittels PChar auslesen
end;

Ich denke, das ganze müsste auch so gehen:
Delphi-Quellcode:
stream.write(str[1], 255);
und
Delphi-Quellcode:
stream.read(str[1], 255);
greetz :-D

Elite 4. Sep 2004 19:05

Re: Wie kann ich einen Record in eine Datei schreiben/lesen
 
Zitat:

Zitat von MrKnogge
Zitat:

Zitat von Elite
Genau auf die Weise wird er keinen Erfolg haben, ...

Hab ich aber, ich speichere seit eh und je meine Daten so.

Ich geb dir Brief und Siegel, dass du einen Record, der lange Strings beinhaltet, nicht speichern kannst, indem du einfach den gesamten Record per FileStream.write in einen Datei schreibst.
Dabei werden 100pro nur die Pointer gespeichert. Dafür leg ich meine Hand ins Feuer :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz