Die beiden vorangegangenen Teile handelten von den Funktionen
GETDIR() und
ADDBS() sowie
GETFILE(),
CHDIR und
CURDIR(). In diesem Eintrag geht es nun um die Zerlegung der einzelnen Bereiche eines Dateinamens inklusive vorgelagertem Pfadnamen.
Wenn wir mit Hilfe von
GETFILE() eine Datei selektiert und die Auswahl überprüft haben,
cFile = GETFILE()
IF FILE(cFile)
...
ENDIF
kommt es immer wieder vor, dass wir nur einen Teil des in '
cFile' stehenden Wertes verarbeiten möchten.
Gehen wir einmal davon aus, dass in
cFile der folgende Wert enthalten ist:
C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc
so stellt uns Visual Foxpro nun u.a. sieben Funktionen bereit, diesen String zu zerlegen.
Die Funktion
JUSTDRIVE() liefert uns als Ergebnis den Laufwerksbuchstaben:
C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc
cFile = [C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc]
?JUSTDRIVE(cFile)
Die Funktion
JUSTPATH() liefert uns als Ergebnis den Laufwerksbuchstaben inklusive des kompletten Pfades, jedoch ohne Backslash am Ende:
C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc
cFile = [C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc]
?JUSTPATH(cFile)
Die Funktion
JUSTSTEM() liefert uns als Ergebnis den Dateinamen ohne Suffix:
C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc
cFile = [C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc]
?JUSTSTEM(cFile)
Die Funktion
JUSTFNAME() liefert uns als Ergebnis den Dateinamen mitsamt dem Suffix:
C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc
cFile = [C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc]
?JUSTFNAME(cFile)
Die Funktion
JUSTEXT() liefert uns als Ergebnis nur das Suffix:
C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc
cFile = [C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc]
?JUSTEXT(cFile)
Mit Hilfe dieser Funktionen können wir den Datei- bzw. Verzeichnisnamen in 5 Segemente zerlegen und ggf. durch neue Teile ersetzen. Wollen wir nun bspw. eine Backup-Datei von Demodatei.doc im selben Verzeichnis anlegen, dann greift die Funktion
FORCEEXT(). Mit ihrer Hilfe wird aus
Demodatei.doc der String
Demodatei.bak Hierbei steht es uns frei, den kompletten Verzeichnisnamen oder nur den reinen Dateinamen mitzugeben.
cFile = [C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc]
?FORCEEXT(cFile,[bak])
?FORCEEXT(JUSTSTEM(cFile),[bak])
?FORCEEXT(JUSTFNAME(cFile),[bak])
Soll die Backup-Datei in einem Unter- oder Parallelordner abgelegt werden, so könnte die Funktion
FORCEPATH() zum Zuge kommen.
Für den Unterordner '
Backups':
C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Backups\Demodatei.doc
cFile = [C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc]
?FORCEPATH(cFile,ADDBS(JUSTPATH(cFile)) + [Backups])
Im Parallelordner '
Backups':
C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Backups\Demodatei.doc
cFile = [C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc]
?FORCEPATH(cFile,ADDBS(JUSTPATH(JUSTPATH(cFile))) + [Backups])
Im Verbund mit der Funktion
FORCEEXT() ergeben sich daraus nun bspw. die folgenden Funktionen:
LOCAL lcBackupExt as String, lcBackupPath as String, ;
cFile as String, cFNew as String, cSubDir as String, cParall as String
lcBackupExt = [bak]
lcBackupPath = [Backups]
cFile = GETFILE()
cFNew = FORCEEXT(JUSTSTEM(cFile),lcBackupExt)
cSubdir = GetSubdirectory(JUSTPATH(cFile),lcBackupPath,.T.)
cParall = GetParallelDirectory(JUSTPATH(cFile),lcBackupPath,.T.)
CLEAR
=CreateBackupFile(cFile,cSubDir + cFNew)
=CreateBackupFile(cFile,cParall + cFNew)
FUNCTION CreateBackupFile
LPARAMETERS vSourceFile as String, vTargetFile as String
LOCAL llReturn as Boolean
?[kopiere ] + vSourceFile
?[nach ] + vTargetFile
TRY
COPY FILE (m.vSourceFile) TO (m.vTargetFile)
?[Kopiervorgang erfolgreich durchgeführt]
llReturn = .T.
CATCH
?[Kopiervorgang ist fehlgeschlagen]
ENDTRY
RETURN llReturn
ENDFUNC
FUNCTION GetSubdirectory
LPARAMETERS vPath as String, vSubDir as String, vCreate as Boolean
LOCAL lcPath as String
m.vPath = ADDBS(m.vPath)
lcPath = FORCEPATH(m.vPath,m.vPath + m.vSubDir)
IF m.vCreate = .T. AND !DIRECTORY(lcPath)
MKDIR (lcPath)
ENDIF
RETURN lcPath
ENDFUNC
FUNCTION GetParallelDirectory
LPARAMETERS vPath as String, vSubDir as String, vCreate as Boolean
LOCAL lcPath as String
lcPath = ADDBS(ADDBS(JUSTPATH(JUSTPATH(ADDBS(m.vPath)))) + m.vSubDir)
IF m.vCreate = .T. AND !DIRECTORY(lcPath)
MKDIR (lcPath)
ENDIF
RETURN lcPath
ENDFUNC