# TXT Datei einlesen



## ReemE (6. Juli 2002)

wie kann ich innerhalb einer Konsolen Anwendung bei c++ eine TXT Datei auslesen, die Ich vorher bestimmen kann ...

D.h ich will vorher ein Input machen, indem man den Pfad der Datei eingibt, die dann später ausgelesen werden soll ...

bekomm das aber nich hin ..  
thx


----------



## Dario Linsky (6. Juli 2002)

meinst du sowas hier:


```
#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{
    char     filename[128];
    ifstream file;
    char     zeile[1024];

    // Dateinamen einlesen
    cout << "Dateinamen eingeben: " << flush;
    cin.getline(filename, 127);

    // Datei öffnen
    file.open(filename, ios::in);

    if (file.good())
    {
        // Wenn die Datei geoeffnet werden konnte...

        // An den Anfang der Datei springen
        file.seekg(0L, ios::beg);

        while (! file.eof())
        {
            // Die Datei zeilenweise auslesen
            file.getline(zeile, 1024);
            cout << zeile << endl;
        }
    }
    else
    {
        // Wenn die Datei nicht geoeffnet werden konnte,
        // aus welchen Gruenden auch immer...
        cout << "Datei nicht gefunden." << endl;
    }

    return 0;
}
```


----------



## ReemE (8. Juli 2002)

das angegebene kann leider nur TXT dateien, die 1 eine zeile enthalten ...

;(


----------



## Dario Linsky (8. Juli 2002)

dass das nur mit einzeilern funktioniert, ist teilweise richtig. 
eine möglichkeit wäre es eben, dass du in einer schleife jede zeile ausliest und an eine weitere variable anhängst.

da gibt's aber sicher auch eine bessere möglichkeit, mit der man die ganze datei einlesen kann.
oder du verzichtest auf objektorientierung und machst das mit normalem c, indem du jedes einzelne zeichen einliest und an eine variable anhängst.


----------



## ReemE (8. Juli 2002)

nope, das will ich nicht ....

Das mit der schleife is schon ne gute idee..
aber wo muss ich die ansetzen ???


----------



## Vitalis (8. Juli 2002)

Hmmm, schau mal hier


----------



## ReemE (9. Juli 2002)

hmm, kann das nich lesen, is so klein gedruckt .. naja ..
is ja nich schlimm ...


----------



## Vitalis (9. Juli 2002)

dann nicht.


----------



## Dario Linsky (9. Juli 2002)

> hmm, kann das nich lesen, is so klein gedruckt .. naja ..



bei allem respekt, aber das ist doch nun wirklich etwas sehr albern, oder?
das ist ein pdf. und wie wir alle wissen kann man im acrobat reader zoomen. oder stell deine auflösung runter. oder druck es aus und lies es auf papier.


----------



## Guntpat1981 (22. Januar 2005)

Also wirklich! ;-]


----------



## Warum denn (9. Januar 2010)

Halloa!
Also man kann sehr unkompliziert eine ganze Datei auslesen. Allerdings dann nicht mehr so gezielt, wie mit der oben beschriebenen Methode:

#include <fstream>
#include <iostream>
using namespace std;

void main()
{
	ofstream out("witz.txt");
   out<<"Es kommt ein Mann zum Baecker und sagt: Ich moechte 99 Broetchen."<<endl;
   out<<"Da fragt der Baecker: Duerfen es auch 100 sein?"<<endl;
   out<<"Der Mann antwortet: Nein, wer koennte denn so viele essen?"<<endl;


   ifstream in("witz.txt");
   while(in.eof()!=true) //eof gibt an, wann die txt fertig ausgelesen ist
   {
      char ch;
      ch=in.get();
      cout<<ch;
   };

   cin.get();
};

Grüße!


----------



## Matthias Reitinger (9. Januar 2010)

Warum denn hat gesagt.:


> ifstream in("witz.txt");
> while(in.eof()!=true) //eof gibt an, wann die txt fertig ausgelesen ist


Es sei denn es tritt vorher ein Eingabefehler auf, dann wird die Bedingung nie erfüllt und man erhält eine Endlosschleife. Darum sollte man eine solche Abfrage nie verwenden. Besser und einfacher:

```
while (in)
```

Die einfachste Möglichkeit, eine gesamte Datei einzulesen und auf der Standardausgabe auszugeben, wurde allerdings noch nicht genannt:

```
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>

using namespace std;

int main(void) {
  ifstream in("witz.txt");
  copy(istreambuf_iterator<char>(in),
       istreambuf_iterator<char>(),
       ostreambuf_iterator<char>(cout));
  return EXIT_SUCCESS;
}
```

Grüße,
Matthias


----------

