Addieren der einträge



  • Hallo und zwar hab ich folgendes Problem, ich habe hier diverse log-Files die tägliche Sicherungen machen, wie kann ich die Größe der täglichen Sicherungen summieren und mir nur das gesamtergebniss in einer txt datei ausgeben lassen, bisher gibt mir mein Programm alle tägl. Einträge einzeln aus. Die MB zahl in der Klammer sollte summiert werden, die nimmt er auch einwandfrei, nur eben das aufsummierte ausgeben ist mein Problem. Hoff meine erklärung ist nicht zu verwirrend*g*
    Wär sehr dankbar für eure hilfe, danke.
    Hab einen kurzen Ausschnitt eines log files angehängt, dann seht ihr was ich meine, danke.

    Starting BFS "5889123f3fc381" on 17-AUG-2003 21:04:21 (5000.008 MB)
    "E:..." for 5000.008 MB
    Finished BFS "5889123f3fc381" (931 secs, 5.371 MB/s) on 17-AUG-2003 21:19:52

    Starting BFS "5889143f3fc381" on 17-AUG-2003 21:19:52 (650.008 MB)
    "E:\..." for 650.008 MB
    Finished BFS "5889143f3fc381" (100 secs, 6.500 MB/s) on 17-AUG-2003 21:21:32

    Starting BFS "5940563f48fe13" on 24-AUG-2003 20:04:07 (80.648 MB)
    "E:\..." for 80.648 MB
    Finished BFS "5940563f48fe13" (312 secs, 0.258 MB/s) on 24-AUG-2003 20:09:19

    Starting BFS "5940573f48fe13" on 24-AUG-2003 20:09:19 (7000.008 MB)
    "E:\..." for 7000.008 MB
    Finished BFS "5940573f48fe13" (2602 secs, 2.690 MB/s) on 24-AUG-2003 20:52:41

    Mein bisheriger code schaut so aus, wäre sehr über ein Bsp. oder einen verbesserungsvorschlag dankbar.

    WIN32_FIND_DATA FileData; 	// Data structure describes the file found
    	HANDLE hSearch;		// Search handel retourned by FindFirstFile
    
    hSearch = FindFirstFile (TEXT("K:\\...\\*.log"), &FileData);
    
    	if (hSearch == INVALID_HANDLE_VALUE)
    	   {
    		printf ("\n No .log files found.");
    	   return 0;
    	   }
    
    	while (FindNextFile (hSearch, &FileData))
    	   {
    	    strcpy(filename, pfad);
    		strcat(filename, FileData.cFileName);
    		if ((ifp = fopen (filename, "r")) == NULL)
    			{
    			printf( "File %s not found\n", filename);
    			exit(1);
    			}
    		printf (" File %s\n", filename);
    
    		ofp = fopen("output.txt","w+");
    		fprintf(ofp, "Server, Date, MB, Sum\n");
    
    		while (fgets(readbuffer, 100, ifp ) != NULL)
    			{
    
    			c = strstr(readbuffer, "Node Name:   ");
    			if (c != NULL)
    				{
    				strncpy(&name[0], c +13, 9);
    				name[8] = '\0';
    				}
    
    			c = strstr(readbuffer, "Starting BFS");
    			if (c != NULL)
    				{
    				c = strstr(readbuffer, " on ");
    				if (c != NULL)
    					{
    					strncpy(&date[0], c +4, 11);
    					date[11] = '\0';
    
    					c1 = strstr(readbuffer, "(");
    					c2 = strstr(readbuffer, "MB");
    					len = c2- c1 -2;
    					strncpy(size, c1 +1, len);
    					size[len] = '\0';
    
    					fprintf(ofp,"%s,%s,%s\n",name,date,size);
    

    Thx for all, Marc



  • ich würd das ganze einfach so machen

    tmp = (strchr(readbuffer, '(') + 1);
    tmp2 = strchr(tmp, ' ');
    	if(!strncmp(tmp2 + 1, "MB", 2)
    	{
    	tmp[tmp2 - tmp] = '\0';
    	cnt += atoi(tmp);
    	}
    

    also jede zeile nach "(" durchsuchen, dann nach dem leerzeichen splitten und schaun obs die MB angabe ist und wenn ja den counter um die jeweilige Zahl erhöhen.

    [edit] und übrigens du behandelst die erste file gar nicht [/edit]


Anmelden zum Antworten