Logfiles Auswerten!

Marseille

Grünschnabel
Hi C++ler,
wer kann mir bei der letzten Auswertung helfen?
Ich hab en Prog geschrieben das mir den String einzelner Logfiles auswertet.(Die Logfiles sind Infos einer Brennstation.)
Das Prog liest den String ein , Splittet ihn bei jedem "_" und gibt mir die einzelnen Infos wieder. Die *.ubl werden per Parameter angegeben (Siehe Quelltext).
Wieviele Logfiles, welche CD`s gebrannt wurden habe ich schon, mir fehlt jedoch die EINE Auswertung. Dort soll Ausgewertet werden welcher user welche Unterschiedlichen CD`s gebrannt hat und wer am meisten brannte. Ich denke dies müsste mit einem array funktioneiren jedoch hapert es mit der Umsetzung.
THX im vorraus für eure hilfe und IDEEN
Code:
// Logfiles.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung.
//
#include <windows.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
#include <dos.h>
#include <string.h>
#include <io.h>
//long _findfirst( char *filespec, struct _finddata_t *fileinfo );
#define rot 12
#define steffi 12
#define lol	 10
#define blau	3
 
void textcolor(WORD color)
{ 
	SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE), color); 
} 
 
struct MRec {
char produkt[30];
char rechner[30];
char user[9];
int jahr;
int monat;
int tag;
int std;
int minuten;
int sek;
long MB;
};
void insertionsort(int n, char daten[]){
int i, j;
char v;
 
for(i=1; i<n; i++){
	v = daten[i];
	for(j=i; j && (daten[j-1]>v); j--)
	 daten[j] = daten[j-1];
	daten[j] = v;
}
}
 
