![]() |
Teile von "array of char" in "String" k
ich möchte Teile eins "array [0..200] of char" in einen "String" kopieren.
Momentan mache ich das mit einer Vorschleife. Dafür gibt's doch bestimmte eine schnellere Routine., aber finde keine Passende. |
Re: Teile von "array of char" in "String&
Du könntest den Speicherbereich kopieren.
|
Re: Teile von "array of char" in "String&
Mit mache ich das?
|
Re: Teile von "array of char" in "String&quo
Zitat:
|
Re: Teile von "array of char" in "String&
Schau dir mal Move() an.
|
Re: Teile von "array of char" in "String&
Zitat:
Das kann nicht von mir gewesen sein! |
Re: Teile von "array of char" in "String&
Delphi-Quellcode:
Nachtrag: Cast-Operator PChar() ergänzt
var
s: string; meinarray : array[0..200] of char; begin SetString(s, PChar(@meinarray[40]), 30); |
Re: Teile von "array of char" in "String&
Hi,
ich würde es so machen:
Delphi-Quellcode:
Grüße vom marabu
var
csa: array [Byte] of Char; idx, cnt: Integer; s: string; begin // ... s := Copy(csa, idx, cnt); end; |
Re: Teile von "array of char" in "String&
Zitat:
|
Re: Teile von "array of char" in "String&
Zitat:
Delphi wandelt einen PChar (hier "csa") ja implizit in einen String um. Da ja nirgends ein abschliesendes #0 definiert wurde, hängt es von den Umständen ab, wie gross dieser String wird. Also wird ein langer String erstellt, nur um gleich drauf ein Teilstück rauszukopieren. |
Re: Teile von "array of char" in "String&
Zitat:
|
Re: Teile von "array of char" in "String&
Ich gehe mal davon aus, dass du einen Bereich im Array kopieren willst.
Also nicht nur von Null bis zu einer bestimmten Zahl, sondern auch von Vier auf eine bestimmte Zahl. Mit CopyMemory kannst du Chars kopieren. Durch den letzten Parameter kannst du bestimmen, wie viele Buchstaben du kopieren willst. Den Startpunkt kannst du ermitteln, indem du die Startadresse mit der gewünschten Startzahl addierst. Beispiel:
Delphi-Quellcode:
Habe das gerade aus dem Kopf geschrieben. Ist sicherlich verbesserungsbedürftig.^^
procedure CopyArrayPart(lpszDest: PString; lpszSource: Pointer; dwStart, dwLength: DWord);
var lpszStringToPChar: PChar; begin Dec(dwStart); //dwStart verringern, damit man nicht bei Null anfangen muss (Char Start bei Pascal Strings ist ja bei Eins und nicht bei Null, wie es bei nullterminierenden Strings der Fall ist). GetMem(lpszStringToPChar, dwStart + dwLength); //Speicher für ein PChar allozieren (so groß, dass man die gewünschten Buchstaben speichern kann) CopyMemory(lpszStringToPChar, Pointer(Cardinal(lpszSource) + dwStart), dwLength); //Die angegebene Anzahl der Buchstaben von der Startaddresse + ItemIndex kopieren lpszDest^ := strpas(lpszStringToPChar); //PChar in den String kopieren FreeMem(lpszStringToPChar, dwStart + dwLength); //PChars Speicher leeren end; procedure TForm1.FormCreate(Sender: TObject); var lol: array[0..27-1] of Char; kaka: String; g: Byte; begin //Das Char Array mit dem ABC LowerCase füllen for g := 0 to 27-2 do lol[g] := chr(g+97); kaka := ''; //Leerer String CopyArrayPart(@kaka, @lol, 3, 5); //Ab dem dritten(eigentlich viertem) Buchstaben anfangen und von da an fünf Buchstaben kopieren ShowMessage(kaka); exitprocess(0); end; Ob es jetzt schön schnell ist, weiß ich nicht. Ich finde es aber nicht so umständlich, als wenn man eine For-Schleife benutzt. Mfg: sk0r |
Re: Teile von "array of char" in "String&
Hallo Andreas,
Zitat:
Freundliche Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 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