Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Teil eines PChar in anderen PChar kopieren (https://www.delphipraxis.net/72081-teil-eines-pchar-anderen-pchar-kopieren.html)

dataspider 25. Jun 2006 12:38


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:
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;
Danke, Frank

3_of_8 25. Jun 2006 12:42

Re: Teil eines PChar in anderen PChar kopieren
 
Caste den PChar doch in einen String.

mkinzler 25. Jun 2006 12:43

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.

dataspider 25. Jun 2006 12:54

Re: Teil eines PChar in anderen PChar kopieren
 
Zitat:

Zitat von mkinzler
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.

Vielleicht ist es ja auch alben. Aber da ich diese Fuktion dann im Select in Firebird nutzen möchte, will ich auf jeglichen Ballast (Konvertierung PChar AnsiChar etc) verzichten.
Es muss irgendwie mit StrMove gehen, bin noch am Basteln.

Trotzdem Danke,

Frank

Flare 25. Jun 2006 12:58

Re: Teil eines PChar in anderen PChar kopieren
 
Zitat:

Zitat von dataspider
...will ich auf jeglichen Ballast (Konvertierung PChar AnsiChar etc) verzichten.

Ich weiß ja nicht wie viele Daten du verarbeiten möchtest, aber dieses kleine rumgecaste dürfte doch nicht auffallen!


Flare

dataspider 25. Jun 2006 16:52

Re: Teil eines PChar in anderen PChar kopieren
 
Nur, falls noch jemand mal ein ähnliches Problem hat:
Delphi-Quellcode:
{ ------------------------------------------------------------------------------
 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;
Also Dank an Alle, hab es doch so gelöst - es geht ja auch um den Lerneffekt...

Cu, Frank


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