txt dateien durchsuchen,sortieren,filtern geht das auch ohne std::getline,std::set,std::vector????



  • drakon schrieb:

    Die Standardalgorithmen funktionieren auch auf Arrays..

    aber was heisst das genau was muss ich genau machen damit das funktioniert???



  • sweetheart schrieb:

    aber was heisst das genau was muss ich genau machen damit das funktioniert???

    #include <algorithm>
    
    int main()
    {
        int nummern[] = {5,3,1,2,3};
        std::sort(nummern, nummern+5);
    }
    

    cu André



  • also mein problem ist jetzt das ich std::getline,std::set,std::vector nicht verstehe ok mit std::getline klappt so gerade noch aber ich komme mit std::set und std::vector gar nicht klar ich weis nicht wie ich die in mein programm einbauen soll und vorallem nicht welche variablen ich dort eintragen muss

    hier der code damit ihr mir helfen könnt:

    [code]# include <iostream>
    # include <stdio.h>
    # include <stdlib.h>
    # include <assert.h>
    # include <time.h>
    # include <stdio.h>
    # include <string>
    # include <algorithm>
    # include <fstream>
    # include <conio.h>
    #define LAENGE 100 //länger der einzelnen Zeilen
    #define ANZAHL 100 //Anzahl der Zeilen
    
    int main (void)
    {
    cout<<"\nWILLKOMMEN!!\n\nHier koennt Ihr Net Send Nachrichten verschicken!!!\n\nBitte Enter druecken!!\n\n\n";
    getchar();
      FILE *datei;
      char line[ANZAHL][LAENGE];
       int i ;
      datei = fopen ("abf_UserExport.txt", "r");
      if (datei != NULL)
        {
        for(i = 0; i < ANZAHL;i++) {
            //fseek(datei, i ,SEEK_SET);
            fgets(line[i],LAENGE,datei);  //zeilen weise lesen mit fgets...
            printf ("%i) %s\n",i ,line[i]);
        }
       fclose (datei);
      }
     getch();
    }[/code]
    

    dank euch im voraus

    _sweetheart_



  • also ich muss jetzt keine zahlen sortieren,sondern wörter nach dem alphabet

    und ich will in meiner ausgabe alle gruppen nur einmal ausgeben also wenn die txt datei jetzt so aussieht

    client0;client
    client1;client
    client2;client
    client3;client
    client4;client
    client5;client
    client6;client
    server0;server
    server1;server
    server2;server
    server3;server
    server4;server
    server5;server
    server6;server

    will ich das das programm mir das so ausgibt

    1. client
    2. server
    3. ...
    4. ...


  • sweetheart schrieb:

    also mein problem ist jetzt das ich std::getline,std::set,std::vector nicht verstehe ok mit std::getline klappt so gerade noch aber ich komme mit std::set und std::vector gar nicht klar ich weis nicht wie ich die in mein programm einbauen soll und vorallem nicht welche variablen ich dort eintragen muss

    Dann schau dir die Beispiele an und versuch es zu verstehen. Dann benutz mal google und such dir ein paar weitere Beispiele. std::vector ist eigentlich nichts anderes, als eine bessere Alternative zu den Arrays. Du kannst sie beliebig erweitern und der Zugriff ist genau gleich einfach, wie bei Arrays..



  • ich habe gegoogelt aber ich versteh es trotzdem nicht

    mit dem googeln da kam ich auch alleine drauf nur ich schnall nicht was die mir damit sagen wollen



  • drakon schrieb:

    Dann schau dir die Beispiele an...

    In seinen Fall sollte er sich erstmal C++ anschauen, den mit Ausnahme des cout habe ich gerade auf die schnelle nur C in seinen Code gesehen.



  • sweetheart schrieb:

    ich habe gegoogelt aber ich versteh es trotzdem nicht

    Lerne erst einmal die C++ Grundlagen, das was du da machts ist nahezu reines C, und hat mit C++ kaum etwas zu tun. Nimm dir z.B. "Thinking in C++" oder den C++ Primer vor, ersteres bekommt man auch legal kostenlos im Internet.

    cu André



  • sweetheart schrieb:

    ich habe gegoogelt aber ich versteh es trotzdem nicht

    mit dem googeln da kam ich auch alleine drauf nur ich schnall nicht was die mir damit sagen wollen

    Kann ich mir nicht vorstellen. Wenn Du gegoogelt hättest, wäre Dir aufgefallen, dass ein std::vector sich genauso benutzen lässt, wie ein C-Array.



  • sweetheart schrieb:

    jetzt habe ich mal eine wichtige frage kann man daten welche zeilenweise in arrays eingelesen wurden trotzdem suchen,sortieren,filtern und dann ausgeben ohne std::getline,std::set,std::vector????

    Hallo _sweetheart_,

    der Trick bei C++ besteht darin, dass Du gar nicht 'suchen,sortieren,filtern' brauchst. Wenn Du es ohne Hilfe des C++-Standard tun willst, so bist Du hier falsch. Gehen tut es sicher, aber mit wesentlich erhöhtem Aufwand.

    Wenn Deine Datei so aussieht wie angegeben und Du immer das Wort, welches unmittelbar hinter dem ';' steht, einlesen willst, so solltest Du das einfach tun wie schon im zweitem Listing dieses Beitrags beschrieben. Möchtest Du jede Gruppe nur genau einmal abspeichern, so bietet sich ein set<> an. Ein set<> ist ein Container, in dem jedes Element nur genau einmal drin vorkommt. Um ein Element hinzuzufügen, ruft man insert auf, ist das Element bereits im set<> enthalten, so wird kein weiteres hinzugefügt.

    Hier ist ein Entwurf, der in etwa genau das tut:

    #include <fstream>
    #include <iostream>
    #include <ostream>
    #include <string>
    #include <set>
    
    int main()
    {
        using namespace std;
        set< string > gruppen;  // eine Menge von Gruppen - Typ std::string
        // --   Einlesen
        ifstream datei( "abf_UserExport.txt" );  // (Text-)Datei zum Einlesen öffnen
        for( string gruppe; datei.ignore( 999, ';' ) >> gruppe; )  // ignoriere alles bis ';' und lese das Wort dahinter
            gruppen.insert( gruppe );  // Gruppe speichern, ist die Gruppe schon enthalten, so wird keine weitere hinzugefügt.
        // Die for-Schleife bricht ab, falls beim Lesen ein Fehler auftritt; also spätestens beim Dateiende.
    
        // --   Ausgeben
        int idx = 0;
        for( set< string >::iterator i = gruppen.begin(); i != gruppen.end(); ++i, ++idx )
            cout << idx << ".) " << *i << endl;
    
        return 0;
    }
    

    Die Ausgabe ist bei der von Dir angegebenen Datei:

    0.) client
    1.) server
    

    Wenn man erstmal ein wenig damit umgehen kann, so ist das sehr viel einfacher, als sich mit char[] und FILE herumzuschlagen.

    sweetheart schrieb:

    FILE *datei;
      char line[ANZAHL][LAENGE];
      datei = fopen ("abf_UserExport.txt", "r");
      if (datei != NULL)
        {
    

    Wenn Du so machen willst, so solltest Du im ANSI-C-Forum um Hilfe bitten. C++ ist das nicht.

    :xmas2: Werner


Anmelden zum Antworten