gibt es unter D6 sowas wie pos (Zeichen in String suchen), daß von
rechts loslegt ? Unter VB nennt sich das denn RightInStr anstatt InStr.
Beispiel (Vereichnisname von Dateiname trennen) :
...
TestString := Verzeichnis;
while pos('\', TestString) > 0 do
begin
Posi := pos('\', TestString);
Ergebnis := ConCat(Ergebnis, copy(TestString, 1, Posi));
TestString := copy(TestString, (Posi + 1), (length(TestString) -
Posi));
end;
...
Erscheint mir etwas umständlich. Wäre mit RightPos nen Einzeiler. Gibt
es da eine kürzere Lösung ?
Gruß,
André
Es kommt jetzt keine Antwort auf die Stringfunktionen.
Doch wenn du nur den Dateinamen haben willst:
Benutze ExtractFilePath, ExtractFileName und Konsorten.
(Steht alles in der OH mit anderen "Relateds" unter "Siehe auch")
Grüße, Tomas
______________
<werbung>
www.camo-pfeiffer.de
www.germandevnet.de
www.dulzinea.de
</werbung>
> gibt es unter D6 sowas wie pos (Zeichen in String suchen), daß von
> rechts loslegt ? Unter VB nennt sich das denn RightInStr anstatt InStr.
Wie wäre es mit jener Funktion - die sucht das n'te Auftreten eines
Zeichens, und das Vorzeichen von n bestimmt die Suchrichtung.
Mitgeliefert wird eine solche Funktion aber nicht.
function posn(const s,t:string; count:integer):integer;
{ find the count'th occurence of the substring,
if count<0 then look from the back }
var
i,h,last: integer;
u: string;
begin
u:=t;
if count>0 then begin
result:=length(t);
for i:=1 to count do begin
h:=pos(s,u);
if h>0 then
u:=copy(u,pos(s,u)+1,length(u))
else begin
u:='';
inc(result);
end;
end;
result:=result-length(u);
end
if count=0 then result:=last
else result:=0;
end
else
result:=0;
end;
Und tschues,
Andreas
--
Andreas Hoerstemeier
email: an...@scp.de (work)
an...@hoerstemeier.de (home)
www: http://www.hoerstemeier.com
bist Du sicher, daß das funktioniert? Wenn count <= 0,
liefert die Funktion doch 0 zurück, oder? Und "last" wird
irgendwie auch nicht gesetzt...
Bye, Lutz.
> gibt es unter D6 sowas wie pos (Zeichen in String suchen), daß von
> rechts loslegt ? Unter VB nennt sich das denn RightInStr anstatt InStr.
LastDelimiter(), Unit SysUtils
Du suchst aber eigentlich ExtractFileDir()/ExtractFilePath().
Simon
--
Your mouse has moved. Windows has to reboot for changes to take effect.
Homepage: http://www.picsoft.de
Delphi Fundgrube: http://www.picsoft.de/faq.htm
> bist Du sicher, daß das funktioniert? Wenn count <= 0,
> liefert die Funktion doch 0 zurück, oder? Und "last" wird
> irgendwie auch nicht gesetzt...
Mist,da sind ein paar Zeilen zwischendrin verlorengegangen. Also nochmal
komplett:
function posn(const s,t:string; count:integer):integer;
{ find the count'th occurence of the substring,
if count<0 then look from the back }
var
i,h,last: integer;
u: string;
begin
u:=t;
if count>0 then begin
result:=length(t);
for i:=1 to count do begin
h:=pos(s,u);
if h>0 then
u:=copy(u,pos(s,u)+1,length(u))
else begin
u:='';
inc(result);
end;
end;
result:=result-length(u);
end
else if count<0 then begin
last:=0;
for i:=length(t) downto 1 do begin
u:=copy(t,i,length(t));
h:=pos(s,u);
if (h<>0) and (h+i<>last) then begin
last:=h+i-1;
inc(count);
if count=0 then BREAK;
end;
end;
if count=0 then result:=last
else result:=0;
end
else
result:=0;
end;
--
Andreas Hörstemeier wrote:
> Lutz Tandecki wrote:
> function posn(const s,t:string; count:integer):integer;
Und: Für Liebhaber von Rekursionen:
function pos_n(const a: string; b: string; n: integer): integer;
var k: integer;
begin
if n < 1 then Begin result := 0; exit End; //Sollte nicht vorkommen
if n = 1 then result := pos(a, b) else Begin
k := pos(a, b);
if k = 0 then result := 0 else BEgin
b := copyab(b, k + 1);
result := pos_n(a, b, n - 1); //rekursiv
if result > 0 then result := k + result;
ENd;
End;
end;
function wort_n(const s: string; const n: integer): string;
var p: integer; //z.B. 'aaa bbb ccc'; mindestens ein ' ' dazwischen
begin
p := pos(' ', s);
if p = 0 then Begin
if n > 1 then result := '' else result := trim(s);
End else Begin //p>0
if n = 1 then result := trim(copy(s, 1, p - 1)) else
result := wort_n(trim(copyab(s, p + 1)), n - 1);
End;
end;
MFG Joachim Mohr
http://delphi.zsg-rottenburg.de
brandneu: TTMathe