Dateien auslesen und daten in array speichern



  • Hallo, ich habe eine datei xyz.txt. der inhalt sieht z.b. so aus:

    1 0.9878 25
    2 0.9879 26
    . . .
    . . .
    12800 1.0945 19

    also 3 spalten die erste ist ein index. jetzt brauche ich eine schleife, die für jede zeile diese 3 daten in ein array speichert. es soll aber nur ein eindimensioales array werder. die daten sollen also bei jedem schleifendurchgang neu in dieses array geschrieben werden.

    könnt ihr mir bitte helfen

    MfG reichs



  • Hi,

    was willst du jetzt eigentlich genau wissen? Weißt du nicht wie du die einzelnen Werte "aufteilst" um sie in das array zu schreiben? Dann könnte dir vielleicht das helfen

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-144540-and-highlight-is-.html

    Oder hast du Probleme mit der Schleife? Oder wo genau hast du Probleme?



  • Also entweder du speicherst diese Datenzeilen als Text (in einen vector<string>), dann kannst du die Daten per getline() einlesen. Oder du speicherst sie als Zahlenwerte, dann benötigst du ein struct mit drei Elementen, das du über istream::op>> füllen kannst.



  • reichs schrieb:

    es soll aber nur ein eindimensioales array werden.

    Wie meinst du das? Alle Werte hintereinander, oder ein Array pro Datensatz?

    Ansatz:
    Zeilenweise einlesen, am Leerzeichen auftrennen und wegspeichern.



  • ich meinte dass ein array pro datensatz, welches ich aber während der abfrageschleife auswerte und deshalb kann es danach wieder neu beschrieben werden.

    wie kann ich am besten eine zeile auslesen, wie dein ansatz war. mit while(getline(xyz), 30) geht das irgendwie nicht



  • string zeile;
    ifstream datei("daten.txt");
    
    while(getline(datei,zeile))
    {
      verarbeite den Inhalt von zeile
    }
    

    mit while(getline(xyz), 30) geht das irgendwie nicht

    Ja, da mußt du auch darauf achten, wie du die Klammern setzt 😉



  • stimmt, warum bin da nicht selst drauf gekommen??



  • habs jetzt ausprobiert, geht aber nicht. habe bestimmt wieder einen einfachen fehler gemacht.

    #include <iostream>  // wegen cout cin
    #include <fstream>   // wegen Dateistreamobjekt
    #include <string>
    
    using namespace std;
    int main()
    {
    	ifstream fin("datei.txt");
    	char akt_zeile[30];
    
    	while(fin.getline(akt_zeile, 30))
    	{
    		cout << akt_zeile << endl;;
    	}
    	fin.close();
    	system("PAUSE");
    	return 0;
    }
    

    da wird nur die erste zeile der datei ausgegeben



  • Erstmal solltest du doch lieber string's verwenden (ist sicherer als char[]). Und dann schau dir mal im Debugger an, was das Programm eigentlich macht - ich sehe auf jeden Fall keinen gravierenden Fehler in dem Programm.



  • bei string kommt bei mir noch ein extra fehle, dass char nicht in string umgewandelt werden kann



  • 1. WELCHER FEHLER?!! 😡

    2. Benutze getline so wie CStoll es vorschlug, dann sollte es klappen.



  • bei dem quellcode:

    #include <iostream>  // wegen cout cin
    #include <fstream>   // wegen Dateistreamobjekt
    #include <string>
    
    using namespace std;
    int main()
    {
    	ifstream fin("datei.txt");
    	string akt_zeile;
    
    	while(fin.getline(akt_zeile, 30))
    	{
    		cout << akt_zeile << endl;;
    	}
    	fin.close();
    	system("PAUSE");
    	return 0;
    }
    

    kommen folgende fehler (microsoft visual c++ 6):

    --------------------Konfiguration: main - Win32 Debug--------------------
    Kompilierung läuft...
    main.cpp
    C:\Dokumente und Einstellungen\praktikum\Eigene Dateien\ausschlagerkennung\main.cpp(11) : error C2664: 'class std::basic_istream<char,struct std::char_traits<char> > &__thiscall std::basic_istream<char,struct std::char_traits<char> >::getline(char *
    ,int)' : Konvertierung des Parameters 1 von 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' in 'char *' nicht moeglich
    Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
    C:\Dokumente und Einstellungen\praktikum\Eigene Dateien\ausschlagerkennung\main.cpp(11) : fatal error C1903: Weiterverarbeitung nach vorhergehendem Fehler nicht moeglich; Kompilierung wird abgebrochen.
    Fehler beim Ausführen von cl.exe.

    main.exe - 2 Fehler, 0 Warnung(en)



  • Versuchs mal so

    #include <iostream>  // wegen cout cin 
    #include <fstream>   // wegen Dateistreamobjekt 
    #include <string> 
    
    using namespace std; 
    int main() 
    { 
        ifstream fin("datei.txt"); 
        string akt_zeile; 
    
        while(getline(fin, akt_zeile)) 
        { 
            cout << akt_zeile << endl;; 
        } 
        fin.close(); 
        system("PAUSE"); 
        return 0; 
    }
    


  • reichs_gast schrieb:

    fin.getline(akt_zeile, 30)
    

    wlkikiv: Ich sagte "getline(fin,akt_zeile)" 😉
    (die Memberfunktion arbeitet tatsächlich nur mit char-Arrays, für das Einlesen in Strings gibt es die globale Funktion getline())



  • Ich les ständig system("PAUSE"), dabei gibt es doch so viel bessere Alternativen.



  • @reichs:
    Du hättest beim Lesen meines Beitrags nicht nach 1. aufhören sollen, dann hätte sich der Rest erledigt 🙄


Anmelden zum Antworten