Verbesserung gesucht bei File einlesen
-
Hallo
Ich wollt mal fragen obs ne bessere Art gibt, ein bestimmtes Wort in einem File zu finden als das:
std::istream& find_date_time( std::istream& in ) { std::string word = ""; while( in.good() ) { in >> word; if( 0 == word.compare( "Gesendet" ) ) { return in; } } in.ignore( 99999 ); return in; } int main() { ifstream report( "bericht" ); if( report.is_open() && lines.is_open() ) { std::string date, time; report >> find_date_time >> date >> time } report.close(); return 0; }Das File sieht so aus:
Betreff xxx greift yyy an Gesendet 02.07.07 17:12 Der Angreifer hat gewonnen Glück (aus Sicht des Angreifers) Pech Glück 19.3% Moral: 50%Optimierungsvorschläge wären supi

MfG
ein Anfänger
-
ein "die-staemme" bot? böse böse, du weisst doch, dass die verboten sind

-
otze schrieb:
ein "die-staemme" bot? böse böse, du weisst doch, dass die verboten sind

Was?

Es ist verboten Berichte automatisch zu reformatieren
-
Nein das ist doch kein Bot ^^
Nur ein BErichte Tool, damit ich den Überblick behalte wo ich wieviel abgefarmt habe und wann zuletzt. Mir schwirrt sonst der Kopf xD
-
OT: wie heisst ihr da und welche welt/server?
-
das gabs mal vor ner ganzen weile im Forum. steht meines wissens nach sogar in den regeln: die stämme darf nur im Browser gespielt werden.
@darth naja, man kann nie wissen, mit dem auslesen fängts immer an, deshalb direkt intervenieren

ps: spiel nimmer, war aber otze, damals auf server 1. Hoch leben die Kata kriege!
-
Sagen wir mal ihr wisst gar nicht worum es geht, dann ist da nichts illegales bei

Bin neu eingestiegen auf w13 und 14..aber s1 ist ja anders
Hab mal weiter gebastelt:
#include <iostream> #include <fstream> #include <string> typedef std::istream::traits_type traits_type; std::istream& find_date_time( std::istream& in ) { std::string word = ""; while( in.good() ) { in >> word; if( 0 == word.compare( "Gesendet" ) ) { return in; } } if( traits_type::eq_int_type( in.peek(), traits_type::eof() ) ) { std::cout << "eof"; } in.ignore( 99999 ); return in; } struct GetDateTime { std::string& m_date; std::string& m_time; GetDateTime( std::string& date, std::string& time ) : m_date( date ), m_time( time ) {} }; template<typename C, typename T> inline std::basic_istream<C, T>& operator>>( std::basic_istream<C, T>& in, GetDateTime date_time ) { in >> find_date_time >> date_time.m_date >> date_time.m_time; return in; } inline GetDateTime get_date_time( std::string& date, std::string& time ) { GetDateTime ret( date, time ); return ret; } using namespace std; int main() { ifstream report( "bericht" ); if( report.is_open() ) { std::string date, time; report >> get_date_time( date, time ); std::cout << "this here " << date << " d " << time << " t \n"; } report.close(); return 0; }habs in der <iomani> abgeschaut^^
kann ich das trotzdem anders lösen?und eine andere Frage, wie krieg ich die strings 07.07.07 und 23:42 in Zahlen raus?
-
Ohne jetzt auf den Sinn des Ganzen einzugehen:
- anstelle von compare() würde ich die normalen Vergleichsoperatoren für Strings verwenden (also
if(word=="Gesendet")... - die Überprüfung auf EOF kannst du dir dort ersparen
- der zweite Parameter für ignore() hat Defaultwert EOF - wenn du den Rest der Zeile lesen willst, mußt du dort explizit ein '\n' angeben
- da du vermutlich auch den Rest der Datei noch auswerten willst, solltest du nicht die Hälfte ignorieren, sondern jeweils den Zeilenanfang lesen und danach entscheiden, was mit den restlichen Daten passieren soll (notfalls per getline() einlesen und dann aufteilen
PS: Die Datums- und Zeitangaben kannst du per find() und substr() in die einzelnen Ziffernblöcke zerlegen und dann umwandeln (siehe FAQ).
- anstelle von compare() würde ich die normalen Vergleichsoperatoren für Strings verwenden (also
-
THX
