|
Oftmals benötigte Programme in der EDV sind Filter. Ein Filter ist ein Programm, das einen Eingabestrom in einen Ausgabestrom umwandelt. Dies ist zum Beispiel notwendig bei der Konvertierung einer Textdatei von einem in einen anderen Zeichensatz. Die einfachste Form stellt die Umwandlung einzelner Zeichen dar. Komplizierter wird es, wenn man Löschungen hinzufügt, da der erzeugte Text kürzer wird als der Originaltext. Beziehen sich die Ersetzungen auf Zeichenketten unterschiedlicher Länge für Quelle und Ziel oder werden Einfügungen durchgeführt, so ist der Filter universal einsetzbar. Für die meisten Anwendung genügen aber einfache Zeichenersetzungen. Die C++-Klasse Konvertierung kann als Basis für die Programmierung eines Filters dienen. Sie beherrscht die Umwandlung einzelner Zeichen und das Löschen von Zeichen. Letzteres kann sehr nützlich sein, um aus Druckdateien Steuerzeichen zu entfernen.
| Filter |
|
Die Klassendefinition ist in der Datei KONVERT.H enthalten. Die private Variable neue_zeichen beinhaltet das Array der Zeichen, in die umgewandelt werden soll. Der Bitvektor loeschen dient der Kennzeichnung der Zeichen, die gelöscht werden sollen.
| Headerdatei |
|
Als Memberfunktionen stehen drei Konstruktoren, ein Destruktor, die eigentliche Konvertierfunktion, eine Funktion, die die zu konvertierenden Zeichen manipuliert, und eine Funktion, die die zu löschenden Zeichen manipuliert, zur Verfügung.
| Memberfunktionen |
|
In der Datei KONVERT.CPP befindet sich der Quellcode der Klasse Konvertierung.
| Quellcode |
|
Der erste Konstruktor ist ohne Parameter. Er dimensioniert den Bitvektor, der die Information der zu löschenden Zeichen beinhaltet, auf 256. Bei dieser Dimensionierung werden alle Bits gelöscht, was bedeutet, daß bei der Konvertierung keine Zeichen gelöscht werden sollen. Die Initialisierung des Konvertierarrays findet ebenfalls im Konstrukor statt. Die Konvertierung geschieht folgendermaßen: Das konvertierte Zeichen steht im Array an der Position des zu konvertierenden Zeichens, weshalb im Konstruktor alle Zeichen mit dem Schleifenzähler initialisiert werden.
| Konstruktor ohne Parameter |
|
Der nächste Konstruktor gestattet eine Beeinflussung der Konvertiertabelle. Er benötigt als Parameter Zeiger auf die Strings der zu konvertierenden Zeichen und der konvertierten Zeichen. Hierbei besteht eine 1:1-Korrespondenz in den Strings. Das erste Zeichen im ersten String wird in das erste Zeichen des zweiten Strings gewandelt usw. Sind die Strings unterschiedlich lang, so wird beim Ende des kürzeren Strings abgebrochen.
| Konstruktor mit zwei Parametern |
|
Der dritte Konstruktor ist ähnlich dem vorhergehenden. Hier ist aber zusätzlich zur Beeinflussung der zu konvertierenden Zeichen auch eine Beeinflussung der zu löschenden Zeichen möglich. Im dritten Parameter muß ein Zeiger auf den String übergeben werden, der die zu löschenden Zeichen beinhaltet.
| Konstruktor mit drei Parametern |
|
konvertiere führt die Wandlung der Zeichen durch. Sie benötigt als Parameter den Zeiger auf die Quelle. Der Puffer wird in sich selbst gewandelt. Dies ist problemlos möglich, da der Zielbereich nie länger als der Quellbereich werden kann. Es können nur Zeichen gelöscht, nicht aber eingefügt werden. Die Funktion erhält als zweiten Parameter die Größe des Puffers und gibt die Anzahl der gültigen Zeichen zurück. Da der Parameter laenge als Referenz deklariert ist, braucht der Aufrufer nicht die Adresse der Variablen zu übergeben, die die Länge beinhaltet, und erhält in dieser Variablen die neue Länge zurück. Zuerst prüft die Funktion für jedes Zeichen, ob es gelöscht werden soll. Ist dies der Fall, so findet keine Umwandlung statt. Alle nicht zu löschenden Zeichen werden mittels der Matrix neue_zeichen in sich selbst oder in ein anderes Zeichen gewandelt. Die um die Anzahl der gelöschten Zeichen verminderte Länge wird zurückgegeben.
| Memberfunktion konvertiere |
|
setze_zeichen erlaubt die Manipulation der zu konvertierenden Zeichen. Ihr müssen als Parameter Zeiger auf die Strings, die Quell- und Zielzeichen beinhalten, übergeben werden. Die Manipulation funktioniert in gleicher Weise wie bei den beiden Konstruktoren, die die Beeinflussung der zu konvertierenden Zeichen gestatten.
| Memberfunktion setze_zeichen |
|
loesche_zeichen erlaubt die Manipulation der zu löschenden Zeichen. Der Funktion müssen als Parameter ein Zeiger auf den String, der die zu löschenden Zeichen beinhaltet, übergeben werden. Die Manipulation funktioniert in gleicher Weise wie bei dem Konstruktor, der die Beeinflussung der zu löschenden Zeichen gestatten.
Demonstrationsprogramm
Ein Beispielprogramm, wie diese Klasse verwendet werden kann, befindet sich in der Datei DEMOKON.CPP.
Das globale Array buffer beinhaltet die zu wandelnde Zeichenkette. Es sind zwei Objekte der Klasse Konvertierung deklariert. konv führt noch keine Umwandlungen durch. konv1 wandelt die deutschen Umlaute in andere Zeichen. Zusätzlich soll konv1 die Zeichen h, i und j löschen. Der Ursprungsstring wird vor und nach der Konvertierung durch konv1 angezeigt. Das Objekt konv wird veranlaßt, die Buchstaben e, f und g in Großbuchstaben zu wandeln. Nach der erneuten Wandlung des Strings mit konv wird er nochmals angezeigt.
Die Klasse Konvertierung ist nicht aufwendig, aber sehr nützlich. Oft muß man ein Programm für die Konvertierung von Daten erstellen. Wie einfach dies mit der Klasse Konvertierung ist, zeigt das Beispielprogramm. Mit dieser Klasse kann aber nicht nur eine statische Umwandlung durchgeführt werden, sondern die Umwandlung und die Löschung sind auch zur Laufzeit beeinflußbar.
| Memberfunktion loesche_zeichen
|