Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 249591 (11027)

| Suchen
| Zurück zur Übersicht

Autor | Thema: Daetinamen aus Pfad ermitteln
Hendrik
| 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
Bernhard Künzel
| 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
Bernhard Künzel
| 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
Norbert Spörl
| 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
Uwe ''Pascal'' Niemeier
| 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
Hendrik
| 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
Gerhard Putschalka
| 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

| Zurück zur Übersicht