ich will mit ifstream eine Parameterdatei (in Form einer Textdatei) einlesen. Um, je nachdem wie lang die Datei ist, ein dementsprechend großes Array für die Werte anzulegen,
würde ich gern vorher die ZEILENANZAHL DER TEXTDATEI ERMITTELN.
Hat jemand ne Ahnung, wie man das elegant und möglichst einfach machen kann ???
der nachteil wenn du es vorher wissen willst ist das du erst die ganze datei einmal durchnudeln musst um zu wissen wieviele zeilen enthalten sind. am besten eine STL klasse nehmen z.b std:vector<std::string> und dann den ganzen krempel zeilenweise einlesen. dann hast du in jedem string eine zeile stehen und weisst auch die zeilenanzahl ohne das du die datei nochmal zum lesen durchrödeln musst besser ist es allerdings wenn du die informationen zeilenweise abarbeiten könntest weil du ja sonst die komplette datei in dem speicher liest und den damit ganz schön vollmüllst -- ...fleißig wie zwei Weißbrote
Ja, ich hab eine Ahnung, wie man das machen kann. Elegant ist es leider nicht, weil es m.W. keine Standard-C- oder C++-Möglichkeit gibt, die Anzahl der Zeilen in einer Datei abzufragen ohne sie auszulesen.
Zitat:
~revolutz postete bitte nur Lösungen in C++ Syntax.
Sonderwünsche kosten extra. Darf ich die Rechnung dann gleich mitschicken?
Ich habe jetzt einfach die Einleseroutine zweimal laufen. Einmal um die Zeilenanzahl zu ermitteln und danach nochmal um die Zeilen einzulesen. Ich dachte ich könnte dann je nach größe der Datei ein Array Initialisieren in der Form:
Double Arrayname[Zeilenzahl];
Das scheint aber nicht zu gehen, da der Speicherplatz für ein Array von vorn herein fest bestimmt werden muß (berichtigt mich, wenn da nicht stimmt).
Es gibt doch sicher noch Alternativmöglichkeiten zu starren Arrays. Gibt es eine EINFACH (!!!) zu Durchschauende Möglichkeit, arrayartige Gebilde zu schaffen die je nach Bedarf in Form und größe während das Programm läuft angelegt werden können? Da ich mich mit der ganzen C++ Syntax und dem Verstehen der Funktionsweisen von C++ noch sehr schwer tuhe währe ich für eine einfache Lösung bzw. eine für Anfänger verstänliche Erklärung bzw. Idee sehr dankbar.
wenn du die textdatei vorher selber anlegst kannst weisst du ja schon die zeilenanzahl und könntest in der ersten zeile eine zahl mit dieser information hinterlegen.
das andere mit den "arrayartige Gebilden" die du ansprichst hab ich oben schon geschrieben nimm einen std::vector. Denn kannst du ansprechen wie ein array und dynamsich vergrössern und verkleinern ein Beispiel wie das mit dem vector geht findest du z.b. hier -- ...fleißig wie zwei Weißbrote
~revolutz postete Es gibt doch sicher noch Alternativmöglichkeiten zu starren Arrays. Gibt es eine EINFACH (!!!) zu Durchschauende Möglichkeit, arrayartige Gebilde zu schaffen die je nach Bedarf in Form und größe während das Programm läuft angelegt werden können?
Nein, leider nicht. Dynamisches Array-Management ist in C++ nicht mit trivialen Mitteln zu haben. Entweder new / delete oder das bereits von Windalf vorgeschlagene vector-Template.