Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Hilfe ! timestamp erkennen

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 <
000
08.09.2008, 11:32 Uhr
~maslensa
Gast


Hallo

Ich habe solche daten in eine text datei

2006/09/06-09:02:28.928134-29530- /vobs/ims_cscf1
2006/09/06-09:02:28.928134-29530- Sapi::deliver_external_message() Sapi successfully delivered

2006/09/06-09:02:28.928461-29530- /vobs/ims_cscf1/sapi/src/Sapi.cxx
2006/09/06-09:02:28.928461-29530- Sapi::deliver_external_message() Sapi
2006/09/06-09:02:28.928461-29530- ====================
2006/09/06-09:02:28.928461-29530- SAPI: external message <432>

2006/09/06-09:02:28.928461-29530-*********************************

mein programm muss aber das gleiche timestamps erkennen und die Informationen , die neben timestamp stehen , muss dann hinterneinander schreiben. Z.B so;

2006/09/06-09:02:28.928461-29530-
/vobs/ims_cscf1/sapi/src/Sapi.cxx
Sapi::deliver_external_message() Sapi
====================
SAPI: external message <432>

Ich habe code geschrieben aber ich kann nicht weiter. meine coden schauen so aus ;

#include <iostream>
#include <fstream>
#include <string>
#include <map>
#include <vector>

using namespace std;

class collector
{
public:
void arrange(string,string);
};
void collector::arrange(string infile,string outfile)
{
ifstream in(infile.c_str());
ofstream out(outfile.c_str());
out.flush();
string line;
map <string ,string ,less<string> > arrangedlist;
while(getline(in,line))
{
int splitcharindex=line.find_last_of("-");
string timestamp=line.substr(0,splitcharindex);
string eventmesg=line.substr(splitcharindex+1,line.size()-(splitcharindex+1));
arrangedlist[timestamp]+=("\n"+eventmesg);

}
map<string,string,less<string> >::iterator itm;
itm=arrangedlist.begin();
for(;itm!=arrangedlist.end();itm++)
{
out<<itm->first<<itm->second<<"\n";
}
out.close();
}
int main()
{
collector col;
col.arrange("dmesg1.txt","dout.txt");
return 0;
}

Diese Coden kann momentan nicht ganz gut erkennen . Wie kann ich es kriegen ?

Danke für die Hilfe.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.09.2008, 12:01 Uhr
berniebutt



Eine Textdatei auslesen und etwas daraus ausfiltern ist eine simple Programmieraufgabe. Mache das zeilenweise und interpretiere den Inhalt jeder Zeile wie Du es haben willst,
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.09.2008, 13:23 Uhr
xXx
Devil


Nja kommt darauf an, ob du die Daten noch weiter brauchst ... dann so:

LogEntry.hpp

C++:
#pragma once

#include <iostream>
#include <string>
#include <ctime>

struct log_entry
{
    std::time_t time;
    unsigned int value_first;
    unsigned int value_second;
    std::string data;

    log_entry()
        : time(std::time(NULL))
    {}

    friend std::istream& operator>>(std::istream& in, log_entry& data)
    {
        char seperator(0);
        return data.read_date(in) >> seperator >> value_first >> seperator >> value_second >> data;
    }

    const bool equal_time(log_entry const& rhs) const
    { return (time == rhs.time) && (value_first == rhs.value_first) && (value_second == rhs.value_second); }

    const bool operator==(log_entry const& rhs) const
    { return equal_time(rhs); }

private:
    std::istream& read_date(std::istream& in)
    {
        char seperator(0);
        std::tm tm;
        in >> tm.tm_year >> seperator >> tm.tm_mon >> seperator >> tm.tm_day >> seperator >> tm.tm_hour >>
            seperator >> tm.m_min >> seperator >> tm.tm_sec;

        tm.tm_year -= 1900; // day since year 1900
        --tm.tm_mon; // day since January (0 to 11)
        
        time = std::mktime(&tm);

        return in;
    }
};


main.cpp

C++:
#include <fstream>
#include <vector>
#include <iterator>
#include <iostream>
#include "LogEntry.hpp"

int main()
{
    // datei öffnen
    std::ifstream file_stream("log001.log");
    if (!file_stream)
    {
        std::cerr << "FEHLER: Log nicht gefunden!\n";
        return 1;
    }

    // daten einlesen
    std::vector<log_entry> data(std::istream_iterator<log_entry>(file_stream), std::istream_iterator<log_entry>());

    // jetzt kannste damit machen was du willst ... z.B. so ausgeben (Zeitformatierung mal ausgelassen ;) ):
    for (std::vector<log_entry>::const_iterator it(data.begin()); it != data.end(); ++it)
    {
        std::cout << *it.time;
        while (it != data.end() && *it == *(it + 1))
        {
            std::cout << *it.data << "\n";
            ++it;
        }
    }
}

so ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.09.2008, 20:05 Uhr
Kest
saint


Könnte man so umformen:


C++:
#include <fstream>
#include <iterator>
#include <map>
#include <sstream>
#include <string>



int main()
{
    std::ifstream von("mesg1.txt");
    std::map<std::string,std::string> buf;
    
    for(std::string line; std::getline(von, line);){
          std::istringstream is(line);
          
          std::string key;
          is >> key;
    
          if(key.length()){
                 std::ostringstream s;
                 s << is.rdbuf() << std::endl;
          
                 buf[key] += s.str();
          }
    }
          
            
    if(buf.size()){
             std::ofstream nach("out.txt");
            
             typedef std::map<std::string,std::string>::const_iterator CI;
             for(CI I=buf.begin(); I!=buf.end(); ++I)
                    nach << I->first << "\n" << I->second << std::endl;
    }        
}

--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


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: