Pfadeingabe
-
Hi Leute,
habe folgenden Code zusammengestückelt, mit dem man Dateien zeilenweise einlesen:
#include <fstream.h>
void main(void)
{
char hilf;
char *daten;
char buffer[1024]; //zeilenweise
int dateigroesse,i=0;
ifstream einlesen;
einlesen.open("d:\\Test.txt", ios::in|ios::nocreate);
if (einlesen.good)
{
i=0;
einlesen.seekg(0L,ios::end); //ios::end, Dateizeiger vom Ende der Datei aus bewegen.
dateigroesse = einlesen.tellg();
einlesen.seekg(0L,ios::beg); //ios::beg, Dateizeiger vom Anfang der Datei aus bewegen.
daten = new char[dateigroesse+1];while(einlesen.good())
{
einlesen.getline(buffer,1024); //zeilenweise
cout << buffer << "\n"; //zeilenweise
i++;
}
einlesen.close();
}
else
{
cout << "FEHLER keine Datei gefunden!" <<endl;
}
delete[] daten;
}Problem:
Was muss ich in meinem Code wo und wie ändern, damit ich einen Pfad manuell eingeben kann?
Irgendwo müsste doch was hin in der Form:
string datei;
cout<< "Pfad eingeben!";
cin >> datei;
datein.open(datei.c_str(), ios_base::in);und dann noch ein paar Header.....
#include <iostream>
#include <string>
using namespace std;...ich weiss aber ahlt nicht genau wo und wie ich das in meinem Code unterbringen muss. Kann einer meinen Code ergänzen?
Danke vielmals!
-
Was sind das, Hausaufgaben?
Ich habe alles unwesentliche weggeschmissen, aber deine Struktur behalten. Übrigens, wie wär es mal mit einem Buch?
#include <fstream> #include <iostream> #include <string> using namespace std; void main() { cout << "Dateiname: "; string dateiname; getline(cin, dateiname); ifstream einlesen(dateiname.c_str(), ios::in|ios::nocreate); if (einlesen.good) { string line; while(einlesen.good()) { getline(einlesen, line); cout << line << "\n"; } einlesen.close(); } else { cout << "FEHLER keine Datei gefunden!" <<endl; } return 0; }
Nicht getestet.
mfg, KdeE
-
@KdeE: kleiner Verbesserungsvorschlag
wie wäre es mitint main(){...}
wenn man schon 0 ans Betriebssystem zurückgibt
es heißt außerdemeinlesen.good()
da es sich um eine Fkt handelt
außerdem reichtif( einlesen )
auch, wenn ich mich nicht irre und beim Arbeiten mit ifstream kann man sich das .close() auch sparen, ist aber auf jeden Fall schön und sicher es trotzdem zu benutzen
-
ich waage sagen zu dürfen version.KdeE++:
#include <iostream> #include <fstream> #include <string> using namespace std; int main(){ cout << "Dateiname: "; string dateiname; getline(cin, dateiname); ifstream einlesen(dateiname.c_str()); if( einlesen ){ string line; while( !einlesen.eof() ){ getline(einlesen, line); cout<<line<<endl; } } else{ cerr<<"FEHLER keine Datei gefunden!"<<endl; } return 0; }
ist natürlich auch noch kein nonplusultra
-
if (einlesen) { string line; while (getline(einlesen, line)) cout<<line<<endl; }
*kontributier*
-
Hi Freshman,
Danke für den Code. Der sieht aber gewaltig anders aus, als meiner.Es handelt sich um eine Studienaufgabe (Hausübung) in der wir zeilenweise daten einlesen müssen.
Jetzt muss ich noch die Ausgabe mit einem manuell einzugebenden neuen Pfad ermöglichen. Mal schauen, vielleicht finde ich etwas in en vorigen Beiträgen.
Eventuell kannst du (ihr) mir auch helfen.Wie dem auch sei, der Code von dir funktioniert soweit, Danke!!
Gruß
-
@op void:nice
ist mir echt noch nie aufgefallen
ist doch einfacher&performanter als Dateinamen direkt einen c-string zu benutzen, oder?int main(){ const int MAX_LEN=80; char dateiname[MAX_LEN], zeile[MAX_LEN]; cout<<"Dateiname: "; cin.getline(dateiname,MAX_LEN); ifstream einlesen(dateiname); if( !einlesen ){ cerr<<"FEHLER keine Datei gefunden!"<<endl; } else{ while( einlesen.getline(zeile,MAX_LEN,'\n') ){ cout<<zeile<<endl; } } return 0; }
@Hirsch: Probier' es mal. Geht genau analog wie mit'em ifstream. Wird schon klappen