AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie kann ich einen Record in eine Datei schreiben/lesen
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kann ich einen Record in eine Datei schreiben/lesen

Ein Thema von martin7452 · begonnen am 4. Sep 2004 · letzter Beitrag vom 5. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2      
martin7452

Registriert seit: 30. Nov 2003
6 Beiträge
 
#1

Wie kann ich einen Record in eine Datei schreiben/lesen

  Alt 4. Sep 2004, 17:52
Hallo,
wie kann ich am einfachsten einen RECORD (nur STRINGS)) in eine Datei schreiben und lesen.
Gruß Martin
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

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

  Alt 4. Sep 2004, 17:59
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
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#3

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

  Alt 4. Sep 2004, 18:01
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
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Snoop007

Registriert seit: 14. Jan 2003
331 Beiträge
 
Delphi 6 Personal
 
#4

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

  Alt 4. Sep 2004, 18:16
in char umwandeln ( begrenzte länge 255 zeichen ) und diese dann speichern
mit z.b. BlockWrite
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#5

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

  Alt 4. Sep 2004, 18:22
brauchst du nicht, da die maximale Länge von Strings in records sowieso bei 255.
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Elite
(Gast)

n/a Beiträge
 
#6

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

  Alt 4. Sep 2004, 18:25
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!
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

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

  Alt 4. Sep 2004, 18:32
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 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

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#8

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

  Alt 4. Sep 2004, 18:40
Zitat von Elite:
Genau auf die Weise wird er keinen Erfolg haben, ...
Hab ich aber, ich speichere seit eh und je meine Daten so.
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#9

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

  Alt 4. Sep 2004, 18:57
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:
stream.write(str[1], 255); und
stream.read(str[1], 255); greetz
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Elite
(Gast)

n/a Beiträge
 
#10

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

  Alt 4. Sep 2004, 19:05
Zitat von MrKnogge:
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:51 Uhr.
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