Pointer in Files zurück auf Beginn setzen
-
Hallo, ich habe mal eine Frage.
Ich setze mich gerade mit der Bearbeitung von Excel-Listen zwecks Ferienarbeit auseinander.
Da ich hier immer wieder das gleiche machen muss (und keinen Bock auf VB hatte), hab ich mir ein kleines ganz hilfreiches C++ Programm dafür geschrieben.
Das einzige Problem, welches ich momentan habe ist, dass, wenn ich die File durchsuche nach den benötigten Datensätzen, die Abfrage bis eof läuft.
Wenn ich nun die File schließe, um sie anschließend wieder zu öffnen (was für mich recht logisch war, um den Pointer zurück auf den Dateianfang zu schieben), erhalte ich einen Fehler beim Öffnen, weil bei bei der Abfragefstream eingabe eingabe.open(dateiname1,ios::in); if(!eingabe.good()) { cout<<"Fehler beim Öffnen der Eingabedatei!!"<<endl; }was zur Folge hat, dass ich nicht mehr auf die Datei zugreifen kann und die benötigten Datensätze einlesen kann.
Da ich mittelsfor(int i = 0;i<10&&eingabe.eof();i++) { eingabe>>rein[i]; }Die Datei auslese funktioniert komischerweise auch nicht dieser Code am Anfang der Methode:
eingabe.seekg(0,ios::beg);was mich einigermaßen verwundert hat, jetz hab ich das Problem, dass ich eben wieder zurück an den Anfang der File möchte, jedoch nicht dorthin komme, was bedeutet, ich dürfte den ganzen Scheiß per Hand machen, also bitte:
Helft mir!!!
Thx so far
-
Wenn der Stream nicht good() (also eof, fail, bad oder eine Kombination daraus) ist, macht seekg und Konsorten garnix.
Einfach vorher eingabe.clear() aufrufen.
-
wo sollte ich eingabe.clear() aufrufen
btw:
zusatz zu gerade:
ich lasse immer so ca. 25 Datensätze auf einmal korrigieren. Habe mir hierbei gerade einmal den gelieferten Pointer von eingabe.seekg(0,ios::beg); angesehen, bei den ersten 25 Datensätzen, die aber alle einzeln abgerufen werden, wobei jeweils ein Funktionsaufruf dort steht, geht der Pointer immer zurück auf den Anfang der File, jedoch, wenn ich den 2. Datensatz eingebe, wird der NULL-Pointer zurückgegeben, was mich irgendwie verwundert, obwohl die Eingaben gelöscht werden und eigentlich alles beim 2./3./... mal genau gleich aufgerufen wird, wie beim 1. mal.
Ich bin dezent verzweifeltEdit: Die Kombination zwischen eingabe.clear(); und eingabe.seekg(0,ios::beg); hat mir die Lösung gebracht
Thx