Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Log datei auswerten...

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
09.08.2004, 10:40 Uhr
~NotUsed
Gast


Hi, ich hab ein problem mit folgender aufgabenstellung

ich soll ein progamm schreiben das eine logdatei ausliest
erstmal soll jede zeile mit wo Dmsuser vorkommt in eine ergebnisdatei gespeichertwerden...
wäre ja nicht so mein problem, mein c ist zwar eingerostet aber naja so eine log datei hat über 7MB und enthält alle möglichen ascii zeichen.

so mein programm bis jetzt:



C++:
// Scan a Logfile

#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <sys/timeb.h>
#include <time.h>

FILE *input, *output;
char string[1000][999999]; // ja sind halt hausnummern, kenn die max zeilen und zeichen nicht ...
int maxzeichen[999999];


void main()
    {

        input=fopen("i2z21-7-2004log-master.txt","r"); //diesen monats-log öffnen
        output=fopen("Result.txt","a");

        int zeichen=0;
        int zeile=0;

        while(!feof(input)) //in string speichern
            {
                zeichen++;
                //cout<<zeile<<" "<<zeichen<<endl;
                string[zeichen][zeile]=fgetc(input);
                    if (string[zeichen][zeile]=='\n')
                        {
                            zeile++;
                            maxzeichen[zeile]=zeichen;
                            zeichen=0;
                        }    
                fputc(string[zeichen][zeile],output); //ist ein test ob wenigstens die eingabe funkt
            }

        int maxzeilen;
        maxzeilen=zeile;

        zeile=0;
        while(zeile<maxzeilen)
        {
            zeile++;
            
/*
            int length;
            length=strlen(string[zeile]);    //gibt fehler beim compilieren! , wollte es zuerst ohne maxzeichen machen...
*/
        
            zeichen=0;
            //cout<<string[1587]<<endl; fehler beim ausführen, bricht sofort ab

                while(zeichen<maxzeichen[zeile])
                    {
                        //cout<<zeile<<" "<<zeichen<<endl;        hier bricht er ab: string[1587][48]
                        zeichen++;
                        if(string[zeichen][zeile]=='\n') break; //nur zur sicherheit... hab ich außerdem schon vor der while bedingung gehabt
                        if( string[zeichen][zeile] == 'd' && string[zeichen+1][zeile] == 'm' && string[zeichen+2][zeile] == 's' && string[zeichen+3][zeile] == 'U' && string[zeichen+4][zeile] == 's' && string[zeichen+5][zeile] == 'e' && string[zeichen+6][zeile] == 'r' )
                            {
                                fputs(string[zeile],output);
                            }
            
                    }    
    
        }
        fclose(input);
        fclose(output);
        getchar();
    }



also ich denke er kann das ganze nicht richtig einlesen haben, denn es kommt nicht das raus was rauskommen sollte...

zum programm, ja ich weis es ist umständlich aber wie gesagt mein c ist eingerostet und ich bin gern bereit mir andere lösungen anzusehen...

naja [url= www.freewebs.com/notused/
LogFileAuswertung.zip]hier[/url] mal result und log datei gezippt

bin über jeden ratschlag froh, thx in advance !
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.08.2004, 10:48 Uhr
NotUsed



Rechtsklick, save target as
Dieser Post wurde am 09.08.2004 um 10:49 Uhr von NotUsed editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.08.2004, 11:47 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


also in deiner logdatei find ich nicht einmal das wort dmUser...
du includierst da oben iostream.h .... willst du es nun in c oder kanns auch c++sein?



Bearbeitung:

ach so und um Pablo zuvorzukommen... Es muss int main und nicht void main heissen...
vergiss am besten das ich das geschrieben hab


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 09.08.2004 um 11:49 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.08.2004, 11:51 Uhr
NotUsed



es sollte nach Dmsuser gesucht werden, und ja programmiersprache egal (c oder c++, was weniger mühe macht )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.08.2004, 12:04 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ohne das zu testen in der art

C++:
#include <iostream>
#include <string>
#include <fstream>

int main(){

std::string line;
std::ofstream os("Result.txt");
std::ifstream is("i2z21-7-2004log-master.txt");
     while(is){
         std::getline(is,line);
         if((int)line.find("dmUser")!=-1)
              os<<line<<std::endl;
     }
os.close();
is.close();
}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
09.08.2004, 12:12 Uhr
NotUsed



wow, besten dank!

c++ hat's in sich...

wärend ich da mit feldern von char herummurkse, schaffst du das mit den paar zeilen

ich sollte wohl c++ fertigzulernen, hab nämlich bei objektorientierter programmierung aufgehört

naja auf jedenfall big fat thx!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
09.08.2004, 12:15 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


in c wärs auch nicht wirklich länger geworden, das einzige problem wäre gewesen das man nicht weiss wie lang eine zeile ist und dann ggf speicher nachallokieren muss was einen hier der std::string abnimmt...
an sonsten zeile einlesen z.b. mit fread und mit strstr in der zeile suchen ob dmUser drin vorkommt, wenn ja in die andere datei ballern, also auch nicht wirklich länger
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
09.08.2004, 12:20 Uhr
NotUsed



naja ich leb halt nach dem motto "wieso einfach wenns kompliziert auch (nicht) geht"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
09.08.2004, 13:45 Uhr
0xdeadbeef
Gott
(Operator)


...mal abgesehen davon, dass ich da im Zweifel auf grep zurückgreifen würde:

sh:

grep dmUser i2z21-7-2004log-master.txt > Result.txt


Ist Windalf mal wieder zu C-ig. Wir schreiben wie folgt:

C++:
#include <algorithm>
#include <fstream>
#include <string>

int main() {
  std::string line;
  std::ofstream out("Result.txt");
  std::ifstream in("i2z21-7-2004log-master.txt");

  while(is) {
    std::getline(is,line);
    if(static_cast<int>(line.find("dmUser")) != -1) // <-- hier
      os<<line<<std::endl;
  }

  return 0;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
09.08.2004, 15:23 Uhr
NotUsed



2 fragen:
was hat diese version für einen vorteil? das mit den return hab ich eh eingebaut...
welche programmiersprache ist der befehl grep? also c ist das nicht...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: