Integer aus Textdatei lesen
-
Ich muss mehrere Integerwerte aus einem Textfile lesen.
Dazu sollte ich zuerst an die richtige Stelle springen (z.b in Zeile 5 Zeichen 10).
Die einzulesenden Integer-Werte können beliebig groß werden (mehrere Dezimalstellen).
Wie realisiert man so ein programm am besten???
Ich habe keine Ahnung wie man beginnen könnte??Danke für eure Antworten.
-
Bisher hab ich die Funktion folgendermaßen programmiert:
int Input::getNumModules(){
fstream nodes;
nodes.open("adaptec5.nodes", ios::in );
nodes.seekp(0, ios::beg);
for(int i=1; i<=4; i++){
char buffer[80];
while (!nodes.eof()){
nodes.getline(buffer, 80);
}}
nodes.seekp(25);
return nodes.get();
}Das Programm endet allerdings in einer Endlosschleife.
Was könnte man anders machen?
-
Woher kommen die Zahlen 4 und 80? Ich verstehe dein Programm nicht.
Unter der Annahme, dass man nur einen oder weniger Werte auslesen muss, würde ich dies so machen:
#include<iostream> #include<fstream> #include<limits> using namespace std; int readint(size_t line, size_t column, istream &in) { in.seekg(ios_base::beg); for(size_t i=1; i< line; ++i) in.ignore(numeric_limits<streamsize>::max(), '\n'); in.ignore(column); int value; in>>value; return value; } int main() { ifstream test("test.dat"); cout<<readint(4, 6, test)<<endl; cout<<readint(3, 24, test)<<endl; }test.dat:
458 4i u894 krh rh4 43hr 5rk5trh k4h5 43j kj 4j l4j ttl43j 3j5k 567890 fkj fk12345 f,h dnfk kdngk f,gnk f,nv kngfAusgabe:
12345 7890Das ist die Quick&Dirty Variante. Es sollten natürlich noch dringend Fehlerkorrekturmaßnahmen rein, aber ich wollte dich mal auf den richtigen Weg bringen.
Wenn das für viele Werte gemacht werden soll, würde ich die ganze Datei zeilenweise einlesen und dann immer an die gewünschte Stelle springen. Denn das viele Lesen in der Datei, welches mein Code macht, ist bestimmt nicht sehr effizient.
-
SeppJ schrieb:
Wenn das für viele Werte gemacht werden soll, würde ich die ganze Datei zeilenweise einlesen und dann immer an die gewünschte Stelle springen. Denn das viele Lesen in der Datei, welches mein Code macht, ist bestimmt nicht sehr effizient.
Ich hätte lieber die Positionen gesammelt und sortiert, dann kann man die Datei im Vorwärtsgang abarbeiten.