Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Gucken, womit String anfängt (https://www.delphipraxis.net/74232-gucken-womit-string-anfaengt.html)

tail 31. Jul 2006 00:45


Gucken, womit String anfängt
 
Ich habe folgenden String: "/verzeichnis/Programme/"
Anstatt Programme kann dort auch etwas anderes stehen. z.B. Windows und dann soll das noch in Unterordner gehen, z.B. Windows/System32 (wäre dann "/verzeichnis/Windows/System32")

Wie kann ich überprüfen, ob das erste "/verzeichnis/" ist? Gibt es Reguläre Ausdrücke, wie in PHP? (dann würde ich es so machen: ~^/verzeichnis/(.*)$~ ;))

Real_Thunder 31. Jul 2006 01:20

Re: Gucken, womit String anfängt
 
Moin erstmal...

Schaue dir Mal den Befehl (Funktion) Pos an...

Delphi-Quellcode:
if Pos('/Verzeichnis/') > -1 then begin
  Showmessage('Verzeichnis Vorhanden');
end;
ich hoffe ich hatte deine Frage richtig verstanden

MfG real_Thunder

Nicolai1234 31. Jul 2006 01:23

Re: Gucken, womit String anfängt
 
Ich würde die Abfrage mit = 0 machen, da dann der Teil auch am Anfagng sein muss

TBx 31. Jul 2006 04:51

Re: Gucken, womit String anfängt
 
@Nicolai 1605: Dabist Du auf dem Holzweg. Wenn pos (such, gegeben) = 0 dann kommt such in gegeben gar nicht vor.
Ich gehe davon aus, daß Du pos (such, gegeben) = 1 meintest.

Gruß

onlinekater

PS: Das soll keine Klugscheißerei sein, ich falle auch immer wieder darauf rein, dass StringOperationen/Funktionen wie Pos, Insert, Delete immer bei 1 anfangen zu zählen.

tail 31. Jul 2006 05:42

Re: Gucken, womit String anfängt
 
Wenn ich 0 oder > -1 nehmen, geht das nicht. Dann geht alles in die If (auch /bla/) Ich habe jetzt 1 Genommen. Das geht irgentwie, Kp warum^^

Ydobon 31. Jul 2006 06:39

Re: Gucken, womit String anfängt
 
Hat onlinekater schon geschrieben. Bei Strings hat des erste Zeichen den Index 1 und nicht 0, wie in den meisten anderen Fällen. Pos gibt also im Erfolgsfall mindestens 1 zurück und andernfalls 0, d.h. Pos>-1 ist immer wahr.

3_of_8 31. Jul 2006 08:54

Re: Gucken, womit String anfängt
 
"Wie in den meisten anderen Fällen..."
Hö?

Strings in Delphi sind immer 1-basiert, das heißt wenn Pos 0 ausgeben würde, wenn es Position 1 meint, wäre das ziemlich unsinnig.

EDIT: Schneller als pos könnte evtl. das hier sein:

Delphi-Quellcode:
str:='/verzeichnis/Programme/';
if copy(str, 1, length('/verzeichnis/'))='/verzeichnis/'

xaromz 31. Jul 2006 09:02

Re: Gucken, womit String anfängt
 
Hallo,
Zitat:

Zitat von 3_of_8
"Wie in den meisten anderen Fällen..."
Hö?

Strings in Delphi sind immer 1-basiert, das heißt wenn Pos 0 ausgeben würde, wenn es Position 1 meint, wäre das ziemlich unsinnig.

Er meinte sicher "anders als bei allen anderen Arrays, die nämlich normalerweise bei Null anfangen".
Zitat:

Zitat von 3_of_8
EDIT: Schneller als pos könnte evtl. das hier sein:

Delphi-Quellcode:
str:='/verzeichnis/Programme/';
if copy(str, 1, length('/verzeichnis/'))='/verzeichnis/'

Das dürfte sich nicht viel nehmen. Bei Pos wird ja nur verglichen, bei dieser Methode erst kopiert und dann verglichen. Also sollte Pos etwas schneller sein.

Gruß
xaromz

Muetze1 31. Jul 2006 09:09

Re: Gucken, womit String anfängt
 
Huhu? Diskutiert ihr nur unter euch? Schonmal drauf geachtet was der Fragesteller noch für ein Problem hat (was zum Thema gehört) im Gegensatz zu eurer 0/1 Diskussion die hier nix zu suchen hat? Euer Code geht nicht - egal was da für eine Zahl steht!

@tail:

Probier es mal damit:

Delphi-Quellcode:
if Pos(AnsiLowerCase('/Verzeichnis/'), AnsiLowerCase(Pfadangabe)) = 1 then
  Showmessage('Verzeichnis Vorhanden');
Weil ein String nur dann gefunden wird, wenn er exakt die gleiche Schreibweise hat. Wenn nur ein Buchstabe grösser oder kleiner ist, dann haut der bisher hier gezeigte Code nicht mehr hin.

3_of_8 31. Jul 2006 09:34

Re: Gucken, womit String anfängt
 
Das wollte ich eigentlich noch schreiben, habe es dann aber vergessen.

Und: Effizienz ist wichtig. Wir diskutieren nicht unter uns. Das betrifft alles die Frage.

Wie wäre es damit:

Delphi-Quellcode:
function StrAtPos(substr, str: String; pos: Integer): Boolean;
var I: Integer;
begin
Result:=False;
if (pos<1) or (pos>length(str)) or (pos+length(substr)-1>length(str)) then exit;
str:=ansilowercase(str);
substr:=ansilowercase(substr);
for I:=1 to length(substr) do
  if substr[I]<>str[pos+I-1] then exit;
Result:=True;
end;
EDIT: OK, diese Methode, habe ich gerade gemerkt, ist viel langsamer.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:55 Uhr.
Seite 1 von 2  1 2      

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