Textdatei richtig einlesen & auswerten? (fStream)



  • Heyho,
    mein Problem gestaltet sich mit fStream.
    Ich kann die Datei öffnen, allerdings nicht auslesen, und in einen char* packen.

    int Setup(HMODULE hDll)
    {
    	char myPath[MAX_PATH];
    	GetModuleFileNameA(hDll, myPath, 512);
    	for(int i = strlen(myPath); i > 0; i--) 
    	{
    		if(myPath[i] == '\\') 
    		{ 
    			myPath[i+1] = 0; 
    			break; 
    		} 
    	}
    	sprintf_s(IniPath,sizeof(IniPath),"%\sConfig.ini",myPath);
    
    	std::fstream IniFile;
    
    	IniFile.open(IniPath);
    	if(IniFile.good())
    	{
    		MessageBoxA(0,"Datei gefunden & offen","Yai",MB_OK);
    		char *Content;
    
    		sprintf_s(Content,sizeof(Content)+1,"%s",IniFile.rdbuf()); //< mag er nicht, auch IniFile.read(Content,sizeof(Content))...
    		MessageBoxA(0,Content,"Läuft",MB_OK);
    
    		IniFile.close();
    	}else
    	{
    		MessageBoxA(0,"Something wrong","Hmpf",MB_OK);
    	}
    
    	return 1;
    }
    

    Nun, nachdem ich die Datei ausgelesen habe, möchte ich vorhandene Eingaben auswerten & verarbeiten.
    Beispiel: Haus=122 Haus=868 Haus=68514 usw...
    Das Format in der .ini soll ziemlich egal sein, außer das Haus= vorgeben ist und ich den Integer dahinter auslesen & in std::list oder einem struct speichern möchte.
    Hat vielleicht einer eine Idee?
    Ahja, IDE: VS10 & kein .NET


  • Mod

    Und warum nicht GetPrivateProfileInt?



  • Weil GetPrivateProfileInt das ganze zu sehr einschränkt und man dann nur einmal einen Wert eingeben kann.
    (Ini datei muss so aussehen nach meinem wissen)

    [Bla]
    Haus=122
    Haus=123
    Haus=124

    GetPrivateProfileInt gibt mir dann die 122 aus, oder 124, bin mir nicht mehr sicher.

    Also würde es nur so funktionieren:
    [Bla]
    Haus1=111
    Haus2=112
    Haus3=114

    Und das ist möchte ich ja nicht 😃

    Als Bsp soll es so aussehen können:
    Haus=111 Haus=112 Haus=142

    Und dann in meiner std::list die 111,112,142 eintragen (aber das ist ja das kleinste, nachdem ich weiß wie ich erstmal dahin komme)



  • Das kann auch nix werden weil du einfach nur eine Variable auf als Zeiger definierst, der Zeiger zeigt aber auf keinen Speicher den du dir geholt hast. Du musst dir schon erst mal die Größe des Files holen und dann Speicher reservieren und dann kannst du mit sprintf_s drauf schreiben.

    Ich würde das gante aber an deiner stelle eher mit CStdioFile und ReadString macghen, dann kannst du zeilenweise das File durchgehen und den CString dann mit Mid() entsprechend ausschneiden, das ergebnis dann mit atoi konvertieren und fertig hast du deine zahlen. sind dann sicher nur paar zeilen und du brauchst dich nicht um spiecherreservierung und freigaben und sonst was zu kümmern wenn du schon kein GetPrivateProfileInt benutzen willst.


Anmelden zum Antworten