Rekursion ist eine interessante Programmiertechnik, mit der sich oft komplexe Aufgaben sehr einfach gestalten lassen. Dabei ruft sich im Programmablaufe ein Stück Programmcode (im allg. eine Funktion) immer wieder selbst auf und reicht damit eine Teilaufgabe weiter. Gerade zur Bearbeitung von Daten, die
in einer Baumstruktur angelegt sind, ist solche eine Programmiertechnik unumgänglich.
Nun kann man zwar in ColdFusion keine Funktionen anlegen, aber Rekursionen sind
auch hier möglich.
Zur Demonstration einer in ColdFusion programmierten Rekursion soll die Aufgabe
dienen, den Verzeichnisbaum eines vorgegebenen Pfades auszulesen und als Baumstruktur
darzustellen. Dazu muss das Programm beginnend von einem Ausgangspunkt sich
selbstständig durch alle Unterverzeichnisse laufen. Diese Problemstellungen
sind im allg. ideal für Rekursionen.
Zuerst benötigen wir einen Codeabschnitt, der sich selbst aufrufen kann. Das
erledigt man in ColdFusion dabei am besten mit einem Customtag. Dazu wird folgender
Code benutzt:
<cfparam name="Attributes.path">
<cfdirectory action="list"
directory="#Attributes.path#" name="qDir">
<ul>
<cfoutput query="qDir">
<cfif qDir.Name neq "."
and qDir.Name neq ".." and qDir.Type eq "Dir">
<li><b>#qDir.Name#</b>
<cf_showDirectoryTree path="#Attributes.path#\#qDir.name#">
</li>
</cfif>
</cfoutput>
</ul>
Dieses File ist als showDirectoryTree.cfm im Root der Customtags
abzuspeichern.
Das Tag liest das durch das Attribut path übergebene Verzeichnis
mit dem <cfdirectory>-Tag aus und erhält so ein Queryset mit den
Verzeichnisnamen.
Mit dem <cfif> werden die reinen Unterverzeichnisse herausgefiltert. Hat
man dann so den Namen eines neuen Unterverzeichnisses erhalten, wird damit wiederum
das Tag nochmal aufgerufen. Das Tag hangelt sich so durch alle Unterverzeichnisse
bis es kein Unterverzeichnisse mehr findet.
Der Erste Aufruf kann dann in einer normales CFM-Seite folgendermassen aussehen:
<body>
<b>folgende Verzeichnisse wurden gefunden</b><br>
<cf_showDirectoryTree path="C:\cfcode">
</body>
Zur Ausgabe wird eine einfache HTML-Liste benutzt, mit der sich
sehr leicht Bäume darstellen lassen.
Dieses Prinzip der Programmierung läst sich auf viele andere Aufgaben ausdehnen.
Z.B. ist es so leicht möglich, Datenbankeinträge als Baum darzustellen.