Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - pos für genaues Suchen und Finden


Kralle - Do 21.07.11 22:47
Titel: pos für genaues Suchen und Finden
Hallo,

pos('1','"1,2,3"') >0 ist true genauso wie pos('1','"11,2,3"'), denn 11 enthält ja auch eine 1.

Gibt es eine Pascal bzw Delphi-Funktion für die 1 <> 11 ist?

Gruß Heiko


Delete - Do 21.07.11 23:02

Nicht das sich wüsste.


BenBE - Do 21.07.11 23:23


Delphi-Quelltext
1:
Pos(',1,'','+SuchString+',');                    


Kralle - Fr 22.07.11 06:56

Moin,

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
Pos(',1,'','+SuchString+',');                    


das funktioniert aber nicht für die erste und letzte Zahl, weil der Suchstring
Zitat:
"11,2,3"
ist und so die erste Abfrage so aussieht pos(',1,',',"11,2,3",') und ,1, nicht ,"1, ist.

Ich weiß ich habe in meinem Beispiel Zahlen benutzt, aber auch bei Texten gebe es das Problem.
Z.B. pos(',ab,',',"ab,und,zu",')

Gruß Heiko


Gausi - Fr 22.07.11 07:44

Spiel mal ein bißchen mit TStringlist und deren Eigenschaft CommaText rum, z.B. so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
sl := TStringList.Create;
try
  sl.CommaText := DeinStringMitKommasDrin;
  for i := 0 to sl.Count-1 do
    if sl[i] = SuchString then 
    begin
       showMessage('Suchstring gefunden');
       break;
    end
finally
  sl.free;
end;


HenryHux - Fr 22.07.11 08:33

Wieso holst du dir nicht das Pos Ergebnis und überprüfst dann pos-1 und pos+1?

lg


Kralle - Fr 22.07.11 09:31

Hallo,
user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
Wieso holst du dir nicht das Pos Ergebnis und überprüfst dann pos-1 und pos+1?

lg


An so einer Lösung war ich jetzt grade am basteln (hätte eine Funktion werden sollen).

Gruß Heiko


Kralle - Fr 22.07.11 09:35

Hallo Gausi,

user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
Spiel mal ein bißchen mit TStringlist und deren Eigenschaft CommaText rum, z.B. so:


Ehrlich gesagt, war mir "CommaText" kein Begriff.
Ich habe jetzt Deine Lösung etwas überarbeitet:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
function cpos(searchstring,text:string):integer;
  var
    i: integer; //Schleifen-Variable
    tmplist: TStringList; // temporäre Stringlist
  begin
    tmplist := TStringList.Create;
    try
      tmplist.CommaText := text;   // Kommagetrennten Text in Stringlist überführen
      i:=0;
      while i < tmplist.Count do
        begin
          if tmplist[i] = searchstring then  // Wenn das gesuchte enthalten ist
            Begin
              Result:=i+1;
              i:= tmplist.Count;   // Um die While-Schleife zu beenden
            End
          else           // Wenn das gesuchte nicht enthalten ist
            Result:=-1;
          inc(i);
        end;
    finally
      tmplist.free;
    end;
  end;


Danke, für den Schubs in die richtige Richtung.

Gruß Heiko

P.S. Unter Deinem Namen steht: "Erhaltene Danke:", wie "Bedankt" man sich? Sehe keinen Button dafür.


Gausi - Fr 22.07.11 09:49

Oh, da ist wohl jemand absolut gegen Breaks, was? ;-)

Der Danke-Button ist der Button mit dem Daumen-Hoch-Smilie links unten an jedem Beitrag.


Horschdware - Fr 22.07.11 11:27

Eigentlich ist das ja ein tolles Beispiel für die Anwendung regulärer Ausdrücke.

Delphi-Quelltext
1:
,?11,?                    


würde mir da spontan in den Sinn kommen.