Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Position eines Zeichens in einem String bestimmen


Maisinator - Mi 28.10.09 16:11
Titel: Position eines Zeichens in einem String bestimmen
Hallo,

man kann ja mit dem Befehl Pos(...) die Position eines Symbol in einem String feststellen. Wenn ich nun aber z.b. 4 x "/" in einem String habe und ich die Position des dritten "/" haben möchte, gibt es da irgendwie eine bessere Methode als den String nach jedem "/" zu kopieren und erneut die Position zu bestimmen, bis man beim eigentlichen 3. "/" angekommen ist?

DANKE


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Mi 28.10.2009 um 16:29


Andreas L. - Mi 28.10.09 16:21

Ja, in der Unit StrUtils ist die Funktion posEx. Dieser kann man als 3. Parameter ein Offset übergeben.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
  s: String;
  PosVonRaute2: Integer;
begin
  s := 'TEST#TEST2#';
  PosVonRaute2 := posEx('#', s, pos('#', s) + 1);


Maisinator - Mi 28.10.09 16:24

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Cool! Danke für deine schnelle Hilfe. Wenn ich das richtig verstanden habe, hast du mit deinem "Quelltext" die Position von der 2. # im String herausgesucht oder? Wenn ich die 3. # haben will, müsste ich dann doch
  PosVonRaute2 := posEx('#', s, pos('#', s) + 2); schreiben oder?


thepaine91 - Mi 28.10.09 16:26

Davon abgesehen bei mir in Delphi6 existiert kein posex

EDIT: damit ihr nicht so verwirrt seit.


Maisinator - Mi 28.10.09 16:29

user profile iconthepaine91 hat folgendes geschrieben Zum zitierten Posting springen:
Davon abgesehen bei mir in Delphi6 existiert kein posex


Also wenn das nun eine Anspielung auf die Lieblingsbeschäftigung vieler Männer und dem Hinterteil eines Menschen sein soll, bist du hier glaub ich falsch!


Andreas L. - Mi 28.10.09 16:35

user profile iconthepaine91 hat folgendes geschrieben Zum zitierten Posting springen:
Davon abgesehen bei mir in Delphi6 existiert kein posex


Sonst hast du nichts zu tun, oder? :roll:

user profile iconMaisinator hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconAndreas L. hat folgendes geschrieben Zum zitierten Posting springen:
Ja, in der Unit StrUtils ist die Funktion posEx. Dieser kann man als 3. Parameter ein Offset übergeben.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
  s: String;
  PosVonRaute2: Integer;
begin
  s := 'TEST#TEST2#';
  PosVonRaute2 := posEx('#', s, pos('#', s) + 1);

Cool! Danke für deine schnelle Hilfe. Wenn ich das richtig verstanden habe, hast du mit deinem "Quelltext" die Position von der 2. # im String herausgesucht oder? Wenn ich die 3. # haben will, müsste ich dann doch
  PosVonRaute2 := posEx('#', s, pos('#', s) + 2); schreiben oder?


Nein, als 3. Parameter gibst du an ab welchen Zeichen mit der Suche begonnen werden soll. Ich zähle eins hinzu weil sonst mit der Suche direkt bei der Raute begonnen werden würde was dann auch das Ergebnis wäre. Wenn du 3 Rauten hast, musst du erst die Position der ersten suchen, dann mit posEx die der zweiten und den Rückgabewert verwendest du dann wiederum als 3. Parameter für den nächsten posEx-Aufruf.


Maisinator - Mi 28.10.09 16:37

Ah! Stimmt, hab das pos bei pos('#', s) übersehen... :oops:


thepaine91 - Mi 28.10.09 16:43

Nein das war eine Anspielung darauf das es Posex in D6 nicht gibt. -.-
Das ihr euch von sowas gleich in die irre leiten lasst :O


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
// Für leute ohne die Funktion
function FindCharacter(str : string; sub: char; anzahl: integer): integer;
var tempanzahl, i: integer;
begin
  tempanzahl := 0;
  i := 0;
  while tempanzahl < anzahl do
  begin
    if str[i] = sub then
      inc(tempanzahl);
    inc(i);
  end;
  result := i;
end;  // funktioniert so natürlich nur mir Char

Sofern man die Funktion nicht hat wollte ich das nur anmerken falls später jemand mit z.B. d6 auf diesen Thread stößt.