Datei einlesen und ausgeben



  • Ich würde das eher so schreiben:

    #include <fstream>
    #include <vector>
    
    using namespace std;
    
    int main()
    {
        vector<double> Zahlen;
        double tmp;
        ifstream file("Beispiel.txt");
        while (!file.eof())
        {
            file >> tmp >> ';';
            Zahlen.push_back(tmp); 
        }
    }
    


  • ok... also heißt das jetzt so viel:

    1. Vector = Dyn. Array?

    file >> tmp >> ';';
    

    löscht mir das ; von der dementsprechende Zahl und speichert diese in tmp?

    Zahlen.push_back(tmp);
    

    schreibt tmp in das dynamische Array wobei der index immer um 1 erhöht wird?

    vielen Dank!



  • B1ND3R schrieb:

    ok... also heißt das jetzt so viel:

    1. Vector = Dyn. Array?

    file >> tmp >> ';';
    

    löscht mir das ; von der dementsprechende Zahl und speichert diese in tmp?

    Zahlen.push_back(tmp);
    

    schreibt tmp in das dynamische Array wobei der index immer um 1 erhöht wird?

    vielen Dank!

    1. Korrekt, man kann auch beim Konstruktor die Größe angeben: vector<double> Zahlen(100);

    2. Liest eine Zahl in tmp und dann ein Semikolon. Das Semikolon wird in keine Variable geschrieben.

    3. Vergrößert das Array um 1 und schreibt dann tmp ans Ende.



  • Super dank dir! GLeich mal ausprobieren 🙂



  • also habe jetzt mal den Kram implementiert. Bei der einlese-Funktion kommt folgender Fehler:
    http://www.imagebanana.com/img/6uctkmwn/thumb/Unbenannt.JPG

    sowie beim close: "statement kann die Adresse der überladenen Funktion nicht ausführen".

    Habe folgendes insg. included:
    - iostream
    - fstream
    - vector
    - stdio
    - string

    und dazu halt namespace std.

    Nur wenn ich diesen namespace std. wieder lösche bekomme ich einen fehler bei "ifstream quelle" und zwar: "ifstream wurde in diesem Gültigkeitsbereich nicht definiert" und "expected ';' before quelle" und dann bekomme ich noch einen fehler bei "quelle.open(datei) und zwar: "quelle wurde in diesem Gültigkeitsbereich nicht definiert"

    nochmals danke für die hilfe 🙂


  • Mod

    cin >> tmp >> ':';
    

    Das >> ':' ist Quatsch. Was soll das machen? Ich kann dir nicht einmal sagen, was richtig wäre, weil ich nicht begreife, warum du das dort überhaupt hingeschrieben hast.



  • Oh, Sorry, ich dachte, das ginge so wie bei scanf:

    fscanf(datei, "%f;", Zahl);
    

    Dann würde ich es so schreiben: (diesmal auch getestet)

    #include <fstream>
    #include <vector>
    #include <iostream>
    #include <cstdio>
    
    using namespace std;
    
    int main()
    {
        vector<double> Zahlen;
        double tmp;
        char ch;
        ifstream file("Beispiel.txt");
        while (!file.eof())
        {
            file >> tmp >> ch;
            if(ch != ';') cout << "Fehlerhaftes Dateiformat";
            Zahlen.push_back(tmp);
        }
    }
    


  • ja das hilft danke 🙂

    eine Frage habe ich noch. Und zwar, habe ich ja eine Schleife, wo ich 21 Datein in ein großes Array speichern will - Problem ist nur er ließt immer die gleiche Datei ein, obwohl ich den Dateinname dementsprechend ändere.

    Muss ich eine Datei auch wieder schließen wenn ich diese geöffnet habe - logischerweise ja, nur wenn ich das mache, siehe Bild: http://www.imagebanana.com/view/6uctkmwn/Unbenannt.JPG

    dann bekomme ich ein: "statement kann die Adresse der überlaufenden Funktion nicht auflösen".

    kann mir einer noch helfen bei dem "letzten" Prob 🙂 😃



  • Du hast bei close die () vergessen.
    Was heißt dementsprechend ändern? Rufst du immer die open()-Methode der Datei auf mit dem neuen Dateinamen?



  • Ja ich rufe in der schleife die open funktion immer wieder auf, nur mit anderen Dateinamen.

    So fehler gefunden. Lag daran, dass ich vergessen habe, dass "push_back" bis ins "unendliche" zählt, ich aber immer wieder nur auf den anfang zugegriffen habe.

    Also vielen Dank, allen die mir geholfen haben 🙂


Anmelden zum Antworten