![]() |
Teil eines PChar in anderen PChar kopieren
Hi,
ich versuche gerade, mit pChar zu experimentieren. Ich möchte das erste Wort eines PChar haben (brauche es für eine Firebird Udf, um aus einem String wie Meier, Klaus das Meier zu extrahieren). Folgender Stand:
Delphi-Quellcode:
Danke, Frank
procedure TForm1.Button2Click(Sender: TObject);
Var s: PChar; c: Char; dest: PChar; p: Integer; idx1: Integer; begin // nur zum Testen mit Debugger s := PChar(' Solch ein Mist'); // Leerzeichen weg p := 0; while s[p] = ' ' do begin inc(p); end; idx1 := p; while s[p] <> #0 do begin if (s[p] in [' ', ',']) then Break; inc(p); end; dest := StrAlloc(p -idx1 + 1); // wie s[Idx1 -1] bis // wie bekomme ich jetzt in dest sozusagen ein Copy(s, idx1 -1, p-1) // also den Teilstring, nur ohne Umweg über Ansistrings // Dest sollte dann 'Solch'#0 enthalten Application.ProcessMessages; end; |
Re: Teil eines PChar in anderen PChar kopieren
Caste den PChar doch in einen String.
|
Re: Teil eines PChar in anderen PChar kopieren
Zeile 10 - 15 könntest du durch Trim() erledigen.
Ich würde anschließend die Position des ersten Leerzeichen ermitteln (StrScan oder Pos()) und dann den string auf diese Position kürzen. |
Re: Teil eines PChar in anderen PChar kopieren
Zitat:
Es muss irgendwie mit StrMove gehen, bin noch am Basteln. Trotzdem Danke, Frank |
Re: Teil eines PChar in anderen PChar kopieren
Zitat:
Flare |
Re: Teil eines PChar in anderen PChar kopieren
Nur, falls noch jemand mal ein ähnliches Problem hat:
Delphi-Quellcode:
Also Dank an Alle, hab es doch so gelöst - es geht ja auch um den Lerneffekt...
{ ------------------------------------------------------------------------------
Procedure: FirstWord Author: Frank Reim Date: 28-Mrz-2006 Description: Extrahiert das erste Wort einer Zeichenkette Arguments: const AStr Return Value: PChar Deklaration in Firebird: DECLARE EXTERNAL FUNCTION FirstWord CSTRING(80) RETURNS CSTRING(80) FREE_IT ENTRY_POINT 'FIRSTWORD' MODULE_NAME 'rw_udfs'; ------------------------------------------------------------------------------ } function FirstWord(const AStr: PChar): PChar; cdecl; var // aktuelle Position p: Integer; // StartPosition (ohne Blank) ps: Integer; begin Result := nil; p := 0; // CHR_BALANK ist #32 while AStr[p] = CHR_BLANK do begin inc(p); end; ps := p; while AStr[p] <> #0 do begin if (AStr[p] in [' ', ',']) then Break; inc(p); end; Result := ib_util_malloc(p -ps + 1); StrMove(Result, AStr + ps, p - ps); Result[p - ps] := #0; end; Cu, Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 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