Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi AnsiPos vs. AnsiContainsText - was ist schneller? (https://www.delphipraxis.net/114332-ansipos-vs-ansicontainstext-ist-schneller.html)

ToFaceTeKilla 23. Mai 2008 13:45


AnsiPos vs. AnsiContainsText - was ist schneller?
 
Hiho,

ich muss gestehen ich bin atm etwas verwirrt:
Ich habe bis eben AnsiPos(SubStr, Str) benutzt, um Str (eine String aus einem Datenset einer DB, also verändert sich) nach SubStr (ein fester Str) zu durchsuchen. Als die Funktion, in die ich das eingebaut hab, ein falsches Ergebnis lieferte, wurde ich stutzig:
Und zwar hat mir AnsiPos(Wohnanlagenkreis, Wohnanlage) als = 1 zurückgegeben. Das kann doch aber nicht sein oder? Weil "Wohnanlagenkreis" ist doch durch das "-kreis" nicht in "Wohnanlage" enthalten... :gruebel:

Na gut, hab ich die SuFu gewälzt und dann das ganze auf AnsiContainsText(Text, SubText) [Achtung: vertauschte Reihenfolge!] umgebaut. Beim Ausführen hab ich allerdings den Eindruck, dass AnsiContainsText etwas langsamer ist. Kann das sein?


Achso, was mir bei der Suche in der DP aufgefallen ist, hier wird AnsiPos irgendwie anders benutzt... wurde das von Delphi6 zu 7 geändert? Weil in der OH steht bei mir:
Zitat:

Mit AnsiPos können Sie den Byte-Offset des Parameters Substr im String S ermitteln. Wenn Substr beispielsweise 'AB' und S 'ABCDE' enthält, gibt AnsiPos den Wert 1 zurück. Ist Substr nicht in S enthalten, gibt die Funktion 0 zurück.
Das sieht für mich nicht nach Position-zurückgeben aus...

Kann jemand meine 3 Probleme aufklären? :?:

Danke schonmal

Ydobon 23. Mai 2008 14:13

Re: AnsiPos vs. AnsiContainsText - was ist schneller?
 
AnsiPos soll schon den Byte-Offset des Substrings, also bei nicht MBCS die Position, zurückgeben, daher hat es ja auch den Namen. Das Beispiel in der Hilfe wäre mit Substr z.B. "CD" und Ergbenis 3 aber tatsächlich etwas sinnvoller gewesen.

Sind die Wohn... bei dir auch (halt ohne "'") Variablen? Ansonsten erhalte ich bei mir das richtige Ergebnis.

Und bei der Geschwindigkeit hilft ein Blick in den Quelltext:
Delphi-Quellcode:
function AnsiContainsText(const AText, ASubText: string): Boolean;
begin
  Result := AnsiPos(AnsiUppercase(ASubText), AnsiUppercase(AText)) > 0;
end;

ToFaceTeKilla 23. Mai 2008 14:23

Re: AnsiPos vs. AnsiContainsText - was ist schneller?
 
AHH jetzt klingelts :idea: ^^

Ich hatte das so verstanden, dass es quasi wie AnsiContainsText arbeitet, nur halt statt true und false 1 und 0 zurückgibt... Hatte mich schon etwas gewundert. So ergibt das mit den Wohn... auch nen Sinn. Das sind übrigens die Werte der Variablen.

Gut dann hat sich das mit der Geschwindigkeit auch erledigt, weils ja nicht dasselbe ist.

:thumb: Danke dir


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