einzelne zeilen per ifstream



  • wie kann ich damit einzelne zeilen einer datei einlesen?



  • Hallo,

    ifstream ist von istream abgeleitet 😉



  • aha
    aber wie kann ich damit einzelne zeilen einlesen
    😕



  • Hallo,

    wie machst du es denn mit dem cin-Objekt ?



  • cin>>variable;
    achne... cin.getline(varibale, laenge)

    asooo

    ifstream in;
    in.getline;

    ??
    ich versuchs mal



  • bugs....

    in.getline(intName, sizeof(intName));
    in.getline(intNumber, sizeof(intNumber));

    gibt mir den fehler:

    --------------------Konfiguration: meinbuch - Win32 Debug--------------------
    Kompilierung läuft...
    main.cpp
    D:\Programme\C++ files\MSDev98\MyProjects\meinbuch\main.cpp(99) : error C2664: 'class std::basic_istream<char,struct std::char_traits<char> > &__thiscall std::basic_istream<char,struct std::char_traits<char> >::getline(char *,int)' : Konvertierung d
    es Parameters 1 von 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' in 'char *' nicht moeglich
            Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
    D:\Programme\C++ files\MSDev98\MyProjects\meinbuch\main.cpp(100) : error C2664: 'class std::basic_istream<char,struct std::char_traits<char> > &__thiscall std::basic_istream<char,struct std::char_traits<char> >::getline(char *,int)' : Konvertierung 
    des Parameters 1 von 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' in 'char *' nicht moeglich
            Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
    Fehler beim Ausführen von cl.exe.
    
    meinbuch.exe - 2 Fehler, 0 Warnung(en)
    


  • Hallo,

    also wenn das int vor dem Variablen Namen das bedeutet, was ich vermute, kann es auch nicht gehen. Es muss schon ein char* sein:
    http://www.cppreference.com/cppio_details.html#getline



  • int steht da nicht für int 😉 die vars sind strings...aber was ist denn char* ?
    wieso sternchen?
    ich hab aus den strings jetzt char* s gemacht...das programm startet, und ich will was aus der datei lesen per
    cin.getline(intName, sizeof(intName));
    krieg aber ne fehlermeldung irgendwas von wegen konnte nciht auf den speicher ausgeführt werden



  • Ich machs immer so:

    ifstream in("datei.txt");
    string zeile;

    getline(in, zeile);



  • Hallo,

    krieg aber ne fehlermeldung irgendwas von wegen konnte nciht auf den speicher ausgeführt werden

    Ja, weil du keinen Speicher reserviert hast. Also ich würds so machen:

    #include <iostream>
    using namespace std;
    
    const int MAX = 256;
    
    int main()
    {
            char blah[MAX]; // Das ist nen Array....
            cin.getline(c, MAX);
    
    }
    

    p.s.: Oder so wie Laalalaaa...dann kannste direkt nen String benutzen und musst dich nicht mit Zeiger rumplagen



  • CarstenJ schrieb:

    Hallo,

    krieg aber ne fehlermeldung irgendwas von wegen konnte nciht auf den speicher ausgeführt werden

    Ja, weil du keinen Speicher reserviert hast. Also ich würds so machen:

    #include <iostream>
    using namespace std;
    
    const int MAX = 256;
    
    int main()
    {
            char blah[MAX]; // Das ist nen Array....
            cin.getline(c, MAX);
    
    }
    

    p.s.: Oder so wie Laalalaaa...dann kannste direkt nen String benutzen und musst dich nicht mit Zeiger rumplagen

    wofür steht denn das c?



  • für blah 😃

    mfg, KdeE



  • Ups, sorry, da stand vorher was anderes. Ersetze c durch blah 🙂



  • hmm habs jetzt anders gelöst weil mein code durch die zeiger total verwurschtelt is ^^

    if(point == 1)
    	{
    		ofstream out(filename.c_str());
    		for(f=0; f<data.anzahl();++f)
    		{
    			out<<data.showName(f)<<endl;
    			out<<data.showNummer(f)<<endl;
    		}
    		cout<<"Daten in "<<filename<<" gespeichtert"<<endl;
    	}
    	if(point == 2) 
    	{
    		ifstream in(filename.c_str());
    		cout<<"Lade "<<filename<<endl;
    		getline(in, intName);
    		getline(in, intNumber);
    		data.neuerName(intName, intNumber);
    	}
    

    danke für die mühe 🙂
    neiiiiin jetzt liest der ja nur die ersten 2 zeilen ein 😃 wie mach ichs, dass er 2 zeilen weiterspringt bzw. immer die gelesenen zeilen löscht?



  • Du musst solange aus der Datei lesen, bis das Ende (EOF) erreicht ist. Da gab es schon des öfteren Fragen zu, benutze einfach mal die Suchfunktion. Nebenbei solltest du dir vielleicht mal ein Tutorial oder sowas angucken. Da kann immer ganz nützlich sein. 😉



  • hab ich schon...stand aber ne menge nicht drin 😞
    also wenn ich dass hier mache:

    if(point == 2) 
    	{
    		string intName;
    		string intNumber;
    		ifstream in(filename.c_str());
    		cout<<"Lade "<<filename<<endl;
    		while(!in.eof)
    		{
    			getline(in, intName);
    			getline(in, intNumber);
    			data.neuerName(intName, intNumber);
    		}
    	}
    

    dann krieg krieg ich:

    --------------------Konfiguration: meinbuch - Win32 Debug--------------------
    Kompilierung läuft...
    main.cpp
    D:\Programme\C++ files\MSDev98\MyProjects\meinbuch\main.cpp(103) : error C2276: '!' : Ungueltige Operation auf Ausdruck einer gebundenen Member-Funktion
    D:\Programme\C++ files\MSDev98\MyProjects\meinbuch\main.cpp(103) : fatal error C1903: Weiterverarbeitung nach vorhergehendem Fehler nicht moeglich; Kompilierung wird abgebrochen.
    Fehler beim Ausführen von cl.exe.
    
    meinbuch.exe - 2 Fehler, 0 Warnung(en)
    

    und mit:

    while(in.eof == false)
    		{
    			getline(in, intName);
    			getline(in, intNumber);
    			data.neuerName(intName, intNumber);
    		}
    

    wird nichts geladen 😞



  • Du solltest dir das mal genauer angucken:
    http://www.cppreference.com/cppio_details.html#eof

    Einige Problem lösen sich dann praktisch von selbst....



  • oh gott... sorry manchmal bin ich a bissl dusselig 😮 🙄
    die klammern vergessen...meine güte

    danke nochmal


Anmelden zum Antworten