int main(int argc, char *argv[])
{
char* v1;
char* v2;
char* v3;
char* v4;
char* v5;
char* v6;
char* v7;
char* v8;
char* v9;
char* v10;
int howmanyppp=0;
int Zeile =0;
int i=0; 
int Zaehler=0;
char Hilf[80];
long handle;
struct _finddata_t f;
int howmuchMB=0;
int howmanyULaufwerk=0;
int howmanyPatch=0;
MRec db [1000];
char array[30][1000];
textcolor(rot);
while (i<=argc)
{
printf("%s\n",argv[i]);
i++;
}
 
strcpy (Hilf,argv[1]);
strcat(Hilf,"\\*.ubl");
printf("\n\n%s",Hilf);
handle = _findfirst(Hilf, &f);
 
if (handle == -1)
{
printf("\nfalscher Parameter");
return -1;
}
 
printf("\n%s",f.name);
while (1)
{
if (_findnext(handle,&f) != 0) break;
printf("\n%s\n",f.name);
/*scanf(f.name,"%[^_]%[^_]%[^_]%[^_]%s",v1,v2,v3,v4);
printf("%s %s %s \n%s",v1,v2,v3,v4);
 
	cout<<endl;*/
v1 = strtok (f.name,"_");						 
strcpy(db[Zeile].produkt, v1);
v2 = strtok (NULL,"_");						 
strcpy(db[Zeile].rechner, v2);
v3 = strtok (NULL,"_");	
strcpy(db[Zeile].user, v3);
// if 
strcpy(array[Zaehler],v3);
v4 = strtok (NULL,"_"); 
db[Zeile].jahr = atoi(v4);
v5 = strtok (NULL,"_");
db[Zeile].monat = atoi(v5);
 
v6 = strtok (NULL,"_");
db[Zeile].tag = atoi(v6);
v7 = strtok (NULL,"_"); 
db[Zeile].std = atoi(v7);
 
v8 = strtok (NULL,"_"); 
db[Zeile].minuten = atoi(v8);
 
v9 = strtok (NULL,"_");	
db[Zeile].sek = atoi(v9);
 
db[Zeile].MB=0;
 
if (strcmp(db[Zeile].produkt,"U-Laufwerk") == 0)
{
v10 = strtok (NULL,"_"); 
	 db[Zeile].MB= atoi(v10);
}
 
 
if(strcmp(db[Zeile].produkt,"PPP-CD") == 0)
{
howmanyppp++;
}
 
if(strcmp(db[Zeile].produkt,"U-Laufwerk") == 0)
{
howmanyULaufwerk++;
}
 
if(strcmp(db[Zeile].produkt,"Patch-CD") == 0)
{
howmanyPatch++;
}
 
textcolor(rot); 
printf("db[%d].produkt = %s\n", Zeile, db[Zeile].produkt);
textcolor(rot);
printf("db[%d].rechner = %s\n", Zeile, db[Zeile].rechner);
textcolor(rot);
printf("db[%d].user = %s\n", Zeile, db[Zeile].user);
textcolor(steffi);
printf("db[%d].jahr = %d\n", Zeile, db[Zeile].jahr);
textcolor(rot);
printf("db[%d].monat = %d\n", Zeile, db[Zeile].monat);
textcolor(rot);
printf("db[%d].tag = %d\n", Zeile, db[Zeile].tag);
textcolor(rot);
printf("db[%d].std= %d\n", Zeile, db[Zeile].std);
textcolor(rot);
printf("db[%d].minuten = %d\n", Zeile, db[Zeile].minuten);
textcolor(rot);
printf("db[%d].sek = %d\n", Zeile, db[Zeile].sek);
textcolor(steffi);
printf("db[%d].MB = %d\n", Zeile, db[Zeile].MB);
textcolor(lol);
howmuchMB += db[Zeile].MB;
 
 
 
// printf("\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",v1,v2,v3,v4,v5,v6,v7,v8,v9,v10);
Zeile++;
Zaehler++;
 
 
 
 
}
 
/*Zeile=0;
strcpy(array[Zaehler],db[Zeile].user);
for (Zaehler=0;Zaehler<=1000;Zaehler++){
 
 
 
}*/
 
 
textcolor(lol);
printf("\n\n\n");
printf("Es sind insgesamt:");
printf(" %d " , Zeile-1);
printf("Logfiles\n" );
 
printf("Davon sind %d PPP-CD`s \n" , howmanyppp);
 
printf("Insgesamt wurden %d MB gebrannt" , howmuchMB);
printf("\nDavon wurden %d U-Laufwerke gebrannt" , howmanyULaufwerk);
printf("\nEs wurden %d Patch CD gebrannt" , howmanyPatch);
 
/* insertionsort(1001, db[Zeile].user);
for(Zeile=0; Zeile<1000; Zeile++)
	printf("%d\n", db[Zeile].user);
*/
 
 
 
textcolor(blau);
 
getch();
return 0;
}
 
moin


Du könntest z.B. eine struktur Namens Benutzer erstellen.

Code:
struct Benutzer
{
     char *name;
     int cds;
     char *cdnamen[100];
};

Nun kannst du Jeden Benutzer, wieviele Cds ergebrannt hat und wie die CDs heissen abspeichern.
Wenn du dann alles zusammen hast kannst du es bequem auswerten.


mfg
umbrasaxum
 
Danke für Deine schnelle Antwort.

Mein Problem liegt darin, dass ich nicht weiß, wie viele Benutzer diese Station benutzen werden. Ich habe vor, die Benutzer in einem Array abzuspeichern.Wenn ein User noch nicht im array enthalten ist, dann soll er hinzugefügt werden.Ansonsten muss die CD anzahl des einzelnen users um 1 erhöht werden. Außerdem soll diese die einzelnen arten der cd Aufzeichnen wie z.B. PPP-cd oder Patch-CD ...
 
moin


Ist doch kein Problem.
Meine erste Idee kannst du ja benutzen und machst es wie folgt:
Code:
struct Benutzer
{
     char *name;
     int cds;
     char *cdnamen[100];
} Benutzer[100];

Nun kannst du die Daten für 100 Benutzer speichern.

Wenn ein neuer erstellt werdne soll kannst du ja die vorhandenen Namen überprüfen, und wenn er noch nicht vergeben ist fübst du halt einen hinzu.


mfg
umbrasaxum
 
Zurück