Mittwoch, 20. Februar 2008

Leerzeichen in Datei- und Verzeichnisnamen / Spaces in file- and directory names

Mit der Makrosubstitution stellt uns Visual FoxPro eine wirklich mächtige Funktion zur Verfügung. Sie bekommt jedoch früher oder später ein Problem in Bezug auf Verzeichnis- und Dateinamen.

Sobald in diesen ein Leerzeichen enthalten ist, erzeugt VFP beim Ausführen der substitutierten Variablen einen Fehler. Da wir dem Anwender üblicherweise nicht vorschreiben können, wie er bspw. seine Verzeichnisse oder Dateien benamen soll, müssen wir von Entwicklerseite sicherstellen, dass unsere Software damit zurecht kommt.

Beispiel:

cZielPfad = [D:\Eigene Dateien\Eigene Bilder\]
CHDIR &cZielPfad

VFP tauscht die Variable cZielPfad gegen deren Wert aus. Das Ergebnis dieses Vorgangs sieht somit wie folgt aus:


CHDIR D:\Eigene Dateien\Eigene Bilder\

Im Anschluss parst die VFP-Runtime den Code bis zum Leerzeichen und nimmt an, dass es sich um den Befehl "CHDIR D:\Eigene" handelt und dass sich daran ein zweiter Teilstring "Dateien\Eigene Bilder\" anschliesst, der jedoch keinen Sinn macht und somit einen Fehler erzeugt.

Uns stehen nun zwei Möglichkeiten offen, das Problem zu beseitigen.

Die schlechtere Variante ist, den Makro einfach in Anführungszeichen zu setzen:

CHDIR [&cZielPfad]

Dies stellt wirklich keine elegante Lösung dar. Letztlich wandeln wir auf diese Weise einen String in einen String um.
Da wir bereits einen String zur Verfügung haben, sollten wir diesen besser als Namensausdruck verwenden:


CHDIR (cZielPfad)

Dies funktioniert immer und überall dort wo der Fux den Namen (und/oder Pfad) von irgendetwas benötigt:

SET ... TO (cDateiname)
USE (cTabelle) ALIAS (cAlias)
CREATE TABLE/CURSOR (cName)
SELECT * FROM (cQuelle) INTO CURSOR/TABLE (cZiel)
SET PRINTER TO (cDruckername)
DIRECTORY(cPruefePfadname)
OPEN DATABASE (cDBPfadUndDatei)

usw.

Für den Einsatz von Namensausdrücken braucht es jedoch keine Leerzeichen in der Zeichenkette. Ganz im Gegenteil. Sie sollten grundsätzlich immer Verwendung finden! Bei dieser Vorgehensweise steht zudem die Tatsache auf der Habenseite, dass Namensausdrücke schneller sind als jedes Makro.

Keine Kommentare:

Kommentar veröffentlichen