Daten aus Textdatei einlesen



  • Hallo ich hab folgendes Problem. Ich würde gerne eine Textdatei Zeilenweise einlesen. (Pro Zeile ist ein Verzeichnis gespeichert,also so "/user/usr/huber/" usw.)

    Vec Ordner(39,INIT,0);
    
    ifstream ausVerzeichnis("/usr/users/Verzeichnis.txt");
    if (ausVerzeichnis){ 
    		for(int k=0;k<39;k++){
    
    	             ausVerzeichnis>>Ordner(k);
    		     if (ausVerzeichnis.eof()){cout<<"Fehler!! Die eingelesene Datei Verzeichnis.txt enthaelt lediglich"<<k<<"Parameter!!!"<<endl;throw 55;}
    		}
    	    ausVerzeichnis>>Test;
    	    if (!(ausVerzeichnis.eof())){cout<<"Datei Verzeichnis.txt enthaelt zu viele Parameter!!!"<<endl;throw 55;}
    	    ausVerzeichnis.close();}
    else
    	     { cout<<"Alles Scheisse alles Mist - Meldung aus main.cc - keine Verzeichnis.txt gefunden!"<<endl;throw 55; }
    

    Im Vektor Ordner hätte ich dann gerne pro Feld den kompletten Verzeichnispfad. Leider klappt das nicht. Mein Vektor Ordner enthält nur Nullen.

    Hintergedanke ist. Ich hab in mehreren Ordner Dateien die gleich heißen, aber anderen Dateninhalt haben. Ich möchte jetzt eine Schleife machen in der ich zuerst die Pfade der Ordner einelese und pro Durchlauf ändere ich dann den Zugriffspfad für die Parameter. Gibts da evtl. einen leichteren Weg?

    Vielen Dank schon mal.



  • versuch es mal mit getline(ausVerzeichnis,test), damit kannst due Zeilen einlesen.



  • Oder verwende einen Textpuffer, z.B. char buffer[80], und benutze eine read-Funktion.



  • Sorry, aber ich habs immer noch nicht verstanden.
    Meine C++Wissen ist Recht klein und ich frag mich grad(bin das ganze so aus matlab gewohnt) kann ich in einem Vektor Strings stehen haben?



  • naklar du kannst in einem Vector das stehen haben wie du deinen vector definiert hast 😉



  • Also rein theoretisch sollte es ja so gehn

    vector<string> Vektorname;

    allerdings spuckt mein compiler folgenden Fehler aus.
    main.cc:30: error: no match for call to `(std::vector<std::string,
    std::allocatorstd::string >) (int&)'

    da ich an einem etwas größeren Programm sitze und es eigentlich nur um die Funktionalität erweitern soll, dass eben die neuen Daten aus dem neuen Ordner geholt werden wobei ich den Ort über eine Zentrale Datei hole die ich eben einlesen will und Schritt für Schritt abarbeiten will, glaube ich, dass der Fehler weiter unten vergraben liegt.



  • Das geht ja auch so. Hast du alle Includes drin (vector und string)? Wie sieht denn der code genau aus bei dem der Fehler kommt?



  • #include "system.h"
    #include <integrators.h>
    #include <vector>
    #include <string>
    
    using namespace std;
    using namespace integrators;
    
    int main (int argc, char* argv[]) {
    
    vector<string> Ordnernamen;
    char zeile[100];
    
    ifstream datei("/usr/users/Daten/Verzeichnis.txt",ios::in);
    
    	for (int k=0;k<39;k++){
    
    		datei.getline(zeile,100);
    		zeile >>Ordnernamen(k);
    		cout << zeile<<endl;}
    
    	datei.close();
    

    Dann halt eben der Fehler

    "main.cc: In function int main(int, char**)': main.cc:30: error: no match for call to(std::vector<std::string,
    std::allocatorstd::string >) (int&)'"



  • Azador schrieb:

    Also rein theoretisch sollte es ja so gehn

    vector<string> Vektorname;

    allerdings spuckt mein compiler folgenden Fehler aus.
    main.cc:30: error: no match for call to `(std::vector<std::string,
    std::allocatorstd::string >) (int&)'

    [...]

    Dann Zeige doch mal Dein main.cc Zeile 30.

    So, wie Dein Code im Moment aussieht und etwas geändert, kann man es so machen.

    for (int k=0;k<39;k++)
        {
    
            datei.getline(zeile, 100);
            Ordnernamen.push_back(string(zeile));
        }
    

    Aber vielleicht willst Du eher sowas hier?!

    int main (int argc, char* argv[]) 
    {    
        vector<string> Ordnernamen;
        string tempstring;
    
        ifstream datei("/usr/users/Daten/Verzeichnis.txt", ios::in);
    
        while(!datei.eof())
        {
            getline(datei, tempstring);
            Ordnernamen.push_back(tempstring);
        }
    
        datei.close();
    
        //Irgendwelches Getroedel mit dem Vektor anstellen...
    
        return 0;
    }
    


  • Sorry, ich habs bei mir rauskopiert und einige leerzeilen gelöscht.

    main.cc Zeile 30 ist die hier.

    zeile>>Ordner(k);
    

Anmelden zum Antworten