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