Klassenelemente

Top  Previous  Next

Beispiele > Textstatistik > Klassenelemente

 

In den bisherigen Beispielen wurden lokale Variablen verwendet, die innerhalb von Aktionen deklariert wurden und bei Bedarf als Parameter an andere Produktionen oder Token weitergereicht wurden. In diesem Projekt werden dagegen Klassenvariablen verwendet. Die Deklaration von Klassenvariablen erfolgt auf einer eigens dafür eingerichteten Seite der TETRA-Umgebung. Auf derartig deklarierte Variablen kann dann innerhalb der Aktionen jeder Produktion und jedes Tokens (und jeder Klassenfunktion s.u.) unmittelbar zugegriffen werden. Ihr Wert kann dort verändert werden und steht dann unmittelbar auch in anderen Programmteilen zur Verfügung.

Im aktuellen Projekt gibt es beispielsweise eine Integer-Klassenvariable m_iChars, die die Anzahl der bisher gezählten Zeichen speichert. In jeder Token-Aktion wird dieser Wert um die Anzahl der durch das Token erkannten Zeichen erhöht.

 

Die Deklaration von m_iChars erfolgt auf der Seite für Klassenelemente.

 

 

Example_TextStats_m_iChars_ge

 

 

Um eine dort eine Variable zu deklarieren, muss in der entsprechenden Checkbox der Werkzeugleiste ein Häkchen gesetzt werden. Andernfalls würde m_iChars als Name einer Klassenfunktion interpretiert.

Der Typ der Variablen ist im Typ-Feld als int gesetzt.

Das Textfeld ist nun mit Init überschrieben. Für Variablen kann es leer bleiben, es kann aber auch verwendet werden, um der Variablen einen Anfangswert zuzuweisen, den sie erhält, bevor ein neuer Text Transformiert wird. Hier erhält m_iChars den Wert 0. Dies ist der default Wert den sie ohnehin erhalten hätte; die explizite Initialisierung an dieser Stelle ist jedoch ein sauberer Programmierstil. Beim Export von Code für eine Parserklasse, könnte eine fehlende Initialisierung zu Programmfehlern führen, da in C++ eine Integer-variable nicht automatisch mit einem Anfangswert versehen wird.

 

Andere Klassenvariablen zum Zählen der Anzahl der Zeilen, Worte etc werden auf die gleiche Weise deklariert wie m_iChars.

 

Ein Sonderfall ist die Variable m_mAbbr. Sie ist vom Typ mstrstr und wird mit einer Reihe von Ausdrücken initialisiert, die gefolgt von einem Punkt eine Abkürzung bilden.

 

m_mAbbr["am"] = "";

m_mAbbr["Am"] = "";

m_mAbbr["usw"] = "";

m_mAbbr["etc"] = "";

...

 

Diese Liste wird beim Zählen der Sätze eines Textes gebraucht, um unterscheiden zu können, ob ein Punkt ein Satzende markiert oder zu einer Abkürzung gehört. Da die Liste keineswegs vollständig ist, wird die Satzzählung stets mit einem möglichen Fehler behaftet bleiben.

Als Wert wird den Listenelementen stets ein leerer String zugewiesen. Er wird nicht gebraucht. In diesem Projekt wird lediglich die Eigenschaft einer Map ausgenutzt, dass eine Suche nach einem Schlüsselwort in ihr sehr schnell erfolgt, da die Schlüsselworte in sortierter Reihenfolge vorliegen.

 

Weiter gibt es eine Klassenfunktion PrintResult:

 

out << "Text statistics:\n";

out << m_iLines << "\tlines\n";

out << m_iChars << "\tcharacters\n";

out << m_iWords << "\twords\n";

out << m_iNumbers << "\tnumbers\n";

out << m_iSentences << "\tsentences\n"

 

Sie sorgt für die formatierte Ausgabe der Zählung am Ende des Programms.

 

 



Diese Seite gehört zur TextTransformer Dokumentation

Home  Inhalt  English