In Datei eine Zeile "weiterspringen"
-
Hallo
Also ich habe folgende Frage: Ist es möglich beim Auslesen einer Datei genau eine Zeile tiefer, oder zumindest an den Anfang der nächsten Zeile zu springen, ohne dass man die komplette Zeile auslesen muss?
Es handelt sich dabei um eine einfache *.txt-Datei die mit fstream geöffnet wird. In ihr stehen untereinander wie im Duden nach Alphabet geordnete Wörter. Wenn ich nun überprüfen will, ob ein Wort eingetragen ist, dann will ich nicht erst jeden Vorgänger auslesen bis ich dort angelangt bin, sondern nur das erste Zeichen überprüfen.
Danke schonmal für die Antworten
-
Du könntest die Funktion getline() nehmen, wobei dies auch nicht hundertprozentig damit klappen wird, da hier auf die Zeilenlänge zu achten ist.
Alternativ könntest du die CStdioFile Klasse verwenden. Diese besitzt ein Funktion zum Zeilenweise einlesen einer Textdatei.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cstdiofile.3a3a.readstring.aspWenn es sich um große Datenmengen handelt (irgendwann handeln wird) wäre es sinnvoller dies in eine Datenbank zu packen und dort rauszulesen.
-
danke, habs jetzt anders geregelt, indem ich die Datei bei Programmstart komplett einlsee. Ist wohl die beste Lösung, weil ich doch sehr viel hin- und herspringen muss und teilweise auch mittendrin Wörter einfügen müsste.
Stehe jetzt allerdings vor einem anderen Problem (bin mir nicht ganz sicher ob ich nicht nen neuen thread aufmachen sollte, weils ziemlich vom alten Thema abweicht, aber ich schreibs erstmal hier rein)
Erstmal folgender Code:
struct AVLvertex { string vertex; AVLvertex* leftAVL; AVLvertex* rightAVL; };void AVLcreate(..., AVLvertex Vertex, ...) { Vertex.vertex = irgendeinString; Vertex.leftAVL = new AVLvertex; AVLcreate(...,Vertex.leftAVL,...); }Wie man sieht, ist die Funktion AVLcreate rekursiv. Ich habe hier jetzt nur die 3 wichtigen Zeilen der Funktion abgebildet, und nur den relevanten Übergabeparameter, also nicht wundern, dass die Funktion nicht viel Sinn ergibt.
Mein Problem jetzt:
So wie der Code abgebildet ist, gibt es einen Fehler an der Stelle
AVLcreate(...,Vertex.leftAVL,...);weil hier anstatt eines AVLvertex nur ein Pointer auf eben so einen übergeben wird.
Wenn ich die Funktion so definiere:
void AVLcreate(..., AVLvertex* Vertex, ...) {...klappt zwar die Übergabe einwandfrei, aber er meckert an folgender Stelle:
Vertex.vertex = irgendeinString;error C2228: Der linke Teil von '.rightAVL' muss eine Klasse/Struktur/Union sein
Und jetzt weiß ich nicht wirklich, wie ich das umbasteln soll, damit ich
1)meinen AVLvertex richtig übergeben kann und
2)in der Funktion AVLcreate richtig damit arbeiten kann
-
Versuchs mal mit:
void AVLcreate(..., AVLvertex* Vertex, ...) { Vertex->vertex = irgendeinString; Vertex->leftAVL = new AVLvertex; AVLcreate(...,Vertex->leftAVL,...); }
-
Danke, hatte ich schon entdeckt. Funktioniert wunderbar
