Kommt nur murks raus



  • Bei dir ist keine e-mail eingetragen und kp hab geantwortet musst du schauen ob da was zurück gekommen ist! xD



  • Ja, ist angekommen.



  • Eine Frage.
    Kann man Text aus einer Datei direkt in einen Vektor speichern?
    Wenn ja wie geht das?
    Wenn nein Tipps um den Umgang mit Vektoren zu lernen?

    LG Enno



  • Enno schrieb:

    Eine Frage.
    Kann man Text aus einer Datei direkt in einen Vektor speichern?
    Wenn ja wie geht das?
    Wenn nein Tipps um den Umgang mit Vektoren zu lernen?

    Wieso willst du Text in einem Vektor speichern? Kennst du string?



  • Oh ja das kenne ich !
    Allerdings will ich einzelne Zahlen aus dem Text heraus suchen und dann Anzeigen lassen. Dachte das ich das dann per iterator machen kann.
    Steck da noch nicht ganz drin bin auch noch am lesen. 🙂 Als falls du ein Tipp hast zum lesen?^^

    Wenns interessiert der Text aus der Datei:

    Inter-|   Receive                                                |  Transmit
     face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
        lo:  870793    2905    0    0    0     0          0         0   870793    2905    0    0    0     0       0          0
     wlan0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
      eth0: 35622381   67351    0    0    0     0          0      2081  9387280   58744    0    0    0     0       0          0
    

    EDIT: Ehm ja ist ja nicht nur Text sind auch Zahlen drin. Doof von mir oben falsch gesagt. SRY



  • Enno schrieb:

    Oh ja das kenne ich !
    Allerdings will ich einzelne Zahlen aus dem Text heraus suchen und dann Anzeigen lassen. Dachte das ich das dann per iterator machen kann.
    Steck da noch nicht ganz drin bin auch noch am lesen. 🙂 Als falls du ein Tipp hast zum lesen?^^

    Wenns interessiert der Text aus der Datei:

    Inter-|   Receive                                                |  Transmit
     face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
        lo:  870793    2905    0    0    0     0          0         0   870793    2905    0    0    0     0       0          0
     wlan0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
      eth0: 35622381   67351    0    0    0     0          0      2081  9387280   58744    0    0    0     0       0          0
    

    EDIT: Ehm ja ist ja nicht nur Text sind auch Zahlen drin. Doof von mir oben falsch gesagt. SRY

    So speicherst du den ges. Inhalt der Datei in dem String str:

    ifstream file( "..." );
    
        file.seekg (0, ios::end); // Zeiger auf das Ende der Textdatei setzen, um die Größe ermitteln zu können.
        const unsigned size = file.tellg(); // Größe der Textdatei ermitteln.
        file.seekg (0, ios::beg); // Größe wurde ermittelt, nun den Zeiger wieder auf den Anfang der Textdatei setzen.
    
        string str;
        str.resize(size); // Speicher für insg. 'size' Zeichen reservieren.
        file.read(&str[0], size); // Inhalt der Textdatei im String abspeichern.
    

    Zur Suche nimmst du dann std::string::find .

    Hmm, wenn Wenn da mal Zahlen mal Text mal sonstwas vorkommt, muss man das eh Ganz anders machen, kommt drauf an was dich wirklich aus der Datei interessiert und wo und vor allem wie die Daten abgelegt werden sollen. Also du musst sagen, was du genau haben willst, welchen Datentyp das entsprechende Zeug haben soll, in welcher Form du dann im Endefekkt darauf zugreifen willst. Mir sagt das ganze Zeug z.B. gar nichts...



  • Also das Zeug kommt aus dem /proc/net/dev ordner und davon sollen nun die einzelnen werte Ausgegeben werden!

    D.h. z.B. eth0 bytes: 35622381
    Wenns nun aber nur die ersten Zahlen wären wäre das ja einfach. 🙂 Allerdings soll ich jede Zahl in der reihe einzelnt Ausgeben. D.h. so:
    eth0
    bytes: 35622381
    packets: 67351
    errs: 0
    drop: 0
    fifo: 0
    .
    .
    .
    Das ganze für alle drei lo, wlan und eth0.
    Im Prinzip gebe ich ja nur int werte aus. Ich weiß zwar noch nicht genau wie das geht. Habe aber zu dem Thema gelesen das man das ganz in einen Vektor speichert und dann mit iteratoren irgendwie auf die einzelnen Zeilen stellen zugreifen kann.
    Falls jemand dazu eine gute Seite hat zum lesen würde mich freuen oder aus such Tipps für google würden mir sehr helfen.

    Inter-|   Receive                                                |  Transmit
     face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
        lo:  870793    2905    0    0    0     0          0         0   870793    2905    0    0    0     0       0          0
     wlan0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
      [b]eth0: 35622381[/b]   67351    0    0    0     0          0      2081  9387280   58744    0    0    0     0       0          0
    


  • Siehe mein Beispiel, und ersetze std::string durch std::vector<char>. Fertig.



  • EDIT Fehler gefunden



  • Suchst du sowas?

    #include <iostream>
    #include <fstream>
    #include <iterator>
    #include <string>
    #include <vector>
    using namespace std;
    
    struct face
    {
    	string name;
    
    	unsigned bytes_received;
    	unsigned packets_received;
    	unsigned errs_received;
    	unsigned drop_received;
    	unsigned fifo_received;
    	unsigned frame_received;
    	unsigned compressed_received;
    	unsigned multicast_received;
    
    	unsigned bytes_transmitted;
    	unsigned packets_transmitted;
    	unsigned errs_transmitted;
    	unsigned drop_transmitted;
    	unsigned fifo_transmitted;
    	unsigned colls_transmitted;
    	unsigned carrier_transmitted;
    	unsigned compressed_transmitted;
    };
    
    istream& skip_line(istream& in)
    {
    	return in.ignore(numeric_limits<streamsize>::max(),'\n');
    }
    
    istream& operator>>(istream& in, face& f)
    {
    	return in
    		>> f.name
    		>> f.bytes_received >> f.packets_received >> f.errs_received >> f.drop_received >> f.fifo_received >> f.frame_received >> f.compressed_received >> f. multicast_received
    		>> f.bytes_transmitted >> f.packets_transmitted >> f.errs_transmitted >> f.drop_transmitted >> f.fifo_transmitted >> f.colls_transmitted >> f.carrier_transmitted >> f.compressed_transmitted;
    }
    
    ostream& operator<<(ostream& out, const face& f)
    {
    	return out
    		<< f.name << "|"
    		<< f.bytes_received    << "|" << f.packets_received    << "|" << f.errs_received       << "|" << f.drop_received       << "|"
    		<< f.fifo_received     << "|" << f.frame_received      << "|" << f.compressed_received << "|" << f. multicast_received << "|"
    		<< f.bytes_transmitted << "|" << f.packets_transmitted << "|" << f.errs_transmitted    << "|" << f.drop_transmitted    << "|"
    		<< f.fifo_transmitted  << "|" << f.colls_transmitted   << "|" << f.carrier_transmitted << "|" << f.compressed_transmitted;
    }
    
    void read_dev(vector<face>& dev)
    {
    	ifstream file("test.txt");
    	file >> skip_line; // Überspringe erste Zeile.
    	file >> skip_line; // Überspringe zweite Zeile.
    	for(face f; file>>f; dev.push_back(f));
    }
    
    void table(vector<face>& dev)
    {
    	for(vector<face>::iterator it=dev.begin(); it!=dev.end(); ++it)
    		cout << '\n' << *it;
    }
    
    int main()
    {
    	vector<face> dev;
    	read_dev(dev);
    	table(dev);
    }
    


  • wow das sieht gut aus 😃

    Ich arbeite das mal durch damit ich weiß was abgeht! Meld mich dann morgen wenn irgendwas ist!

    LG Enno



  • out schrieb:

    istream& skip_line(istream& in)
    {
    	return in.ignore(numeric_limits<streamsize>::max(),'\n');
    }
    

    Frage ist was macht diese Funktion? und woher kommt das numeric_limits<streamsize>::max()?

    LG Enno



  • Enno schrieb:

    out schrieb:

    istream& skip_line(istream& in)
    {
    	return in.ignore(numeric_limits<streamsize>::max(),'\n');
    }
    

    Frage ist was macht diese Funktion? und woher kommt das numeric_limits<streamsize>::max()?

    Diese Funktion verwirft alle Zeichen bis zum nächsten Zeilenumbruch. Aso ja, du musst noch #include <limits> oben hinschreiben.



  • Ah! Jo mit dem include geht es dann, vielen dank!

    Hab trotzdem noch eine Frage. 🙄 Kann ich mir mit einer getBla Funktion nun auch die einzelnen Sachen holen? Also meinte wegen die packets_received?

    LG Enno



  • Enno schrieb:

    Ah! Jo mit dem include geht es dann, vielen dank!

    Hab trotzdem noch eine Frage. 🙄 Kann ich mir mit einer getBla Funktion nun auch die einzelnen Sachen holen? Also meinte wegen die packets_received

    Klar, du musst einfach nur dev[0].packets_received; schreiben.



  • Mhm... Was mach ich Falsch?

    unsigned getPackets(vector<face>& dev){
      return dev[0].packets_received;  
    }
    
    int main(){ 
      vector<face> dev; 
      read_dev(dev); 
      table(dev); 
      getPackets(dev);
    }
    

    LG Enno

    EDIT: ... ich dummerle 😃

    cout
    

    vllcht^^



  • mein Gott ...



  • Belli schrieb:

    mein Gott ...

    🙄 Noch so früh



  • Ich nehme mal an, du willst alle packets_received:

    #include <utility>
    
    vector<pair<string,unsigned>> packets_received_all(const vector<face>& dev)
    {
    	vector<pair<string,unsigned>> packets_received;
    	for(vector<face>::const_iterator it=dev.begin(); it!=dev.end(); ++it)
    		packets_received.push_back( make_pair(it->name,it->packets_received) );
    	return packets_received;
    
    }
    
    int main()
    {
        vector<face> dev;
        read_dev(dev);
        table(dev);
    	vector<pair<string,unsigned>> packets_received = packets_received_all(dev);
    
    	cout << endl << packets_received[0].first << ' ' << packets_received[0].second;
    	cout << endl << packets_received[2].first << ' ' << packets_received[2].second;
    }
    


  • out schrieb:

    Ich nehme mal an, du willst alle packets_received:

    #include <utility>
    
    vector<pair<string,unsigned>> packets_received_all(const vector<face>& dev)
    {
    	vector<pair<string,unsigned>> packets_received;
    	for(vector<face>::const_iterator it=dev.begin(); it!=dev.end(); ++it)
    		packets_received.push_back( make_pair(it->name,it->packets_received) );
    	return packets_received;
    
    }
    
    int main()
    {
        vector<face> dev;
        read_dev(dev);
        table(dev);
    	vector<pair<string,unsigned>> packets_received = packets_received_all(dev);
    
    	cout << endl << packets_received[0].first << ' ' << packets_received[0].second;
    	cout << endl << packets_received[2].first << ' ' << packets_received[2].second;
    }
    

    Mhm das wäre auch eine Überlegung.
    Mir reicht aber die einfach getPackets erstmal. 🙂

    Ich kann den ganzen Kram doch jetzt auch noch als Klasse machen oder? Frage ist wo dann skip_line und die beiden Operatoren Teile hinkommen in die .h??


Anmelden zum Antworten