Trick 52: Dateien
abklappern
Aufgabe: Schnell mal eben eine Anzahl
Dateien durchsehen oder sonstwas
mit jeder einzelnen davon machen.
Warum: Gelegentlich will man nicht
nur eine einzelne Datei,
sondern gleich ein ganzes Bündel irgendwie behandeln.
Lösung
Man braucht drei Funktionen:
1. :dirlist
Die Zusammenstellung
der Namensliste der Dateien
Dabei kann es sein,
daß diese nicht alle auf nur einem Verzeichnis
liegen, sondern auch
welche auf einem oder mehreren Unterverzeich-
nissen. Die Funktion
soll ein bequemes Zusammenstellen einer solchen
Liste ermöglichen.
2. :firstname
Aufruf der ersten
Datei (d.h. ihres Namens)
3. :nextname
Aufruf der
nächsten Datei. Mit Feststellung, ob es keine mehr gibt.
Diese Funktionen wurden in eine
Datei dirlist.inc verpackt.
Richtig einfach sind diese
Funktionen nicht, weil allerhand Rand-
bedingungen zu berücksichtigen
sind.
Die Nutzung ist jedoch ganz leicht.
Hier ganz knapp das Strickmuster,
das man auch für eigene Zwecke
noch modifizieren kann:
(Stellen mit ... sind darin frei
gestaltbar)
-----------------------------------------------------
Flag
#udS setzen: Unterverzeichnisse mitverarbeiten
(wenn
nicht gewünscht, dann die 1 weglassen)
#udS 1
Flag
#udE setzen: Liste vor Verarbeitung noch editieren
(in
einem aresqa-Fenster) Sonst die 1 weglassen
#udE 1
Namensmuster in iV vorbereiten, z.B. c:/allegro/*.apr
var ...
Und
nun kommen die Funktionen:
1.
Dateiliste dazu erstellen
perf dirlist
if not $DL
mes Keine Datei gefunden;end
2.
Ersten Namen in iV kopieren
perf firstname
if "" mes
Abbruch oder keine Datei gefunden;end
Schleife. Dateiname steht in iV
:lp
Hier
einfuegen, was mit der Datei passieren soll
...
3.
Naechsten Namen in iV kopieren
perf nextname
if "" jump
ende
jump lp
:ende
Ende-Aktion nach Verarbeitung der letzten Datei
...
end
Unterprogramm einbinden
include
dirlist.inc
------------------------------------------------------
Tips:
Die Liste der Dateien ist nach
Ablauf immer noch in der
Variablen $DL, wo man sie
sich anschauen oder für andere
Zwecke weiterverwenden kann. $DL
wird erstellt in der
Unterfunktion :dirlist, d.h. man
braucht nur diese auszuführen,
wenn man nichts anderes als diese
Variable braucht.
Die Liste kann, weil $DL erhalten
bleibt, auch mehrfach mit
"perf firstname / perf nextname
..." abgearbeitet werden.
Anwendungsbeispiel:
Ein FLEX namens
DIRLIST.FLX zeigt: Man kann sich Listen
bestimmter Dateitypen
zusammenstellen und dazu dann eine
alphab. Liste der Dateien mit
Datum, Größe und den ersten
drei Zeilen erstellen lassen.