| |
|
|
Michael Wodrich | Dateinamen aufdröseln ab Version 10.0 (nutzt SubStr rückwärts und Match$) KompilierenMarkierenSeparierenSplitFilename (Test-Schnipsel)
Ab XProfan 10
Proc SplitFilename
Parameters Vollname$
Declare Laufwerk$, Pfad$, Datei$, Extension$
Laufwerk$ = Match$(.:,Vollname$)
Pfad$ = Match$(~.{0,2}\(.*\)?,Vollname$)
Datei$ = SubStr$(Vollname$,-1,If(InStr(\,Vollname$),\,:))
Extension$ = If(InStr(.,Datei$),SubStr$(Datei$,-1,.),)
AddString Voller Dateiname: q + Vollname$ + q
AddString Laufwerk + MkStr$(.,8) + : q + Laufwerk$ + q
AddString Pfad + MkStr$(.,12) + : q + Pfad$ + q
AddString Dateiname + MkStr$(.,7) + : q + Datei$ + q
AddString Extension + MkStr$(.,7) + : q + Extension$ + q
AddString
EndProc
ClearList
SplitFilename C:
SplitFilename Datei
SplitFilename Datei.
SplitFilename C:Datei.ext
SplitFilename C:Datei.ext
SplitFilename C:TestDatei
SplitFilename C:Test.$$$Datei.ext
SplitFilename C:Test.$$$Datei.
SplitFilename C:Test.$$$Datei
SplitFilename .Text.$$$
SplitFilename ....von weiter vorndatei.ext
ListBox$(die Ergebnisse,2)
VVV damit habe ich mal schnell die Ergebnisse abgegriffen
Declare s$,B#
Dim B#,50000
MoveListToMem(B#,
)
BlockWrite C:\Test_Splitfilename.txt,B#,0,Len(String$(B#,0))
Dispose B#
ShellExec(C:\Test_Splitfilename.txt,open,1)
End
und die Ergebnisse:
Voller Dateiname: C: Laufwerk........: C: Pfad............: Dateiname.......: Extension.......:
Voller Dateiname: Datei Laufwerk........: Pfad............: Dateiname.......: Datei Extension.......:
Voller Dateiname: Datei. Laufwerk........: Pfad............: Dateiname.......: Datei. Extension.......:
Voller Dateiname: Catei.ext Laufwerk........: C: Pfad............: Dateiname.......: Datei.ext Extension.......: ext
Voller Dateiname: Catei.ext Laufwerk........: C: Pfad............: Dateiname.......: Datei.ext Extension.......: ext
Voller Dateiname: C:TestDatei Laufwerk........: C: Pfad............: Test Dateiname.......: Datei Extension.......:
Voller Dateiname: C:Test.$$$Datei.ext Laufwerk........: C: Pfad............: Test.$$$ Dateiname.......: Datei.ext Extension.......: ext
Voller Dateiname: C:Test.$$$Datei. Laufwerk........: C: Pfad............: Test.$$$ Dateiname.......: Datei. Extension.......:
Voller Dateiname: C:Test.$$$Datei Laufwerk........: C: Pfad............: Test.$$$ Dateiname.......: Datei Extension.......:
Voller Dateiname: .Text.$$$ Laufwerk........: Pfad............: .Text.$$$ Dateiname.......: Extension.......:
Voller Dateiname: ....von weiter vorndatei.ext Laufwerk........: Pfad............: ....von weiter vorn Dateiname.......: datei.ext Extension.......: ext |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 16.06.2006 ▲ |
|
|
|
|
| [quote:283141f477=Michael Wodrich] und die Ergebnisse: [box:283141f477] Voller Dateiname: Catei.ext [/box:283141f477][/quote:283141f477] Da fehlt ein Backslash Du solltest die Laufwerksbuchstaben auch mit BackSlash zurückgeben, alle API-Aufrufe akzeptieren im allgemeinen beides, also C: und C:, so das es mit Backslash einheitlicher wäre. Ansonsten sehr nützlich. |
|
|
| |
|
|
|
Michael Wodrich | Ist nicht ganz richtig mit dem Backslash.
Die Datei kann ja in *jedem* Verzeichnis auf Laufwerk C: sein, wenn sie so angegeben ist.
Und es ist nicht die Aufgabe eines Splitters für einen vollständigen Namen zu sorgen. Dann wären nämlich auch die .. alle aufgelöst worden.
Manchmal braucht man einfach nur einen Namens-Verhackstücker, weil man ein Teil davon austauschen möchte.
Korrekt wäre allerdings, den Dateinamen von der Erweiterung zu befreien. Dann reicht ein einfaches addieren der Teile und man hat wieder ein Ganzes (deshalb: Laufwerk nur der Buchstabe und Doppelpunkt).
Ist bei den Snippets gelandet, weil man sich da ja was draus ableiten kann.
In jedem Fall geht es jetzt mit XProfan 10 alles etwas kürzer zu schreiben.
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 16.06.2006 ▲ |
|
|
|
|
Jac de Lad | Gibts dafpr nicht auch ne API? Ich meine, wenn ich aus einem Dateinamen den Pfad extrahieren will, ich könnte das grad gut gebrauchen, finde das aber nicht. |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 07.03.2007 ▲ |
|
|
|
|
| |
|
| |
|
|
|
| Michael Wodrich
Ist nicht ganz richtig mit dem Backslash.
Die Datei kann ja in *jedem* Verzeichnis auf Laufwerk C: sein, wenn sie so angegeben ist.
Völlig korrekt denn wenn sich ein Prozess z.B. via chdir auf d: befinded, zuvor aber nach c:sonstwasirgendwas gewechselt wurde - so würde die Angabe von C:meine.datei auf c:sonstwasirgendwasmeine.datei zeigen, statt auf c:meine.datei.
Michaels Algo funzt IMHO absolut richtig. |
|
|
| |
|
|
|
Jac de Lad | |
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 08.03.2007 ▲ |
|
|
|