Datei lesen und letzte Zeilen als array speichern
-
Hi Leute. Kann mir jemand eine funktion schreiben, die die letzen 10 Zeilen einer Datei in ein array speichert? Habe ein array:
string myArray[10];Nun will ich mit der Funktion, dass die letzten Zeilen dort gespeichert werden. Ausserdem, wenn die Datei weniger als 10 Zeilen besitzt, sollen die fehlenden mit irgendeinem Stuss gefüllt werden. "adasda" z.B.
-
Das geht mit folgendem:
- ifstream
- getline
- while loop
- Eigeninitiative
-
Kann man denn mit getline die Startposition setzen? Also dass er unten-10 anfangen soll.
-
Nein. Woher soll dein Programm denn die Zeilenzahl kennen?
Du mußt schon alles einlesen.
-
Kann man denn mit getline die Startposition setzen? Also dass er unten-10 anfangen soll.
Dafür gibt es die Funktionen seek und peek. Google mal nach

Allerdings müsstest du dann mit ner Binary Datei arbeiten.
Gruß Tobi
-
Er will ja auf den Zeilenanfang setzten. Dazu müßte er aber erstmal herausbekommen wo der ist. Und dazu muß er die ganze Datei einlesen. Womit wir wieder beim Anfang sind.
-
Hm stimmt, vllt. sollte er sein Schema noch mal überarbeiten und seine Datensätze als struct in eine binäre Datei sichern, so können Abstände leichter eingehalten werden.
-
Lies dazu mal in den FAQ nach:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39469.htmlUnd dann noch sowas in der Art (geht vmtl. auch performanter und hübscher, ist aber einigermaßen leicht nachvollziehbar):
template<class T> T getLastNItems(const T& allItems, size_t n) { T results; typedef typename T::const_reverse_iterator It; for (It it = allItems.rbegin(); it != allItems.rend(), results.size() < n; ++it) results.push_back(*it); std::reverse(results.begin(), results.end()); return results; }edit: Eigentlich mit std::reverse etwas hübscher.
-
Der gütige MrN hat mich darauf hingewiesen, dass es ja auch noch std::advance gibt.
Viel schöner (und performanter):
template<class T> T getLastNItems(const T& allItems, size_t n) { typedef typename T::const_iterator It; It it = allItems.end(); std::advance(it, -n); return T(it, allItems.end()); }