Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Records und Strings (https://www.delphipraxis.net/6434-records-und-strings.html)

mirage228 10. Jul 2003 16:30


Records und Strings
 
Hallo,

ich wollte mein Dateiformat mit Informationen darin in einem Record abspeichern. Jedoch bräuchte ich auch ziemlich lange Strings, da unter anderem ganze Texte als String vorliegen.

Kann man das irgendwie mit Records machen oder muss ich mein eigenes Dateiformat irgendwie ganz anders machen??

mfG
mirage228

CalganX 10. Jul 2003 17:14

Re: Records und Strings
 
Hä?
Zitat:

Zitat von Christian Seehase
Ein String ist gewöhnlich 2GB-1 groß

Ansonsten such mal in der OH oder hier in der DP nach "typisierte Dateien".

Chris

Jens Schumann 10. Jul 2003 17:18

Re: Records und Strings
 
Hallo,
einen Huge-String kannst Du nicht in einem File Of Record bzw typisierten Datei verwenden. Das geht nur mit ShortStrings oder Strings fester Länge.
Du solltest es mit Streams versuchen. Für Deine Frage wäre TFileStream das richtige. Leider hat auch TFileStream von haus aus keine Methoden zum lesen und schreiben von String. Macht aber nix. Mit den folgenden Nachfahren ist das kein Problem:
Delphi-Quellcode:
nit Streaming;

interface

uses Sysutils, Classes;

Type

  TMemoryStreamExt = class(TMemoryStream)
  public
    procedure WriteStringToStream(aStr : String);
    function ReadStringFromStream : String;
  end;

  TFileStreamExt = class(TFilestream)
  public
    procedure WriteStringToStream(aStr : String);
    function ReadStringFromStream : String;
  end;



implementation


{ TFileStreamExt }

procedure TFileStreamExt.WriteStringToStream(aStr : String);
var
   aStrLen : Integer;
begin
  aStrLen:=Length(aStr);
  WriteBuffer(aStrLen,SizeOf(Integer));
  WriteBuffer(Pointer(aStr)^,aStrLen);
end;

function TFileStreamExt.ReadStringFromStream: String;
var
   aStrLen : Integer;
begin
  ReadBuffer(aStrLen,SizeOf(Integer));
  SetLength(Result,aStrLen);
  ReadBuffer(Pointer(Result)^,aStrLen);
end;

{ TMemoryStreamExt }

function TMemoryStreamExt.ReadStringFromStream: String;
var
   aStrLen : Integer;
begin
  ReadBuffer(aStrLen,SizeOf(Integer));
  SetLength(Result,aStrLen);
  ReadBuffer(Pointer(Result)^,aStrLen);
end;

procedure TMemoryStreamExt.WriteStringToStream(aStr: String);
var
   aStrLen : Integer;
begin
  aStrLen:=Length(aStr);
  WriteBuffer(aStrLen,SizeOf(Integer));
  WriteBuffer(Pointer(aStr)^,aStrLen);
end;


end.

mirage228 10. Jul 2003 17:29

Re: Records und Strings
 
Ah, thx, so sollts gehen ;-)

:dancer2: :dancer:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:25 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