csv Datei nach bestimmten Begriff durchsuchen und Zeile in der der String vorkommt in Array speichern
-
Hallo LiinaLii,
LiinaLii schrieb:
Ich hab die csv Datei so angelegt
Author ;Title;Genre;Erscheinungsjahr;Zusammfassung;Bewertung Brian Keene ;Eine Versammlung von Kr„hen;Horror;2013;Brinkley Springs ist eine ruhige, kleine Stadt. Einige sagen, die Stadt liege im Sterben ...
Was ist mit der Bewertung? steht hinter der Zusammenfassung noch ein ';'? Steht die erste Zeile so wie oben mit in der Datei?
.. einige Details sind noch zu klären.
Ansonsten - aller guten Dinge sind drei. Anbei meine Version.In der Datei steht z.B.:
Brian Keene ;Eine Versammlung von Kraehen;Horror;2013;Brinkley Springs ist eine ruhige, kleine Stadt. Einige sagen, die Stadt liege im Sterben ...
Hans Wurst;Hans Wursts Buch;Drama;1987; Ein altes Buch
Max Mustermann;Max Mustermanns Buch;Krimi;2013; Ein neues Buch
Beautiful Code;Andy Oram;Sachbuch;2007;How do the experts solve difficult problems in software development?
Hans Wurst;Hans Wursts Buch;Drama;1987; Noch ein altes Buch
Max Mustermann;Max Mustermanns Buch;Krimi;2013; Noch ein neues Buch
Modern C++ Design;Andrei Alexandrescu;Sachbuch;2001;In Modern C++ Design, Andrei Alexandrescu opens new vistas for C++ programmers.Der Dialog könnte dann so aussehen:
7 Eintraege gelesen Suchtext (Ende mit q): Wurst Hans Wurst; Hans Wursts Buch; Drama; 1987; Ein altes Buch Hans Wurst; Hans Wursts Buch; Drama; 1987; Noch ein altes Buch - - - Suchtext (Ende mit q): Nix - - - Suchtext (Ende mit q): Code Beautiful Code; Andy Oram; Sachbuch; 2007; How do the experts solve difficult pr oblems in software development? - - - Suchtext (Ende mit q): Buch Hans Wurst; Hans Wursts Buch; Drama; 1987; Ein altes Buch Max Mustermann; Max Mustermanns Buch; Krimi; 2013; Ein neues Buch Hans Wurst; Hans Wursts Buch; Drama; 1987; Noch ein altes Buch Max Mustermann; Max Mustermanns Buch; Krimi; 2013; Noch ein neues Buch - - -
und hier ist das Programm dazu:
#include <algorithm> // copy_if #include <iostream> #include <fstream> #include <iterator> // i/ostream_iterator #include <string> #include <limits> // numeric_limits #include <vector> template< char C > std::istream& Char( std::istream& in ) { char c; if( in >> c && c != C ) in.setstate( std::ios_base::failbit ); return in; } class Buch { public: bool find( const std::string& suchtext ) const; friend std::istream& operator>>( std::istream& in, Buch& buch ); friend std::ostream& operator<<( std::ostream& out, const Buch& buch ); private: std::string autor; std::string titel; std::string genre; int erscheinungsjahr; std::string kurzbeschreibung; }; std::istream& operator>>( std::istream& in, Buch& b ) { // Format: Author ;Title;Genre;Erscheinungsjahr;Zusammfassung[ ??;Bewertung] getline( in >> std::ws, b.autor, ';' ); getline( in >> std::ws, b.titel, ';' ); getline( in >> std::ws, b.genre, ';' ); getline( in >> b.erscheinungsjahr >> Char<';'> >> std::ws, b.kurzbeschreibung ); return in; } std::ostream& operator<<( std::ostream& out, const Buch& b ) { return out << b.autor << "; " << b.titel << "; " << b.genre << "; " << b.erscheinungsjahr << "; " << b.kurzbeschreibung; } // -- liefert 'true', falls der Suchtext 'suchtext' in Autor, Titel oder Beschreibung vorkommt bool Buch::find( const std::string& suchtext ) const { return autor.find( suchtext ) != std::string::npos || titel.find( suchtext ) != std::string::npos || kurzbeschreibung.find( suchtext ) != std::string::npos; } int main() { using namespace std; vector< Buch > buecher; { // -- Einlesen ifstream datei("buecher.csv"); if( !datei.is_open() ) { cerr << "Fehler beim Oeffnen der Datei" << endl; return -2; } buecher.assign( istream_iterator< Buch >( datei ), istream_iterator< Buch >() ); if( !datei.eof() ) // Ok, wenn EOF erreicht cerr << "Lesefehler" << endl; } cout << buecher.size() << " Eintraege gelesen" << endl; for( string such; cout << "\nSuchtext (Ende mit q): ", cin >> such && such != "q"; cout << " - - -" << endl ) copy_if( begin(buecher), end(buecher), ostream_iterator< Buch >( cout, "\n" ), [&such]( const Buch& b ) { return b.find( such ); } ); return 0; }
LiinaLii schrieb:
Evtl. ist auch mein Ansatz mit der cvs Datei nicht der beste aber mir wird einfach nicht klar wie ich es besser machen könnte oder wie es einfacher bzw. besser wäre.
Doch - ein csv-Datei ist für so was gut geeignet. Und als Textdatei relativ einfach weiter zu verarbeiten.
Gruß
Werner
-
Eventuell ist aber ";" kein guter Separator, da du einen echten Fließtet drin hast und das Semicolon zwar ein seltenes, aber nicht völlig unwahrscheinliches Satzzeichen ist.
Nimm lieber |
-
Hallo!
Danke euch für die Ideen! Ich gucke mir das die Tage mal in Ruhe an und melde mich evtl. bei Nachfragen!
-
Hallo Leute ich bin gerade durch google auf diesen Thread gestoßen ich versuche gerade eine filmdatenbank aufzubauen und hab mir was in winforms gebastelt ich denke die Vorschläge hier wären genau das was ich brauche um das um zu setzen ich kapier nur nicht wie und wo ich das in meine forms einbauen muss ich benutze Visual Studio 2010 Express muss ich die Dateien als neue Dateien einbinden oder iwo rein kopieren oder wie kann ich die nutzen?
Lg saywer
-
Hi!
Ja das klingt interessant... sowas würde ich auch benötigen in etwa.. kann da jmd ein paar Tipps geben?!
danke!
-
LiinaLii schrieb:
Hi!
Ja das klingt interessant... sowas würde ich auch benötigen in etwa.. kann da jmd ein paar Tipps geben?!
danke!Ich dachte das Problem sei gelöst. Werner hat dir doch genug Tipps gegeben?
-
saywer, komm' bitte wieder wenn du die Zeichensetzung beherrschst. So sind deine Posts eine Zumutung.
kann da jmd ein paar Tipps geben?!
Wenn dein Problem jetzt ist, wie du eine GUI erstellst, dann eröffne einen neuen Thread in einem entsprechenden Board.
-
hmm.. okay wenn du meinst^^
-
kann man mir da trotzdem behilflich sein?!
wäre mega nett!!
-
LiinaLii schrieb:
kann man mir da trotzdem behilflich sein?!
wäre mega nett!!Ich habe mal die relevanten Beiträge in das passende Unterforum verschoben, nachdem sich herausstellte, dass du gar kein C++ machst. Hier geht es weiter:
http://www.c-plusplus.net/forum/319724
-
Dieser Beitrag wurde gelöscht!