AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Teil eines PChar in anderen PChar kopieren
Thema durchsuchen
Ansicht
Themen-Optionen

Teil eines PChar in anderen PChar kopieren

Ein Thema von dataspider · begonnen am 25. Jun 2006 · letzter Beitrag vom 25. Jun 2006
Antwort Antwort
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#1

Teil eines PChar in anderen PChar kopieren

  Alt 25. Jun 2006, 12:38
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
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Teil eines PChar in anderen PChar kopieren

  Alt 25. Jun 2006, 12:42
Caste den PChar doch in einen String.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Teil eines PChar in anderen PChar kopieren

  Alt 25. Jun 2006, 12:43
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Teil eines PChar in anderen PChar kopieren

  Alt 25. Jun 2006, 12:54
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
Frank Reim
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#5

Re: Teil eines PChar in anderen PChar kopieren

  Alt 25. Jun 2006, 12:58
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
Willy Scheibel
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Teil eines PChar in anderen PChar kopieren

  Alt 25. Jun 2006, 16:52
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
Frank Reim
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:25 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