# [C++] Daten aus einer Datei in ein int Array einlesen?!



## ACE2xxx (13. August 2008)

Hallo,

ich suche schon seit ca 2 Tagen vergäblich nach einer Möglichkeit Daten aus einer Datei z.B. *.txt in ein "int Array[]" einzulesen.

Gibt es da eine Möglichkeit? Oder kennt jemand einen kleinen Trick wie man ein "char Array[]" in ein "int Array[]" konvertieren kann? Denn mit chars klappt es wunderbar, leider will da mein programm nicht weiter damit Arbeiten.

Da datei enthält nur ganze Zahlen und Jede Zahl steht in einer eigenen Zeile:
___________________________________________
1
2
3
4
5
6
.
.
.
.
usw...
____________________________________________

und gibt es ein Befehl womit ich die Zeilen aus der Datei abzählen kann um das Array zur Laufzeit zu erstellen? 

danke schon mal...

ACE


----------



## Skini (13. August 2008)

Du Könntest beim auslesen der datei mitzählen wie oft dass zeichen 0x20 vorkommt.
zu dem anderen kann ich leider nicht Helfen.
greetz Skini


----------



## Marvin Schmidt (13. August 2008)

Hi


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

using namespace std;

int main(int argc, char **argv)
{
        int foo;
        ifstream ifs;
        ifs.exceptions ( ifstream::failbit | ifstream::badbit );
    
        try 
        {
                ifs.open("test.txt");
                while (!ifs.eof())
                {
                        ifs >> foo;
                        cout << foo << endl;
                }
        }
        catch (ifstream::failure e) 
        {
                cout << "Exception opening/reading file";
        }

        ifs.close();

        return 0;
}
```

Das liest die einzelnen Zahlen in die Variable foo. Du solltest aber sicherstellen, dass die Datei nur numerische Werte enthält, da ansonsten 'ne Exception geworfen wird. Vielleicht kannst du das auch noch so anpassen, dass nicht-numerische Werte übersprungen werden oder ähnliches.
Anstelle eines int-Arrays würde es sich vielleicht auch anbieten std::list<int> zu benutzen, es sei denn es handelt sich immer um die gleiche Anzahl an Werten.

Schöne Grüße,
Marvin


----------



## ACE2xxx (14. August 2008)

Hola!

Danke das hat weitergeholfen!

Das mit dem Abzählen von Zeilen habe ich einfach gelöst indem ich den Ersten Wert in der Liste gleich der Anzahl an Elementen in der Datei gesetzt habe, dadurch wurde das Auslesen und auch das weiterarbeiten viel einfacher

Aber eine Sache müsstet ihr mir noch erklären..

...was hat es hier mit diesem "foo" auf sich? Ich habe auch noch an anderen Stellen sowas getroffen und auch noch "foo-bar" usw... Ist es sowas wie Programmierer-Humor? Was bedeutet das? Ihr müsst wissen, ich bin ziemlich neu auf diesem Gebiet.

grüße...

ACE


----------



## devDevil (14. August 2008)

Hm kurz und knackig?

```
std::ifstream file_stream("test.txt");
if (!file_stream) return false;

std::vector<int> data(std::istream_iterator<int>(file_stream), std::istream_iterator<int>());
```
 sollte reichen um alle Daten in "data" stehen zu haben 


foo u. bar kannst du durch einen beliebigen Bezeichner ersetzen.


----------

