Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String auf Record übertragen (https://www.delphipraxis.net/32380-string-auf-record-uebertragen.html)

Union 22. Okt 2004 11:58


String auf Record übertragen
 
Hallo,

ich habe einen Record, in den ich Daten aus einem String eintragen möchte:

Delphi-Quellcode:
type
   SSIDBuffer = Record
      SSIDCMD : char;
      SSIDLEV : char;
      SSIDCODE : array[0..24] of char;
      SSIDPSWD : array[0..7] of char;
      SSIDSDEB : array[0..4] of char;
      SSIDSR : char;
      SSIDCMPR : char;
      SSIDREST : char;
      SSIDSPEC : char;
      SSIDCRED : array[0..2] of char;
      SSIDRSV1 : array[0..4] of char;
      SSIDUSER : array[0..7] of char;
      SSIDCR  : char;
   end;

var
   cmdBuffer : string;
Das könnte ich ja einzeln machen, z.b. so:

Delphi-Quellcode:
with SSIDBuffer do
begin
   SSIDCMD := copy(cmdBuffer,1,1);
   SSIDLEV := copy(cmdBuffer,2,1);
   ...
end;
Das ist mir aber zu umständlich. Geht das irgendwie in einem Schritt ?

Dax 22. Okt 2004 12:00

Re: String auf Record übertragen
 
Ja:
Delphi-Quellcode:
Move(String[1], MyRecord, Length(String));
Kopiert zuverlässig alle Zeichen von String in MyRecord.

Ultimator 22. Okt 2004 12:32

Re: String auf Record übertragen
 
Kann sein, dass ich jetzt was falsch verstehe, aber müsste nicht auch
Delphi-Quellcode:
SSIDBuffer1.SSIDCODE:='Hallo!';
gehen? :gruebel:

Union 22. Okt 2004 12:36

Re: String auf Record übertragen
 
Zitat:

Zitat von Ultimator
Kann sein, dass ich jetzt was falsch verstehe, aber müsste nicht auch
Delphi-Quellcode:
SSIDBuffer1.SSIDCODE:='Hallo!';
gehen? :gruebel:

Geht leider nicht, weil SSIDCMD char und 'Hallo' string ist.

@Dax: Danke. Aber manchmal steht in den ersten Feldern binärer Müll.

Dax 22. Okt 2004 12:37

Re: String auf Record übertragen
 
Dann musst du den Record erst leeren:
Delphi-Quellcode:
FillChar(MyRecord, 0, sizeof(MyRecord))
Kann Dein, dass die letzten zwei Parameter verdreht sind.. ich blick' da nicht immer so ganz durch..

jim_raynor 22. Okt 2004 12:38

Re: String auf Record übertragen
 
Zitat:

Zitat von Union
@Dax: Danke. Aber manchmal steht in den ersten Feldern binärer Müll.

Das ist völlig egal. Move verschiebt einfach den Speicher von a nach b. Unabhängig von irgendwelchen Datentypen.

Union 22. Okt 2004 12:51

Re: String auf Record übertragen
 
Zitat:

Zitat von Dax
Dann musst du den Record erst leeren:
Delphi-Quellcode:
FillChar(MyRecord, 0, sizeof(MyRecord))
Kann Dein, dass die letzten zwei Parameter verdreht sind.. ich blick' da nicht immer so ganz durch..

So funktioniert es jetz immer:

Delphi-Quellcode:
FillChar(LBuffer, sizeof(LBuffer),32);
cmdBuffer := 'X1O00130013SOFTWUNION000001SOFTSERV01024BNNN002     USER1234'+#13;
Move(cmdBuffer[1], LBuffer, length(cmdBuffer));
Offensichtlich kopiert aber Move von hinten nach vorn. Deshalb darf length(cmdBuffer) nie kleiner als Sizeof(LBuffer) sein!


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