txt-Dateien durchsuchen und verschiedene Einträge zählen

Peter1607

Grünschnabel
Hallo Zusammen,

ich würde gerne ein Programm in C bzw C++ erstellen, welches Textdateien(txt) in einem Ordner durchsucht. Für jeden Tag gibt es eine Textdatei.
Ausschnitt einer Text Datei:

2006/02/15 09:56:41 146.254.233.147 edit Main.NewPages mrre
2006/02/15 09:56:42 146.254.233.147 browse Main.NewPages
2006/02/15 09:57:09 146.254.233.147 edit Main.NewPages
2006/02/15 09:58:03 146.254.233.147 edit Main.NewPages mrre
2006/02/15 09:58:04 144.145.168.208 browse Main.NewPages
2006/02/15 09:58:12 146.254.233.147 edit Main.NewPages
2006/02/15 09:58:19 146.254.233.147 edit Main.NewPages mrre
2006/02/15 09:58:20 141.73.39.55 browse Main.NewPages

Ich würde gerne folgende Daten aus jeder Textdatei erhalten, Datum, Anzahl der verschiedenen IP`s , Anzahl der editierungen, Anzahl der verschiedenen Editoren.

Die Daten sollten am besten in eine Tabelle ausgegeben werden und sich aktualisieren lassen :eek:

Datum: das auslesen des Datums ist kein problem.
Anzahl der verschiedenen IP`s: sind unterschiedlich lang und es sollen nur die Anzahl der verschiedenen IP`s gezählt werden, also müssen sie verglichen werden, nur wenn sie noch nicht vorgekommen sind, werden sie gezählt.
Anzahl der editierungen: Anzahl der 'edit' im Text, ist auch nicht so schwer.
Anzahl der verschiedenen Editoren: nur vorhanden wenn editiert wurde, könnte also parallel mit editierungen laufen, immer die vier letzten Zeichen in einer Zeile in der edit steht.

:confused: So wer kann mir nun helfen, oder wer hat eine Idee wie ich das alles Lösen kann.
Bin über jeden Ratschlag dankbar...

Vielen Dank schon mal an ALLE

Gruss

Peter
 
Zuletzt bearbeitet:
Hi.

In C++ würd ich das so anpacken:

Erstmal in einer Schleife zeilenweise die Datei einlesen. (getline)

Dann einen std::istringstream mit der gelesenen Zeile initialisieren.

Dann versuchen die Zeile in verschiedene Variablen einzulesen (date, time, ip, operation)

Wenn das klappt, dann kann man die IPs in einer std::map<std::string, int> speichern und im Wert zählen wie oft eine IP vorkam. Wenn die operation "edit" ist, dann natürlich einen Zähler inkrementieren und in einer std::map<std::string, int> die Anzahl der Editoren analog zu den IPs erfassen.

Gruß
 
hallo!

ich hab so ein ähnliches Problem mal in Verbindung mit dem Borland C++ Builder lösen müssen. Vielleicht isses bei dir genau so. Sehr arbeitserleichternd (wegen der im Vergleich zu PHP nicht allzu komfortablen String-Verarbeitung) war dann für mich:

Code:
void Split(TStringList *feld,String eingabe,String delimiter)
{
int pos,dellang;
feld->Clear();
feld->Duplicates=dupAccept;
dellang=delimiter.Length();
pos=eingabe.AnsiPos(delimiter);
while(pos>0)
        {
        feld->Add(eingabe.SubString(1,pos-1));
        eingabe.Delete(1,pos+dellang-1);
        pos=eingabe.AnsiPos(delimiter);
        }
feld->Add(eingabe);
}
(classes.hpp)

um die Zeilen in einzelne Strings zu teilen.
 
Zurück