Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi GetWordofAnsiString funktioniert nicht?? (https://www.delphipraxis.net/65134-getwordofansistring-funktioniert-nicht.html)

pacman1986 12. Mär 2006 20:28


GetWordofAnsiString funktioniert nicht??
 
Delphi-Quellcode:
Function GetWordOfAnsiString(Text : string; WordPos : Word): string;
var
 p : PChar;
begin
  p := PChar(Text);
  repeat
    Dec(WordPos);
    while p^ <> #0 do
    begin
      if WordPos = 0 then
       Result := Result + p^;
      Inc(p);
    end;
    if WordPos = 0 then Exit;
    Inc(p);
  until p^ = #0;
end;
wenn ich auf den 3 tel zugreife kommt der 3 und der 4 warum ???

Bsp

GetWordOfAnsiString('bla'+#0+'b'+#0+'b'+#0+'b'+#0+ 'b'+#0+'b'+#0,1);

kommt bla

bei
getwordofansistring('bla'+#0+'b'+#0+'b'+#0+'b'+#0+ 'b'+#0+'b'+#0,3);
kommt 'bb' was ist los ???

pacman1986 12. Mär 2006 20:29

Re: GetWordofAnsiString funktioniert nicht??
 
Intressanter weise funktioiert es beim ersten mal

ste_ett 12. Mär 2006 20:37

Re: GetWordofAnsiString funktioniert nicht??
 
Ein PChar ist ein nullterminierter String.
D.h. er endet beim ersten #0-Zeichen. :)

pacman1986 12. Mär 2006 20:48

Re: GetWordofAnsiString funktioniert nicht??
 
kannst du mir das erlären

sakura 12. Mär 2006 20:52

Re: GetWordofAnsiString funktioniert nicht??
 
PChar ist der Windowsstandard für Strings. Diese werden automatisch bei #0 beendet. Im Vergleich dazu können Delphi-Strings #0 enthalten und speichern dafür die Länge an anderer Stelle. Da Dein String #0 enthält und Du den auch PChar trimmst wird aus (string)'bla'+#0+'b'+#0+'b'+#0+'b'+#0+'b'+#0+'b'+#0 nur noch (Pchar)'bla'#0.

...:cat:...

pacman1986 12. Mär 2006 21:37

Re: GetWordofAnsiString funktioniert nicht??
 
danke leute den auszug hatte ich aus dsdt.info dachte wäre besser

hab jetzt meinen eigenen
Delphi-Quellcode:
Function GetWord(Text : string; WordPos : Word): string;
var i,z:integer;
begin
    result := '';
    z:=0;

    for i := 1 to length(text) do begin
      if text[i]='.' then begin
        z:=z+1;
        if z=WordPos then break;
        result := '';
      end else begin
       result := result+text[i];
      end;
    end;
end
zwar nicht an euch beide aber falls es jmnd brauch


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