Zeilen aus Texdatei lesen.



  • Hallo zusammen,
    BITTE kann einer helfen ?
    Möchte aus einer Texdatei Zeilen auslesen, was teilweise auch geht,
    wenn ich 0-30 eingebe, werden die Zeilen auch von 0-30 gelesen. Wenn ich aber von Zeile 15-30 lesen will, werden immer die diverens Zeilen (15), also hier die Zeilen 0-15 gelesen. Was für einen Fehler mache ich und wie muss ich das ändern ?? Habe das auch schon über eine *while* schleife versucht. geht aber auch nicht.

    int main ()
    {
    ifstream f;
    string s;
    int i;

    f.open ("D:\\Neues_Textdokument.txt", ios::in );

    for (i = 18; i <= 30 ; i++) // ?? ?? ?? warum geht das nicht
    {
    getline(f, s);
    cout << s << endl;
    }
    f.close();

    return 0;
    }



  • Tja, du änderst nur die Anzahl der Schleifendurchläufe. Aber in der Schleife selbst machst du immer nur dasselbe.

    Sprich es ist egal, ob du deiner Schleife sagst, wenn sie 10mal laufen soll, dass diese 10mal hier bei 0, 15, oder 354354365 anfangen. 10 mal ist 10 mal. (oder halt n-mal)

    Was du machen müsstest, wäre die ersten m Zeilen zu "skippen" und deine gewünschten Zeilen einlesen.

    z.B. wäre das hier eine Lösung:

    std::vector<std::string> readLines(std::string const& filename, std::size_t begin, std::size end)
    {
    	std::ifstream file(filename.c_str());
    
    	if (!file )
    		return std::vector<std::string>();
    
    	std::vector<std::string> vec{end};
    
    	std::string s;
    	for(std::size_t i = 0; i < end && std::getline(file, s); ++i)
    		vec.push_back(s);
    
    	vec = std::vector<std::string>{vec.begin()+begin, vec.begin()+end}; // gefährlich ohne prüfung
    	return vec;
    }
    

    Aber Achtung, auch hier sind immer noch genug Stolperfallen drinne !!
    (Unter anderem auch weil ich jetzt nicht die Zeit und Lust habe, mich genauer damit zu befassen)


Anmelden zum Antworten