Autor | Thema: Daetinamen aus Pfad ermitteln | | Datum:29.06.01 20:08 
(hendriklenz@gmx.de) | |
Hallo,
ich habe in einem String einen Dateinamen mit dem kompletten Pfad gespeichert (z.B. f:\testordner\test.exe) jetzt benötige ich aber nur den Dateinamen des Strins ohne den Pfad (im Beispiel hier -> test.exe).
Der String mit dem Dateinamen und Pfad ist variabel und immer unterschiedlich lang.
Wer hat hier eine Idee?!?
Vielen Dank und Grüsse
Hendrik
|
| | Datum:29.06.01 21:34 
(b.kuenzel@chello.at) | |
Hallo,
anbei eine Procedur in Profan, es gibt auch eine API-Funktion
Proc ExtractDateiName
Parameters Pfad$ 'z.B. f:\testordner\test.exe
Declare i%
Case Equ(Instr("\",Pfad$),0):Return Pfad$
i%=1
WhileNot Equ$(SubStr$(Pfad$,i%,"\"),"")
Inc i%
Wend
Return SubStr$(Pfad$,Sub(i%,1),"\") 'Ergebnis $(0) = test.exe
EndProc
Ich hoffe es ist das richtige
MFG
Bernhard
|
| | Datum:29.06.01 23:40 
(b.kuenzel@chello.at) | |
Du mußt natürlich bei der Procedur den Pfad entweder
f:\\testordner\\test.exe oder in Großbuchstaben
F:\TESTORDNER\TEST.exe übergeben, wichtig ist, daß das erste Zeichen nach \ ein Großbuchstabe ist. In Profan werden die Zeichen \t \n \a \z in ein Steuerzeichen umgewandelt.
Wenn man die Pfade z.B. von einer Listbox oder mit FindFirst$(S) in einen String ladet, sollte dies immer über der Funktion Upper$(S) erfolgen.
MFG
Bernhard
|
| | Datum:29.06.01 21:49 
(NSp_ware@t-online.de) | |
Hi Hendrik,
habe eine von wahrscheinlich mehreren möglichen Lösungen für Dich geschrieben. Du mußt aber aufpassen, woher Dein vollständiger Pfad+Datei kommt. Wird s$ durch das Programm selbst gesetzt (z.B. s$="c:\testpfad\testdatei"), so mußt Du jeden Backslash verdoppeln s$="c:\\testpfad\\testdatei"), damit Profan 7.0 damit klar kommt. Bei anderen Versionen kenne ich das Vehalten dazu nicht.
Gruß
Norbert
CLS
DECLARE s$
LET s$ = $SysPath
print s$
LET s$ = RIGHT$(s$, (LEN(s$) - 2))
WHILE ((INSTR(CHR$(92), s$)) > 0)
LET s$ = RIGHT$(s$, (LEN(s$) - INSTR(CHR$(92), s$)))
ENDWHILE
PRINT s$
WAITINPUT
END
|
| | Datum:30.06.01 10:17 
(Pascalxd@owl-online.de) | |
Hallo Leute!
Einen hab' ich auch noch ;-)
def GetSlash(1) (len($(1))-len(translate$($(1),"\","")))'-----Backshlashes zählen
def LeftDel(2) del$($(1),len($(1))-%(2)+1,%(2))'--------------Zeichen von Rechts löschen
def GetFileName(1) substr$($(1),GetSlash($(1))+1,"\")'--------Dateiname aus kompl. Pfad
def GetFilePath(1) LeftDel($(1),len(GetFileName($(1))))'------Verzeichnis aus kompl. Pfad
print GetFileName ("F:\Entwicklung\Profan-Eigen\Test.prf")
print GetFilePath ("F:\Entwicklung\Profan-Eigen\Test.prf")
Das klappt allerdings nur bei Pfaden mit Einzel-BackSlashes (andernfalls muß es eben entsprechend angepaßt werden) !
HTH
Pascal
|
| | Datum:01.07.01 13:32 
(hendriklenz@gmx.de) | |
Hallo,
danke für die Codes.
Da hätte man ja auch selber drauf kommen können :-)
Aber ich dachte eben es würde einen Befehl geben, naja jetzt klappts ja.
Vielen Dank und Grüsse Hendrik
|
| | Datum: 01.07.01 17:38 
(g.putschalka@utanet.at) | |
Hallo Hendrick,
ich denke daß die folgende Lösung noch einfacher ist.
Die Lösung stammt von Pascal!
Mit der Funktion CountChr wird ermittelt, wie oft ein bestimmtes Zeichen in einem String vorkommt.
Def CountChr(2) @sub(@len($(1)),@len(@translate$($(1),$(2),"")))
' Parm.1 = zu durchsuchender String, Parm.2 = Suchzeichen
wenn Du also als Parameter 1 den Pfad und als Parameter 2 den Backslash ( also "\" ) angibst, kannst Du zählen wieviele Backslashes vorkommen.
Damit besteht dann die Möglichkeit den letzten Substring (das Trennzeichen ist der Backslash) herauszulösen und das ist dann der Dateiname.
Mfg
Gerhard.
-------
Beispiel:
' ermitteln, wie oft ein angegebenes Zeichen in einem String vorkommt,
' teilen des Strings in Pfad und Dateiname
Declare Pfad$,Datei$,Anzahl%,PfName$
' Parm.1 = zu durchsuchender String, Parm.2 = Suchzeichen
def CountChr(2) @sub(@len($(1)),@len(@translate$($(1),$(2),"")))
Let Pfad$ = "E:\Abc\Bcd\Def\xyz.src" ' zu durchsuchender String
Let Anzahl% = @CountChr(Pfad$,"\") ' Vorkommen: Anzahl des Zeichens
' extrahieren Dateiname
Let Datei$ = @SubStr$(Pfad$,Anzahl%+1,"\")
' extrahieren Pfad (von der ges. Pfadlänge die Länge des Dateinamens
' abziehen = Länge des Pfades)
Let Name$ = @Left$(Pfad$,(@Len(Pfad$) - @Len(Datei$)))
' Ergebnis anzeigen
@MessageBox(Datei$,PfName$,48)
End
|
|
|