Autor Beitrag
Tomac
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

Win XP
D6 Ent
BeitragVerfasst: So 02.02.03 14:42 
Hallo.

Wie kann ich es machen, dass ich von einem Pfad nur dass bekomme, was nach dem vorletzten "\" steht?
Also zum Beispiel aus
c:\programme\borland\delphi6\project1.exe
soll
\delphi6\project1.exe
werden.

THX
Tomac


Zuletzt bearbeitet von Tomac am So 02.02.03 19:28, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 02.02.03 15:29 
Du fängst von hinten an, mit einer Schleife nach dem Backslash zu suchen und speicherst den Index des zweiten Vorkommens. Dann mit Copy den entsprechenden Teil herausholen.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: So 02.02.03 18:06 
also den pfad bekommst du mit extractfilepath und dann musst du den string durchgehen wie es peter sagt !


PS: änder mal den Topic Titel, sodass er sagt was du meinst (also Pfade zerlegen)

_________________
In the beginning was the word.
And the word was content-type: text/plain.
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: So 02.02.03 18:09 
nach extractfilepath ist der dateiname aber net mehr dabei...
und den will er haben...


Fiji-Fighter
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 02.02.03 18:16 
Jo, deswegen mein Vorschlag. Irgendwie so:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function sub_path (my_path : STRING) : String;
VAR i : INTEGER;
       gefunden : Integer;
begin
  i:=Length(my_path)+1;
  gefunden:=0;
  while (i>1) and (gefunden<2) do
  begin
    dec(i);
    if my_path[i] = '\' then inc(gefunden);
  end;
  if gefunden = 2 then result:=copy(my_path,i,Length(my_path)-i+1)
  else result:='';
end;


Der Code ist nicht getestet, kann also noch x Fehler enthalten.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: So 02.02.03 18:19 
warum benutzt du net
for i:=length(..) downto 1 do... ???

Fiji-Fighter
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 02.02.03 18:29 
Weil die Schleife ja abbrechen soll, wenn der zweite Backslash gefunden worden ist. Und das mache ich ungern mit "break". Das ist meiner Meinung nach eine unsaubere Programmierweise.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Tomac Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

Win XP
D6 Ent
BeitragVerfasst: Mo 03.02.03 14:04 
Die Funktion von Peter Lustig hat bestens funktioniert.
Danke
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Mo 03.02.03 17:31 
wieso soll break unsauber sein ?

_________________
In the beginning was the word.
And the word was content-type: text/plain.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 03.02.03 17:52 
Wenn ich eine Schleife haben will, die bei einer bestimmten Bedingung abbricht, dann mache ich das mit einer Repeat- oder While-Schleife.
Eine For-Schleife ist nicht dafür konzipiert worden, bei einer bestimmten Bedingung abzubrechen. Die Break-Anweisung ist nur eine "Rettung", die am ursprünglichen Sinn einer For-Schleife komplett vorbei geht.
Außerdem ist es für jemanden, der einen fremden Quelltext liest, nicht sofort ersichtlich, dass die For-Schleife nicht einfach durchläuft, sondern auch noch anders abbrechen kann. Erst ein unscheinbares "Break" liefert den Hinweis darauf. Bei einer While- oder Repeat-Schleife ist sofort ersichtlich, wann sie abbricht. Natürlich nur, wenn auch hier der "Break"-Befehl vermieden wird.
Ich gebe zu, dass "Break" sehr verführerisch ist und ich dem auch schon ein paar Male erlegen bin, aber ich halte die Benutzung von "Break" für unsauber und unschön. Irgendwie finde ich einen Programmierstil, der ohne das auskommt, sehr viel besser, als einen der darauf angewiesen ist.

Das alles ist natürlich eine sehr persönliche und subjektive Einschätzung.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Brueggendiek
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 304

Win 98, Win98SE, Win XP Home
D5 Std
BeitragVerfasst: Mo 03.02.03 18:36 
Hallo Leute!

Da kann ich Peter Lustig nur zustimmen!
Mir rollen sich die Fußnägel auf, wenn ich sowas lese:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
while True do
begin

//2 Seiten Code

  if irgendwas then break;

// 1 Seite Code

end;


Kann man da diese Abbruchbedingung nicht in das While schreiben? Für mich ist das erst mal ne Endlosschleife.

Es gibt übrigens, wenn der Code der Schleife mindestens einmal durchlaufen werden soll, auch noch "repeat" - "until"!

So ganz nebenbei: als ich programmieren lernte, galten seitenweise Schleifen als unsauber - Prozedur schreiben, die in der Schleife aufgerufen wird.

Bisher habe ich nie Break verwendet! Exit verwende ich gerne mal, um beim Testen eine Prozedur nicht auszuführen - direkt hinter das begin ein exit, entsprechend markiert zum Wiederfinden!


Gruß

Dietmar Brüggendiek
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 03.02.03 18:40 
Zitat:
als ich programmieren lernte, galten seitenweise Schleifen als unsauber - Prozedur schreiben, die in der Schleife aufgerufen wird.
Da kann ich Dir nur zustimmen. Überhaupt finde ich, dass vielzuwenig Prozeduren verwendet werden. Die machen einen Quelltext schon viel übersichtlicher. Besonders weil man aus dem Prozedurennamen (wenn er hoffentlich sinnvoll gewählt wurde) schon viel über die Funktion herausfinden kann und dies das Lesen des Codes noch einmal vereinfacht und angenehmer macht.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Di 04.02.03 20:26 
wenn man das so betrachtet habt ihr beide schon recht !! :roll:

_________________
In the beginning was the word.
And the word was content-type: text/plain.