Klassen-Variablen und -methoden |
Top Previous Next |
Beispiele > GrepUrls > Klassen-Variablen und -methoden
Nun sollen einige Variablen und Methoden vorgestellt werden, die auf der Element-Seite definiert sind.
Die Fundstellen der Url's sollen in einer Klassenvariablen vom Typ mstrstr gesammelt werden.
mstrstr m_mUrl
Als Schlüssel soll dabei die gefundene Url selbst dienen, und der Wert wird aus dem Namen der aktuellen Datei und der zugehörigen Zeilennummer zusammengesetzt. Diese erhält man aus Methoden des Parsers:
SourceName() Name der aktuellen Quelldatei xState.Line() Zeilennummer
Eine Variable vom Typ format soll helfen, die Namen und Nummern zu einem Gesamtausdruck zu verknüpfen:
format m_fPosition
Durch die Anweisung:
m_fPosition.parse(" Page: %|1$|%|50t|Line: %|2$|");
wird m_fPosition mit dem Format-String " Page: %|1$|%|50t|Line: %|2$|" initialisiert. Hierin steht "%|1$|" für die Position des ersten Arguments, %|2$| für die Position des zweiten Arguments und %|50t| für das Auffüllen mit Leerzeichen des davorstehenden Textteiles auf insgesamt 50 Zeichen. Wenn z.B. der Dateiname "D:\C_biblio\boost\index.htm" und die Zeilennummer 52 durch den %-Operator an das Format-Objekt übergeben wurden, gibt dieses durch Aufruf der str()-Methode den folgenden String zurück:
" Page: D:\C_biblio\boost\index.htm Line: 52"
Um die Dateinamen nicht zu lang werden zu lassen, sollen sie in der kürzeren Form mit relativen Pfadangaben ausgedruckt werden. Im Projekt gibt es deshalb eine spezielle Methode, die die absoluten Pfade, die SourceName() liefert in die relativen Pfade umformt:
str GetRelPath() { return ".." + SourceName().substr(SourceRoot().length()); }
Die Funktion besteht aus nur einer, schwer lesbaren Zeile. Was in dieser Zeile passiert, wird klarer, wenn man sie in mehrere Teilschritte aufspalten würde:
str sRoot = SourceRoot(); unsigned int pos = sRoot.length(); str sAbsFilename = SourceName(); str sPart = sAbsFilename.substr(pos); str sRelFilename = ".." + sPart;
Der von der Methode zurückgegebene relative Dateiname wird zusammengesetzt aus dem String ".." und dem Teilstring des absoluten Dateinamens, der dem String, der das Quellverzeichnis bezeichnet, folgt. Bezogen auf "D:\C_biblio\boost\index.htm" mit dem Quellverzeichnis "D:\C_biblio\boost" erhält man so:
..\index.htm
Eine weitere auf der Seite für Klassenelemente definierte Klassenmethode ist AddPosition, der eine Url xsUrl und die dazugehörige Fundstelle xsWhere als Parameter übergeben werden:
{{ if(m_mUrl.findKey(xsUrl)) { m_mUrl[xsUrl] += "\n" + xsWhere; } else m_mUrl[xsUrl] = xsWhere; }}
Sie berücksichtigt, dass es eventuell mehrere Fundstellen für die gleiche Url geben kann.In der Funktion wird zunächst abgefragt, ob eine Adresse bereits einmal aufgefunden wurde. Falls nein, wird im else-Zweig die aktuelle Fundstelle als Wert des Url-Schlüssels gesetzt. Falls ja, wird die neue Fundstelle einfach an die bisherigen angefügt.
Vor Beendigung des Programms wird m_mUrl mittels der Funktion PrintAll ausgedruckt, wobei die gefundenen Internet-Adressen automatisch in alphabetischer Ordnung erscheinen:
m_mUrl.reset(); while(m_mUrl.gotoNext()) { out << m_mUrl.key() << endl; out << m_mUrl.value() << endl << endl; }
|
Diese Seite gehört zur TextTransformer Dokumentation |
Home Inhalt English |