überlegungsfehler // vektor string manipulieren // oder doch schon beim einlesen code verfeinern?



  • Hallo Hyde++, sieht man irgendwo in meinem Post," löst die Aufgabe für mich". Ich wollte eine ernsthafte Diskussion eröffnen um einerseits mehr Erfahrung zu sammeln in Umgang mit C++, anderseits um "nette" Bekanntschaften zu machen. Da Sie aber eher zu den Leuten gehören die eine negative Aura verbreiten, weigere ich mich, mit Ihnen zu kommunizieren.

    Es ist offensichtlich dass Sie mehr Erfahrung in C++ haben aber ein bisschen mehr Sozialkompetenz würde Ihnen auch nicht schaden, gerade für Neulinge hat das eher eine abschreckende Wirkung.

    Trotzdem danke für Ihre Bemühungen.



  • omg ... drama queen? rtfm. 🙄

    egal. Geschmacksmuster:

    #include <cstdlib>
    #include <cctype>
    #include <limits>
    #include <vector>
    #include <string>
    #include <fstream>
    #include <iostream>
    #include <iomanip>
    
    struct mac_t
    {
    	static const char octet_group_delim = '-';
    	static const char octet_delim = ':';
    
    	char unsigned octets[ 6 ];
    };
    
    std::istream & operator>>( std::istream & is, mac_t & mac )
    {
    	mac_t tmp;
    
    	for( unsigned i = 0; i < 3; ++i ) {
    
    		unsigned octet_group;
    		char delim = 0;
    
    		if( !( is >> std::hex >> std::skipws >> octet_group >> std::noskipws >> delim ) ||
    		    delim && !( delim == mac_t::octet_group_delim || std::isspace( delim ) ) )
    		{
    			is.setstate( std::ios::failbit );
    			return is;
    		}
    
    		tmp.octets[ i * 2     ] = octet_group >> 8;
    		tmp.octets[ i * 2 + 1 ] = octet_group  & 0xff;
    	}
    
    	mac = tmp;
    	return is;
    }
    
    std::ostream & operator<<( std::ostream & os, mac_t const & mac )
    {
    	for( unsigned i = 0; i < 5; ++i )
    		os << std::hex << std::setw( 2 ) << std::setfill( '0' )
    		   << static_cast< unsigned >( mac.octets[ i ] )
    		   << mac_t::octet_delim;
    
    	return os << std::hex << std::setw( 2 ) << std::setfill( '0' )
    	          << static_cast< unsigned >( mac.octets[ 5 ] );
    }
    
    std::istream & ignore_line( std::istream &is )
    {
    	is.ignore( std::numeric_limits< std::streamsize >::max(), '\n' );
    	return is;
    }
    
    int main()
    {
    	char const * input_file_name = "test.txt";
    	std::ifstream input_stream( input_file_name );
    
    	if( !input_stream ) {
    		std::cerr << "Error: Failed to open \"" << input_file_name << "\" for reading.\n\n";
    		return EXIT_FAILURE;
    	}
    
    	int dummy;
    	mac_t mac;	
    	std::vector< mac_t > mac_addresses;
    
    	while( input_stream >> dummy >> mac >> ignore_line )
    		mac_addresses.push_back( mac );
    
    	std::cout << "Read " << mac_addresses.size() << " MAC addresses until "
    	          << ( input_stream.eof() ? "EOF" : "error" ) << ":\n";
    
    	input_stream.close();
    
    	for( auto const & i : mac_addresses )
    		std::cout << i << '\n';
    }
    


  • Danke Swordfish,

    Ich recherchiere die für mich unbekannten Codeteile, damit ich Zusammenhänge besser verstehen kann.

    PS: danke für den Link, musste schmunzeln 🙄



  • Zugegeben, mein Post war eventuell etwas flapsig formuliert. Trotzdem enthält er für dich (in Foren duzt man sich üblicherweise) einige wichtige Informationen:

    Wenn man eine Frage hat, sollte man sich die Mühe machen, diese möglichst genau zu stellen. Je allgemeiner, desto schlechter. Das Problem bei deinem Post war, dass es schwierig war, zu verstehen, was du eigentlich meinst. Am Ende stehen ein paar nützliche Informationen, jemand, der dir helfen möchte, muss diese aber umständlich extrahieren. Korrekt wäre gewesen, zu schreiben: "Hey Leute, ich möchte aus einer Datei, die folgendes Format hat, nur die MAC-Adresse auslesen. Diese möchte ich anschließend gerne umformatieren und in eine weitere, neue Datei schreiben. Hier seht ihr einen Ausschnitt aus der Quelldatei."
    Kurz und verständlich. So sollte es sein.

    Im Internet neigen viele Leute dazu, zu denken, es sei egal, korrekte Sprache, Satzzeichen oder Grammatik zu verwenden. Das ist nicht so. Es ist mühsam, raten zu müssen, was das Gegenüber wohl gemeint hat. Gerade beim Programmieren kommt es auf Syntax genau an, da kann man auch erwarten, vernünftiges Deutsch vorgesetzt zu bekommen. Du erscheints mir auch nicht wie jemand, der nicht des Deutschen mächtig ist.

    Codebeispiele: auch wenn Swordfish das jetzt gemacht hat ( 👍 ): Ich ignoriere meistens Posts, die einen Link auf ihren Code enthalten ("sorry, ist ein großes Projekt, wollte hier nicht 1000 Zeilen posten"). Was man hier tun sollte, ist den Code auf das Nötigste zu reduzieren. Und zwar wirklich nur auf das Allernötigste! Bei vielen Fragen geht es dann wirklich nur um 10 - 50 Zeilen, die man schnell durchlesen kann. Das machen viele gerne. Bei dir müsste ich erst einen Link aufrufen, kapieren, worum es überhaupt geht, die entsprechende Problemstelle finden um dir eine Antwort zu geben. Dazu bin ich nicht bereit. Du willst ja etwas von uns.
    Zusätzlich konnte man deinen Link nicht einfach anklicken. Das ist natürlich eine Kleinigkeit, aber für jemanden, der sich nicht die Mühe macht, seinen Post zu überarbeiten, mache ich mir doch nicht die Mühe, seinen Code zu lesen.

    Der Ton mag für Neulinge manchmal etwas hart sein, ich kann dir aber versichern, dass mein Post noch ziemlich harmlos ist. Keine Sorge, ich verbreite weder eine negative Aura, noch muss ich an meinen Sozialkompetenzen arbeiten. Mir ist auch völlig egal, was du über mich denkst. Ich mache mir nicht die Mühe, diesen Post zu schreiben, um dir irgendwie eins reinzuwürgen oder mit dir eine dämliche Diskussion zu beginnen. Ich möchte auch gar nicht, dass du hierrauf antwortest. Ich hoffe nur aufrichtig, dass ich dich dazu bringen kann, in Zukunft deine Frage einfach und verständlich zu stellen. Ich garantiere dir, dass wir dann bestens miteinander auskämen.
    Ich habe hier auch schon mal was auf den Deckel bekommen, ich denke, das hat ganz gut getan. 😉

    Der Link, den Swordfish gepostet hat, ist nicht nur zum Schmunzeln, da steht einiges wertvolles drin, das einem nicht nur in Programmierform hilft. Das Dokument sollte man definitiv gelesen haben.

    Damit du meine Punkte gut nachvollziehen kannst: hier ein Vorschlag, wie du deinen ursprünglichen Post hättest schreiben können. Vielleicht zeigt dir das ja auch, dass ich dich nicht nur belehren möchte.

    Hallo Leute,

    ich bin neu in C++ und versuche mir einige Aufgaben auf der Arbeit zu vereinfachen.

    Momentan habe ich folgendes Problem: Ich habe eine Textdatei, in der einige Informationen zu einem Netzwerkknoten stehen. Die Datei ist wie folgt aufgebaut:

    5 5823-8CCC-C561 172.18.112.13 0/1/0/U1 wol-pt 4 3 D3.0 2.3
    

    Die erste Zahl steht hierbei für die ID des Knotens, anschließend folgt die MAC-Adresse in eigenartiger Formatierung. Nach dem nächsten Leerzeichen steht die IP-Adresse, danach ...

    Ich möchte gerne die MAC-Adresse auslesen, in das Standardformat (hier also 58:23:8C:CC:C5:61) bringen und in eine neue Datei schreiben.

    Mein momentaner Ansatz sieht so aus:

    ifstream infile ("node2.txt");
    ofstream outfile ("node2_mac.txt");
    
    while(infile)
    {
        string line;
        infile.getline(line);
        
        string mac = parse_mac(line);
        string mac_reformatted = reformat_mac(mac);
        outfile << mac_reformatted << endl;
    }
    infile.close();
    outfile.close();
    

    Ich muss noch parse_mac und reformat_mac schreiben, ich habe so angefangen, aber hier ist mir nicht ganz klar, wie ich ...



  • Hyde++ schrieb:

    Als erstes kam mir ein Gedanke wieso kein Programm was mir bei der Arbeit im Büro etwas Arbeit abnehmen kann

    Das kein korrekter Satz.

    Du machst SO einen Aufstand wegen fehlendem :"..."?


  • Mod

    otze schrieb:

    Hyde++ schrieb:

    Als erstes kam mir ein Gedanke wieso kein Programm was mir bei der Arbeit im Büro etwas Arbeit abnehmen kann

    Das kein korrekter Satz.

    Du machst SO einen Aufstand wegen fehlendem :"..."?

    Das ist schon ein Fall, in dem man aufgrund der fehlenden Zeichensetzung den Satz mindestens 2x lesen muss. Und dann geht's im Rest des Texts so weiter. Das sollte nicht sein.



  • Sollte kein Aufstand sein. Ich verstehe den Satz ehrlich nicht.
    "Als erstes kam mir der Gedanke, wieso kein Programm, was mir bei der Arbeit im Büro etwas Arbeit abnehmen kann, (hier wort einsetzen)".
    Nutzbar ist? Existiert?
    Ich weiß ehrlich nicht, was gemeint ist.

    EDIT: Ah, jetzt sehe ich, was gemeint ist. Ich dachte, das "was" bezieht sich auf das Programm:
    "Als erstes kam mir der Gedanke, wieso kein Programm, welches ..."

    Naja, soll er/sie halt wenigstens "kein program mir etwas Arbeit im Büro abnehmen kann" schreiben.

    EDIT 2: Ne, doch nicht. "Etwas" taucht ja schon auf. Ich kapiers nicht.



  • Da kam mir der Gedanke: Wieso kein Programm, was mir bei der Arbeit im Büro etwas Arbeit abnehmen kann?



  • Ahja, vielen Dank. Man sieht: Satzzeichen bewirken Wunder. 🙂



  • Ich kanns Hide nicht verübeln. Ich musst den Post auch dreimal lesen, bis ich genug hineininterpretiert hatte, um mir ziemlich sicher zu sein, was breakiboy meinte. Und das muss halt einfach nicht sein.


Anmelden zum Antworten