Trick 53: Qual der
Verzeichniswahl
ExtraTrick: Mehrere Dateitypen gleichzeitig zur Wahl
Aufgabe: Der Nutzer soll ein
Verzeichnis auswählen dürfen
Warum: Es kann immer mal vorkommen,
daß bestimmte Dinge
wohlsortiert in bestimmten, parallelen Ordnern liegen. Wenn es
dann an die Nutzung der Dinge geht, ist mitunter erst einmal
der richtige Ordner auszuwählen.
Lösung:
Mit fnam ... geht das nicht direkt, aber indirekt!
In xfnam.rtf steht es auch, aber ...
Sagen wir, es hängen mehrere
Unterordner an c:\allegro, und der
Nutzer soll einen davon
wählen. Das geht so:
fnam
|.c:/allegro/*
ins #uvz
var "Wahl="
#uvz
zur
Wahl anbieten
select
if cancel end
gewaehlten Namen in #uvZ
ins #uvZ
var "Ihre
Wahl: " #uvZ
mes
In #uvZ steht dann nur der Name des
Unterordners, den man also
mit c:\allegro\ zusammensetzen
muß zum vollständigen Pfadnamen,
z.B. mit var
"c:\\allegro\\" #uvZ
Der Trick steckt in der ersten
Zeile, also in dieser Syntax:
fnam
|.<verzeichnisname>/*
Hier kann man somit statt
c:/allegro jeden beliebigen Ordnernamen
einsetzen, mit / oder \\ als
Trennzeichen zwischen den Stufen.
Statt nur * könnte da z.B. a*
stehen, dann würden nur die mit
a beginnenden Ordnernamen angeboten.
Der Befehl fnam |. schreibt die Namen der Unterordner in
die iV,
bietet sie also nicht selber zur Wahl an! Das tut erst der Befehl
select, der sich mit der korrekten Syntax anschließt.
Statt als select-Liste kann
man auch die Namen als ViewListe anbieten.
Beide Rezepte sind als Beispiele 3
und 4 in der Dokumentation zum
Befehl fnam genau
angegeben! Trick 53 ist also streng genommen
überflüssig - aber hatten
Sie's schon gewußt?
Damit sich's aber trotzdem lohnt,
hier noch ein
ExtraTrick:
Dem Nutzer sollen alle Dateien vom
Typ .flx und .inc gemeinsam
zur Wahl angeboten werden! Das geht
so:
fnam
FLEXdateien|*.flx;*.inc
Ergo: Hinter dem | kann nicht nur
einer, sondern mehrere Dateitypen
stehen, getrennt durch ;. Das ist
nicht neu, das war schon lange so,
es stand bloß noch nirgends.
Wenn es ein bestimmtes Verzeichnis
sein soll, z.B. c:\allegro\flex,
dann muß es so aussehen:
fnam
FLEXdateien|c:\\allegro\\flex\\*.flx;*.inc
Hier allerdings geht / statt \\
nicht, sorry. Es liegt einfach daran,
daß nicht alle internen
Windows-Funktionen in dem Punkt einheitlich
arbeiten.