Entwickler-Ecke
Sonstiges (Delphi) - Pfade zerlegen
Tomac - So 02.02.03 14:42
Titel: Pfade zerlegen
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
Christian S. - 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.
matze - 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)
Raphael O. - So 02.02.03 18:09
nach extractfilepath ist der dateiname aber net mehr dabei...
und den will er haben...
Fiji-Fighter
Christian S. - So 02.02.03 18:16
Jo, deswegen mein Vorschlag. Irgendwie so:
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
Raphael O. - So 02.02.03 18:19
warum benutzt du net
for i:=length(..) downto 1 do... ???
Fiji-Fighter
Christian S. - 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.
Tomac - Mo 03.02.03 14:04
Die Funktion von Peter Lustig hat bestens funktioniert.
Danke
matze - Mo 03.02.03 17:31
wieso soll break unsauber sein ?
Christian S. - 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
Brueggendiek - 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:
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. - 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
matze - Di 04.02.03 20:26
wenn man das so betrachtet habt ihr beide schon recht !! :roll:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!