Filehandling in C++
-
Ich hab mal ne Frage, ich hab ein Programm geschrieben, das mir ein wenig Arbeit ab nimmt.
Dabei wird eine Datei geöffnet, aus der Daten ausgelesen werden und eine, in die die Daten nach der Verarbeitung geschrieben werden.
Mein Problem ist nur, dass die Daten nicht geordnet vorliegen und ich somit immer die gesamte Liste durchsuchen muss, bis ich zum Ende komme.
Da es relativ große Datenmengen sind, kommt für mich so ein Ansatz, wie ein Baum, oder eine verkette Liste nicht in Frage, da auch die Anzahl der in den Datensätzen vorkommenden Inahlte variiert. Jetzt ist lediglich ein Problem:
Wenn ich die Datei durchsucht habe, steht der Pointer ja auf der letzten Zeile. Dann habe ich es wie folgt versucht, ich habe den Stream geschlossen und wollte ihn bei jedem Aufruf der Methode neu öffnen, jedoch erhielt ich einen Fehler beim Öffnen der Datei, was zur Folge hat, dass ich derzeit nicht mehr weiter komme und die ganze Scheiße von Hand machen müsste ^^
Gibt es vielleicht irgendwen, der mir helfen kann, der z.B. weiß, wie man den Zeiger wieder auf die erste Zeile der Datei setzen kann, oder ähnliches.
Bin über alles hilfreiche dankbar.
-
Was hälst du denn von der Verwendung einer Datenbank. Die sind extra für
das "Arbeiten" mit grösseren Datenmengen gemacht.
-
Es hat nichts mit Datenbanken zu tun, will einfach aus einer Text-File was raus streamen und in ne andere Text-File was rein, das ungefähr so 1500 x 4 Einträge hat, ich weiß, is schon relativ viel, werde aber in der Arbeit hier keine Datenbank benutzen, da das für dieses Programm von der Implementierung her zu viel Arbeit wäre.
-
Vorden schrieb:
Da es relativ große Datenmengen...
Vorden schrieb:
1500 x 4 Einträge...
Die 6000 Einträgen sind jetzt aber nicht die grosse Datenmengen oder. Ich hab
schon maps mit >100000 Einträgen problemlos im Speicher gehalten.
-
Erde an Mc Fly, es geht nicht um die Größe der Datenmenge, k?
Ich wollte lediglich wissen, wie ich ohne den Stream zu schließen und ihn wieder zu öffnen (da das irgendwie Probleme bereitet), wieder an den Anfang der File zurückkommen kann, ok?
-
Und wenn Du deinen Stream in der Application offen lässt, und beim aufruf der MEthode mit fseek an den Anfang gehst ?
-
Hmm, kenne die Verwendung von fseek nich, aba des is eigentlich genau des, was ich derzeit suche, also, es klingt so.
Wobei, geht fseek in C++ auch, klingt mir wengl nach C mit fopen etc.
Ich hab halt so mit fstream gearbeitet, is des ne Methode von fstream, oda is des ne Funktion in C?
Und Verwendung wär auch ganz nett eigentlich
-
Etnschuldige, das war C
schau mal hier:
http://www.cplusplus.com/ref/iostream/istream/seekg.htmlund zum schreiben seekp
-
Danke vielmals, sollte helfen
-
Des war irgendwie doch net die richtige Lösung, ich schreib eben mal den Code, vllt könnte irgendwer mir helfen, dass des gescheit funktioniert.
char x[100]; eingabe.seekg(0,ios::beg);//Den Code hab ich jetz erst dazugenommen, weil mir hier gesagt wurde, es funktioniert damit for(;!eingabe.eof();)//In der Schleife wird bis eof, oder bis suche 1 zurückliefert gesucht, bzw. Daten ins Programm geholt { for(int i = 0; i <9;i++) { eingabe>>rein[i]; } if(suche()==1)break; }vllt könntet ihr mir damit helfen.