Datei einlesen -> gehts auch einfacher?



  • Hallo ich wollte mal fragen, obs meine Möglichkeit eine Datei einzulesen auch in "einfach" gibt 😃
    Das Programm soll Daten aus folgender Struktur zuordnen:

    Name;PIN#Kontostand
    
    data_in.open("data.db");
    	if(!data_in.is_open()) {
    		std::cout << "Datei konnte nicht geoeffnet werden!";
    		std::cin.get();
    		exit(0);
    	}
    
    	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    	// =[Einlese-Schleife]=
    	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    	// 1. Information -> Name |#| 2. Information -> PIN |#| 3. Information -> Kontostand
    	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    	for(int i = 0; i < number_user; i++) {
    		while(data_in.get(read_letter)) {
    			if(read_letter == ';') {
    				while(data_in.get(read_letter)) {
    					if(read_letter == '#') {
    						while(data_in.get(read_letter)) {
    							if(read_letter == '\n') {
    								break;
    							}
    							money_buffer += read_letter;
    						}
    						break;
    					}
    					pin_buffer += read_letter;
    				}
    				break;
    			}
    			name_buffer += read_letter;
    		}
    		money_buffer_ld = convert_str< long double >(money_buffer);
    		user_names.push_back(name_buffer);
    		user_pins.push_back(pin_buffer);
    		user_money.push_back(money_buffer_ld);
    		name_buffer.clear();
    		pin_buffer.clear();
    		money_buffer.clear();
    	}
    
    	data_in.close();
    


  • Ja, das heißt std::getline .
    Und exit ist Mist, wenn man nicht aufräumt.



  • Mein Vorschlag

    Ginge natürlich noch besser mit Boost ;p



  • Feuerkelch schrieb:

    Hallo ich wollte mal fragen, obs meine Möglichkeit eine Datei einzulesen auch in "einfach" gibt 😃

    Ja es gibt eine Möglichkeit.
    Liegt folgende Datei vor:

    Feuerkelch;A1234#34.50
    Benno;5634B#-134.70
    Susi;CB6CB7#3338.20
    

    dann liefert dieser Code:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    
    struct UserInfo
    {
        std::string m_name;
        std::string m_pin;
        double m_kontostand;
        friend std::istream& operator>>( std::istream& in, UserInfo& ui );
    };
    std::istream& operator>>( std::istream& in, UserInfo& ui )
    {
        getline( in >> std::ws, ui.m_name, ';' );
        getline( in, ui.m_pin, '#' );
        in >> ui.m_kontostand;
        return in;
    }
    
    int main()
    {
        using namespace std;
        vector< UserInfo > user_infos;
        // ifstream data_in("data.db");
        ifstream data_in("datei.txt");
        if( !data_in.is_open() )
        {
            cerr << "Fehler beim Oeffnen der Datei" << endl;
            return -1;
        }
        for( UserInfo x; data_in >> x; )
            user_infos.push_back( x );
        cout << user_infos.size() << " Eintraege gelesen" << endl;
        if( data_in.eof() )
            cout << "Dateiende erreicht" << endl;
    
        cin.get();
        return 0;
    }
    

    diese Ausgabe

    3 Eintraege gelesen
    Dateiende erreicht
    

    :xmas2: Werner



  • Feuerkelch schrieb:

    money_buffer_ld = convert_str< long double >(money_buffer);
    

    Geld als double?!?


Anmelden zum Antworten