![]() |
Record <> String umwandlung
Hi ihrs!
Wie schaff ich das möglichst einfach (Pointer???)?
Delphi-Quellcode:
Vielen Dank
type
TMyRecord = record x:boolean; y:boolean; end; function RecordToStr(input:TMyRecord):string; begin //??? end; function StrToRecord(input:string):TMyRecord; begin //??? end; |
Re: Record <> String umwandlung
Ich weiß nicht wie es den anderen geht aber ich verstehe deine "Frage" jetzt nicht so ganz - kannst du vieleicht im Einzeln erklären was du überhaupt machen möchtest?
Mfg |
Re: Record <> String umwandlung
Ich will den Record übers Netwerk versenden und dafür muss er als String vorhanden sein.
Delphi-Quellcode:
type
TMyRecord = record x:boolean; y:boolean; end; var MyRecord:TMyRecord; EinString:string; function RecordToStr(input:TMyRecord):string; begin //??? end; function StrToRecord(input:string):TMyRecord; begin //??? end; procedure TForm1.Button1Click(Sender: TObject); begin EinString:=RecordToStr(MyRecord); //Der String kann jetzt versendet werden MyRecord:=StrToRecord(EinString); end; |
Re: Record <> String umwandlung
Das kannst du nicht machen. Wenn ein Nullbyte im String vorkommt, ist er an dieser Stelle terminiert. Du verlierst den Rest der Daten. Ein Array of Byte wäre sinnvoller.
|
Re: Record <> String umwandlung
Hallo SleepyMaster,
müssen es unbedingt Records sein oder kannst Du auch einen Erben von TPersistent erstellen, so dass Du mit TReader und TWriter die Serialisierung der Delphi-Komponenten verwenden kannst? Eine Lösung mit Records wirst Du nicht auf automatischen Weg (ohne PreCompiler) hinbekommen, weil zu ihnen keine Reflektionsinformationen (RTTI) abgelegt werden. |
Re: Record <> String umwandlung
@choose
Wenn du mal ein kurzes Beispiel gibst wäre es auch mit TPersistent ok! Vielen Dank schon mal! |
Re: Record <> String umwandlung
Ich vogel wollte dir gerade dir Functionen mit IF sätzen schreiben :drunken:
Benutz einfach strtobool und booltostr, damit sollte es funzen. Mfg |
Re: Record <> String umwandlung
Ich will den kompletten record auf einmal umwandeln. (Sind über 30 Bools drinne)
|
Re: Record <> String umwandlung
ihr immer mit euren nullen im string, delphi strings vertragen ohne probleme.
sofern du das senden ordentlich anstellst (womit eigentlich, kaum zu glauben das nur strings zu senden gehen!), und dein record nur einfache typen enthält versuch ma einfach so
Code:
function RecordToStr(const input: TMyRecord): String;
begin SetLength(Result, SizeOf(TMyRecord)); Move(input, Result[1], SizeOf(TMyRecord)); end; function StrToRecord(const input: String): TMyRecord; begin //if Length(input) = SizeOf(TMyRecord) then Move(input[1], Result, SizeOf(TMyRecord)); end; |
Re: Record <> String umwandlung
@Currywurst
Super!!! So gehts ohne Probleme! Vielen Dank! |
Re: Record <> String umwandlung
Hallo SleepyMaster,
bitte nimm Dir den Hinweis der Currywurst zu Herzen: Sobald Du mit Strings (variabler Länger) arbeitest, wird diese Lösung (prozessübergriefend, zB über ein Netzwerk) nicht mehr Funktionieren (mal abgesehen von komplexeren Datentypen...). Darüber hinaus werden bei Strings fester Länge so uU Daten übertragen, deren Speicherbereich zuvor anderweitig verwendetet wurde (zB von Objekten, die Passwörter oä in privaten Exemplarvariablen inne hielten), unverschlüsselt und vor allem überflüssigerweise über das Netz verbreitet... Das Kernproblem, dass Dich beschäftig nennt sich Serialisierung und wurde in anderer Form, nämlich der Persistenzierung von Datenstrukturen bereits zusammen mit den auftretenen Problemen häufiger in diesem Forum besprochen. Zu finden uU bei der Problemstellung "Schreiben von Records in typisierte Dateien". |
Re: Record <> String umwandlung
Zitat:
Zitat:
|
Re: Record <> String umwandlung
Und warum dann kein Array der Form
Delphi-Quellcode:
bzw, falls Du benannte Indizes benötigst:
type
TMyArray = array[0..29] of Boolean;
Delphi-Quellcode:
und eine Verwendung der Art (2. Variante)
type
TMyElement = (meOne, meTwo, meThree); TMyArray = array[TMyElement] of Boolean;
Delphi-Quellcode:
var
myVar: TMyArray; i: TMyElement; begin myVar[meOne]:= GetValue(meOne); myVar[meTwo]:= myVar[meOne] and GetValue(meTwo); myVar[meThread]:= False; for i:= Low(i) to High(i) do begin if i=meTwo then write('Hey, it''s just the second value: '); Writeln(arVar[i]); end; |
Re: Record <> String umwandlung
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 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-2025 by Thomas Breitkreuz