Von Textdatei in zweidimensionales Array schreiben



  • Belli schrieb:

    Warum liest Du in ein char-Array ein?
    Warum willst Du in ein zweidimensionales Array einlesen?

    Kannst Du nicht
    in einen string statt in ein char-Array einlesen und
    in einen vector<string> statt in ein zweidimensionales Array?

    Wieso schreibt ihr alle in Gedicht-Form? Mit so schönen Enjambements... 👍



  • Sone schrieb:

    std::vector<int> vec( std::istream_iterator<int>(is),std::istream_iterator<int>() );
    

    Funktionsdeklaration



  • Ja, der Fehler nervt.
    Wieso eigentlich?



  • vip@r, du machst einige Dinge nicht richtig. Arbeitest du gerade zum ersten Mal mit fstream?

    vip@r schrieb:

    ifstream datei;
    

    Du hast vergessen, den Namen der Datei anzugeben. Das i in ifstream steht für input. 💡 Die Angabe von ios_base::in ist natürlich unnötig. Willst du einen Dateinamen einlesen, musst du dies natürlich vor dieser Anweisung tun. Ansonsten noch ganz wichtig: RAII --> Wikipedia

    vip@r schrieb:

    while (!datei.eof())
    

    Ohohoh, ganz, ganz fataler Fehler. Du ließt falsch. Du machst folgendes:
    1. Prüfen
    2. Lesen
    3. Verarbeiten
    Das ist natürlich Murx ⚠.

    Du musst es natürlich so machen 💡:
    1. Lesen
    2. Prüfen
    3. Verarbeiten, falls erfolgreich gelesen.

    vip@r schrieb:

    datei.close();
    

    Wie gesagt... RAII

    vip@r schrieb:

    Wie mache ich das am besten?

    std::vector + std::string. Falls du diese Container nicht kennst, schau sie dir an. Sie sind wichtig.



  • Nathan schrieb:

    Ja, der Fehler nervt.
    Wieso eigentlich?

    Du weißt ja, dass du Parameternamen weglassen darfst, nicht nur bei einer Funktionsdeklaration, auch bei einer Funktionsdefinition. Jetzt ist nur noch wichtig zu wissen, dass

    int zahl;
    int(zahl);
    int (zahl);
    

    alles dasselbe ist. So, und wenn du so eine Zeile nun primitiv ersetzt, dann siehst du auch sofort, dass es eine Funktionsdeklaration ist.

    std::vector<int> vec( std::istream_iterator<int>(is), std::istream_iterator<int>() );
    int vec(int (zahl),int);
    


  • Sorry, eben ungetestet. 😃
    Entweder einfach doppelt umklammern, oder seit C++11 (bzw. schon seit C++0x) einfach mit Listen-initialisierung.



  • Oh, ach so.
    Trotzdem blöd.



  • Nathan schrieb:

    Oh, ach so.
    Trotzdem blöd.

    Willkommen bei C++. Möchten sie einen Drink?

    Neh, aber mal ernst.

    Wo zum Teufel braucht man lokal deklarierte Funktionen? Die Komplikationen die durch dieses "Feature" entstehen, werden durch den Vorteil (welcher auch immer dieser sein mag) definitiv nicht kompensiert. 👎



  • @out: Ja, ich arbeite heute das erste mal mit diesem ifstream.

    1. Lesen
    2. Prüfen
    3. Verarbeiten, falls erfolgreich gelesen.

    Wie würde das dann bei mir aussehen?

    Ich bekomme aber keine Zahlen sondern strings. Ich hab hier eine Textdatei mit einem Maschinenregisterprogramm das mir mein C++ Programm irgendwann mal interpretieren soll.

    Dazu will ich eben aus einem txt-File ein paar Zeilen einlesen, die durch ";" abgetrennt sind. Und da wäre mir eben spontan ein Array eingefallen das in jeder Zeile eine Anweisung stehen hat. Versteht ihr?



  • vip@r schrieb:

    @out: Ja, ich arbeite heute das erste mal mit diesem ifstream.

    1. Lesen
    2. Prüfen
    3. Verarbeiten, falls erfolgreich gelesen.

    Wie würde das dann bei mir aussehen?

    Dazu muss ich den Aufbau deiner Datei wisse, und was du genau lesen willst.



  • Also, du willst Zahlen einlesen, die durch ein ; getrennt sind?

    std::vector<int> numbers;
    int i;
    char buf;
    while (file >> i >> std::ws >> buf)
        numbers.push_back(i);
    

Anmelden zum Antworten