Split aus: csv Datei nach bestimmten Begriff durchsuchen... (C++ : C++/CLI Verwirrung)



  • HI!
    Ja es hat mir recht gut geholfen, aber in etwa hab ich dieses Problem wie dieser saywer wo und wie ich das kopieren soll etc... wäre lieb wenn ihr mir nochmal etwas auf die Sprünge helfen könntet!



  • LiinaLii schrieb:

    HI!
    Ja es hat mir recht gut geholfen, aber in etwa hab ich dieses Problem wie dieser saywer wo und wie ich das kopieren soll etc... wäre lieb wenn ihr mir nochmal etwas auf die Sprünge helfen könntet!

    Jetzt musst mir nommal sagen was das Problem genau ist. ALso wie sieht deine Datei aus kopier mal was hier rein. Und was soll das Programm dann ausgeben. Mach mal paar Beispiele.



  • Hey!
    wie schon erwähnt will ich eine Bibliothek erstellen, wo ich zb auf ein Button mit Suche klicke und dann dort nach einem Buch suchen kann... dabei soll dann das gesuchte Buch gefunden werden, sollte es in meiner Liste vorhanden sein..
    Dann habe ich einen Button bzw ne Möglichkeit wo ich nach Kategorien explizier suchen kann.. zb direkt nach einem Autor oder nach dem Genre oder dem titel halt..

    Ich habe hier gute Tipps bekommen.. nur weiß ich nicht, ob ich ne extra Datei dafür erstellen soll oder wie oder was ich dafür anlegen sollte!
    Ich dachte mir ich speicher einige gewünschte Titel und Autoren extra in einer .csv Datei ab und könnte dann darauf zugreifen bzw von da aus findet das Programm das gewünschte Buch.. doch wie setze ich das ganau um?

    private: System::Void linkLabel1_LinkClicked(System::Object^  sender, System::Windows::Forms::LinkLabelLinkClickedEventArgs^  e) {
    			 ErweiterteSuche^ fm = gcnew ErweiterteSuche;
    fm->Show();
    		 }
    private: System::Void Suchbereich_Load(System::Object^  sender, System::EventArgs^  e) {
    
    		 }
    private: System::Void textBox1_TextChanged(System::Object^  sender, System::EventArgs^  e) {
    						 }
    };
    }
    

    Das ist jetzt die Gui von dem Suchbereich wo ich was reinschreiben will, damit das Programm nach einem bestimmten Titel suchen kann!

    danke!



  • Ah jetzt kommt Lich in die Sache. Du machst gar kein C++, sondern CLI, ist dir das noch nicht aufgefallen. 😃 Wenn du CLI machen willst muss dich ein Mod verschieben. Zur Eränzung: C++ hat keine GUI. Wenn du C++ machen willst und eine GUI haben willst, musst du auf externe Toolkits zurückgreifen, z.B. SFGUI, gtkmm oder fltk.



  • Doch ich mache c++ 😃
    Und benutze dabei Microsoft Visual C++ 2010 Express mit Wondows Form,
    Und baue meine Bibliothek mit der Toolbox..
    könnt ihr trotzdem mir bei meinem Problem helfen?



  • LiinaLii schrieb:

    Doch ich mache c++ 😃
    Und benutze dabei Microsoft Visual C++ 2010 Express mit Wondows Form,
    Und baue meine Bibliothek mit der Toolbox..
    könnt ihr trotzdem mir bei meinem Problem helfen?

    Das ist kein Standard C++, sondern C++/CLI, was im uebrigen mit 'echtem' C++ wenig zu tun hat.



  • kann mir dann jmd dennoch dabei helfen?^^



  • Also ersteinmal: C++ / CLI / Was auch immer nicht C# ist + Winforms --> Große Katastrophe.

    [EDIT : 05.08.2013 12:48] Dazu noch: http://www.c-plusplus.net/forum/263084

    Naja.. Nun zu deinem Problem. Da ich mich rechtzeitigig habe bekehren lassen (was nicht heißen soll, dass C++ schlecht ist, aber CLI und die Kombination mit WinForms) 😉 habe ich den Code jetzt primär natürlich nur in C# parat, werde mich aber in einer C++/CLI Übersetzung versuchen.

    Bei der CSV datei würde ich jetzt einfach die Zeilen durchgehen und die entsprechenden Werte ausalesen. 1)

    List<string> GetBooksByCategory (string filename, int column, string key)
    {
        List<string> books = new List<string>();
        foreach (string line in System.IO.File.ReadAllLines(filename))
        {
            if (line.Split(';')[column].ToLower() == key.ToLower())
                books.Add(line.Split(';')[0]);
        }
        return books;
    }
    

    Mit der Methode (ungetestet) kannst du, wenn in der ersten Spalte die Titel stehen alle Bücher mit einer Kathegorie in einer Spalte finden. Wenn z.B. in der zweiten Spalte das Genre steht und du brauchst alle Thriller verwendest du: 2)

    List<string> thriller = GetBooksByCategory("books.csv", 1, "thriller"); // Groß- / Kleinschreibung wird nicht beachtet
    

    Brauchst du nun auch noch alle Bücher eines Autors, der in der dritten Spalte steht, das ganze in grün: 3)

    List<string> booksByErichKaestner = GetBooksByCategory("books.csv", 2, "Erich Kästner");
    

    Wenn du nur zwei Spalten hast, kannst du das ganze auch einfach in ein Dictionary laden: 4)

    Dictionary<string, string> GetBooksAndAuthors(string filename)
    {
        Dictionary<string, string> books = new Dictionary<string, string>();
        foreach (string line in System.IO.File.ReadAllLines(filename))
        {
            books.Add(line.Split(';')[0], line.Split(';')[0]);
        }
        return books;
    }
    

    An den Autor von HerrDerRinge kommst du also mit: 5)

    Dictionary<string, string> booksAndAuthors = GetBooksAndAuthors("books.csv");
    string authorLOTR = booksAndAuthors["Der Herr der Ringe"];
    

    Das klappt selbstverständlich nur, wenn in der ersten Spalte der Titel und in der zweiten der Autor steht.

    Die C++ Übersetzung schreib ich in einen neuen Post, weil sich das ganze sonst so staut. 🙂



    List<String^>^ GetBooksByCategory (String^ filename, int column, String^ key)
    {
        List<String^>^ books = new List<String^>();
        foreach (String^ line in System::IO::File::ReadAllLines(filename))
        {
            if (line->Split(';')[column]->ToLower() == key->ToLower())
                books->Add(line->Split(';')[0]);
        }
        return books;
    }
    
    List<String^>^ thriller = GetBooksByCategory("books.csv", 1, "thriller"); // Groß- / Kleinschreibung wird nicht beachtet
    
    List<String^>^ booksByErichKaestner = GetBooksByCategory("books.csv", 2, "Erich Kästner");
    
    Dictionary<String^, String^>^ GetBooksAndAuthors(String^ filename)
    {
        Dictionary<String^, String^> books^ = new Dictionary<String^, String^>();
        foreach (String^ line in System::IO::File::ReadAllLines(filename))
        {
            books->Add(line->Split(';')[0], line->Split(';')[0]);
        }
        return books;
    }
    
    Dictionary<String^, String^>^ booksAndAuthors = GetBooksAndAuthors("books.csv");
    String^ authorLOTR = booksAndAuthors["Der Herr der Ringe"];
    


  • Hey, danke! sieht gar nicht so schlecht aus!

    habe aber noch ne Frage.. habe gehört, dass sowas was ich machen will, auch mit einem csv reader geht!
    weiß jmd da was genaueres wo man es einbindet und wie nutzen kann etc?!
    🙂


Anmelden zum Antworten