Problem mit Maploader



  • Du brauchst die Mapnamen überhaupt nicht zu speichern. Weshalb auch?

    Und deine Zahl-String-Umwandlung funktioniert für Zahlen bis 50 problemlos folgendermaßen:

    // i ist ein hochlaufender Integer
    "map" + ('0' + (i / 10) ) + ('0' + (i % 10) ) + ".txt";
    


  • Warum brauche ich keine mapList?

    Dann weiß man ja nicht, wieviele maps man laden muss...



  • Ich möchte einfach nur per ifstream map01.txt bis map50.txt hintereinander öffnen und jeweils die Datei in ein map-array speichern.

    Nur ifstream nimmt keine strings an.



  • string::c_str().

    Langsam komm ich mir verarscht vor. Du weißt nicht, wie viele Maps du laden sollst? Einen Post drunter schreibst du, dass es 50 sind.



  • Sorry daran hab ich nicht gedacht.

    Mal ausprobieren...



  • Soweit bin ich grad:

    class Field
    {
    	string curMap;
    	char maps[50][15][26];
    public:
    	Field();
    	~Field();
    };
    
    Field::Field()
    {
    	// Load maps
    	string map("map");
    	for(short c = 0; c < 50; c++)
    	{
    		curMap = map + static_cast<char>('0' + c + 1) + ".txt";
    	}
    }
    

    Jetzt möchte ich aus curMap char* machen und dann per ifstream öffnen und in char maps[50][15][26] laden.

    (Das sind doch 50 arrays aus 15 Zeilen und 26 Elementen, wenn ich das richtig verstanden habe?)



  • ccurMap = curMap.c_str();
    

    Funzt nicht:

    error C2440: '=' : 'const char *' kann nicht in 'char' konvertiert werden

    ccurMap ist vom Typ char.



  • Meierei schrieb:

    ccurMap ist vom Typ char.

    ja dann mach ein const char* drauß^^



  • Hallo

    wie soll auch ein Pointer auf eine Zeichenkette an einen char übergeben werden?
    Du sollst das ja auch so einsetzen :

    std::string filename = "test.txt";
    std::ifstream file(filename.c_str());
    

    bis bald
    akari



  • Yay. Danke ich werde experimentieren.



  • Was stimmt nun hier wieder nicht 😞

    class Field
    {
    	string curMap;
    	char maps[50][15][26];
    public:
    	Field();
    	~Field();
    };
    
    Field::Field()
    {
    	// Load maps
    	string map("map");
    	for(short i = 0; i < 50; i++)
    	{
    		curMap = map + static_cast<char>('0' + i + 1) + ".txt";
    		ifstream mapFile(curMap.c_str());
    
    		for(short r = 0; r < 15; r++)
    			mapFile.getline(&maps[i][r][], r);
    	}
    }
    

    error C2059: Syntaxfehler : ']'

    Wenn man das Element nicht angibt, wird einfach die ganze Zeile reingeschrieben, oder? Oder muss ich das manuell per get machen und für die Elemente auch noch ne Schleife?



  • Jetzt kommt zumindest kein Fehler mehr:

    Field::Field()
    {
    	// Load maps
    	string map("map");
    	// For each map
    	for(short i = 0; i < 50; i++)
    	{
    		curMap = map + static_cast<char>('0' + i + 1) + ".txt";
    		ifstream mapFile(curMap.c_str());
    
    		// For each row
    		for(short r = 0; r < 15; r++)
    		{
    			// For each element
    			for(short e = 0; e < 26; e++)
    				mapFile.get(&maps[i][r][e], e);
    		}
    	}
    }
    

    Ist das so korrekt?



  • Nein. Warum nicht einfach so?

    for(int i = 0; i < 50; ++i)
        ifstream in("map" + ('0' + i / 10) + ('0' + i % 10) + ".txt");
    

    Du brauchst nicht hunderttausend Variablen, die immer denselben Wert haben.



  • Ok.

    Field::Field()
    {
    	// Load maps - For each map
    	for(short i = 0; i < 50; i++)
    	{
    		ifstream mapFile("map" + ('0' + i / 10) + ('0' + i % 10) + ".txt");
    
    		if(mapFile)
    			cout << curMap << " geladen!" << endl;
    		else
    			cout << curMap << " nicht geladen!" << endl;
    
    		// For each row
    		for(short r = 0; r < 15; r++)
    		{
    			// For each element
    			for(short e = 0; e < 26; e++)
    				mapFile.get(&maps[i][r][e], e);
    		}
    	}
    }
    

    error C2110: Zwei Zeiger koennen nicht addiert werden



  • Das war auch nicht wirklich das Wahre:

    curMap = map + static_cast<char>('0' + i + 1) + ".txt";
    

    Es kommt dann nämlich mapK.txt, mapL.txt und so weiter raus...



  • Hallo

    das muß auch so aussehen

    #include <sstream>
    #include <iomanip>
    ..
      for(int i = 0; i < 50; ++i)
      {
        std::stringstream filename;
        filename << "map";
        filename.width(2);
        filename.fill('0');
        filename << i << ".txt";
        std::ifstream in(filename.str().c_str());
        ... // Mache etwas wenn Datei durch in geöffnet wurde
      }
    

    bis bald
    akari



  • Danke ich werde es sofort ausprobieren.

    Leider sind meine Kenntnisse mit stringstreams und Manipulatoren sehr begrenzt.



  • Meierei schrieb:

    error C2110: Zwei Zeiger koennen nicht addiert werden

    Mein Fehler.

    Das war auch nicht wirklich das Wahre:

    Doch, das ist das Wahre für einstellige Zahlen. Wies mit zweistelligen geht, hab ich auch schon gezeigt.

    Nimm am besten den Snippet von akari, ich hab keinen Bock mehr.



  • 😞

    Hmm. Habe nur noch Probleme beim Einlesen.

    Field::Field() 
    { 
        // Load maps
    	// For each map
        for(short i = 0; i < 1; i++) 
        { 
    		stringstream curMap;
    		curMap << "map";
    		curMap.width(2); 
            curMap.fill('0');
    		curMap << i + 1 << ".txt";
    
    		ifstream mapFile(curMap.str().c_str()); 
    		mapFile.
    
    		if(mapFile) 
                cout << curMap.str() << " geladen!" << endl; 
            else 
                cout << curMap.str() << " nicht geladen!" << endl; 
    
            // For each row 
            for(short r = 0; r < 15; r++) 
            { 
                // For each element 
                for(short e = 0; e < 26; e++) 
                    mapFile.get(&maps[i][r][e], e); 
    			mapFile.
            } 
        } 
    }
    

    Und zum Zeichnen:

    void Field::drawMap()
    {
    	for(short r = 0; r < 15; r++)
    	{
    		for(short e = 0; e < 26; e++)
    		{
    			cout << maps[0][r][e] << "  ";
    		}
    	}
    	cout << "Drawed" << endl;
    }
    

    Problem beim einlesen. Wie wechsle ich zur nächsten Zeile?

    (Die Textdatei besteht aus 15 Zeilen mit jeweils 26 Zeichen)



  • Kann mir hier bitte jemand helfen.


Anmelden zum Antworten