Fstream - Variable Dateinamen
-
Hallo zusammen!
Folgendes Problem wo ich etwas Hilfe gebrauchen könnte:
Habe verschiedene Dateien die ich nacheinander verarbeiten möchte. Die Dateinamen sind so -> abc-123456.dat (Vorzeichen;laufende Nummer;Dateiformat) aufgebaut.
Alle zu verarbeitenden laufenden Nummern liegen in einem Textfile. Dieses lese ich aus und baue mir somit den Dateinamen in einem std::string auf. Die zu öffnende Dateie soll dann verarbeitet werden.
Wie schaffe ich es, dass der aufgebaute Dateiname als Variable in fstream open benutzt werden kann? Bekomme eine Endlosschleife. Woran liegts? Bin für jede Hilfe dankbar! Benütze Dev C++.#include "stdafx.h" #include <string> #include <iostream> #include <fstream> using namespace std; int suche(string dat){ fstream datei; string dat_vorz, dat_format, s; dat_vorz = "Vorzeichen-"; dat_format = ".dat"; dat = dat_vorz + dat + dat_format; cout << dat << endl; datei.open(dat.c_str(),ios::in); while(!datei.eof()){ getline(datei,s); cout << s << endl; } datei.close(); return(0); } int main(){ char temp; string s; fstream quelle, ziel; int i; quelle.open("Verarbeitet.txt", ios::in); quelle.seekg(0, ios::beg); while(!quelle.eof()){ for (i=0; i<3; i++){ quelle >> s; if (i==0){ suche(s); } if (i==2){ i = -1; } if (quelle.eof()){ break; } } } quelle.close(); return(0); }
-
Hallo,
weil du i immer auf -1 setzt, so bald es 2 wird.
gruss
v R
-
Ich will auch nur jeden 3ten String aus der Quelle haben.
Grund: laufendeNummmer Datum Uhrzeit
Da ich immer nur die laufende Nummer in die Funktion suche übergeben haben will, habe ich i auf -1 gesetzt.
Wenn ich in Funktion suche den Dateinamen selber angebe (datei.open"abc-123456.dat")funktionierts.
-
kann mir keiner einen tipp geben? oder ein beispiel wie ich verschiedene dateien mit einer variable und schleife öffne?
-
bool search(const std::string& file_name) { std::string file_intern("Vorzeichen-"); file_intern += file_name; file_intern += ".dat"; std::cout << file_intern << std::endl; std::ifstream file_stream(file_intern.c_str(), std::ios::in); if (!file_stream) return false; std::string line_in; while (std::getline(file_stream, line_in)) std::cout << line_in << std::endl; return true; }... das schonmal dazu

int main() { std::ifstream file_stream("Verarbeitet.txt", std::ios::in); if (!file_stream) return -1; std::string input; while (file_stream.eof() == false) { for (unsigned short x = 0; (x < 3 && file_stream.eof() == false); ++x) { file_stream >> input; if (x == 0) search(input); } } }... naja nicht die beste Lösung ... hab es auf deinem Ansatz aufgebaut ... kann man noch viel eleganter lösen.
-
Vielen vielen Dank!

Hab allerdings noch ein Problem. Und zwar sind meine zu öffnenden Dateien ziemlich lang.
Vorzeichen: 7 Zeichen
laufende Nummer: 32 Zeichen
Dateiformat: 4 Zeichen (.dat)Dementsprechend kann man sich ja ausmalen wie groß der Dateiname ist. Da liegt auch schon das Problem. Kann die Datei deshalb nicht öffnen. Wenn ich den Dateinamen verkürze klappts einwandfrei! Was könnte man da noch machen?