.log Sortieren ??
-
#include <iostream> #include <string> #include <fstream> #include <vector> #include <algorithm> using namespace std; struct entry { int nr; string log; }; class Compare { public: bool operator()( const entry& en1, const entry& en2 ) { return en1.nr < en2.nr; } }; int main() { ifstream in("log.txt"); string buff; entry neueintrag; vector <entry> log; while(!in.eof()) { getline(in,buff,'.'); neueintrag.nr = atoi(buff.c_str()); getline(in,buff); neueintrag.log = buff; log.push_back(neueintrag); } in.close(); sort(log.begin(),log.end(),Compare()); for(unsigned i=0;i<log.size();i++) { cout << log[i].nr << " " << log[i].log <<endl; } cin.get(); return 0; }
-
ouh, sehr nice.
danke vielmals, war schon fast zu viel des guten..
funzt aber nicht zu 100%
ich bastel mal weiter
-
myFile.open schrieb:
funzt aber nicht zu 100%
wo ist denn das Problem?
Wenn Du fleißig übst, Dich auch in die Geheimnisse der STL einarbeitest, dann kannst Du bald auch solche Programme hinschreiben.
#include <iostream> #include <fstream> #include <string> #include <vector> #include <algorithm> // sort #include <iterator> // i/ostream_iterator<> struct entry { int m_nummer; std::string m_restText; }; // -- Entry lesen std::istream& operator>>( std::istream& in, entry& e ) { return std::getline( in >> e.m_nummer, e.m_restText ); } // -- Entry schreiben std::ostream& operator<<( std::ostream& out, const entry& e ) { return out << e.m_nummer << e.m_restText << std::endl; } class Compare { public: bool operator()( const entry& en1, const entry& en2 ) const { return en1.m_nummer < en2.m_nummer; } }; int main() { std::ifstream quelle( "log.txt" ); if( !quelle.is_open() ) { std::cerr << "Fehler beim Oeffnen der Datei" << std::endl; return -1; } std::vector< entry > log( (std::istream_iterator< entry >( quelle )), (std::istream_iterator< entry >()) ); std::sort( log.begin(), log.end(), Compare() ); std::copy( log.begin(), log.end(), std::ostream_iterator< entry >( std::cout ) ); return 0; }
Du siehst das Lesen, sortieren und ausgeben ist jeweils eine Zeile Code. Die kleinen Helferlein nicht mitgerechnet
Gruß
Werner
-
lässt sich aber leider nicht compilieren.
Hängt in der Zeilestd::vector< entry > log( (std::istream_iterator< entry >( quelle )), (std::istream_iterator< entry >()) );
(Compiler meldet Ausdruckssyntax)
-
lern_ender schrieb:
lässt sich aber leider nicht compilieren.
welchen Compiler benutzt Du?
falls es eine Version 6 einer bekannten großen Softwarefirma ist, so geht es nicht. Ändere dann die Zeile 41 nach
std::vector< entry > log; std::copy( (std::istream_iterator< entry >( quelle )), std::istream_iterator< entry >(), std::back_inserter( log ) );
Gruß
Werner
-
Ich würde nicht die Zeile ändern, sondern die Versionsnummer des Compilers ändern.
-
Artchi schrieb:
Ich würde nicht die Zeile ändern, sondern die Versionsnummer des Compilers ändern.
Würde ich ja gerne. Leider macht mein Chef da nicht mit.
Warum hat der BCB denn damit ein Problem ?
-
Weil er wahrscheinlich nicht gerade sehr ISO-C++-konform zu sein scheint. Verrate uns doch mal deinen Compiler und Versionsnummer...
-
Borland Builder 6 (Build 10.166)
-
sehr nett leute, danke