Anhängsel beim Zeicheneinlesen aus Editor Datei



  • Hallo,

    Ich habe eine Datei mit dem Windows Editor erstellt und möchte sie nun einlesen.
    Die Datensätze haben in der Datei das Format test|test|test. Mein Problem ich bekomme zwischen dem t und dem e und auch nach dem s merkwürdige Zeichen, (überall bei jedem Buchstaben), in der Form von tŒìBeŒìBsŒìBtŒìB. Ich bin mir relativ sicher das der Fehler schon während des Einlesens passiert, also nicht erst später im Programm hervorgerufen wird. Ich poste jetzt einfach mal die Einlese Funktion:

    bool ParseVokFile(char* filename, deque<VOKABEL_DATEN>* vok, VOKABEL_STATS* stats)
    {
    	ifstream dat_ein;
    	char zeichen;
    	string deutsch, fremdsprache, zusatz;
    	VOKABEL_DATEN voctemp;
    	int counter = 1;
    
     	dat_ein.open(filename, ios_base::in);
    	if(!dat_ein)
    	{
    		return false;
    	}
    	int i = 1;
    	while(!dat_ein.eof())
    	{
    		dat_ein.get(zeichen);
    
    		if(zeichen == '|')
    		{
    			i++;
    			continue;
    		}
    		if(zeichen == '\n')
    		{
    			i=1;
    			counter++;
    			voctemp.fach = 1;
    			vok->push_back(voctemp);
    			continue;
    		}
    		switch(i)
    		{
    			case 1:
    				strcat(voctemp.fremdsprache, &zeichen);
    				break;
    			case 2:
    				strcat(voctemp.heimatsprache, &zeichen);
    				break;
    			case 3:
    				strcat(voctemp.bemmerkungen, &zeichen);
    				break;
    		}
    	}
    
    	stats->gesamt = counter;
    	stats->fach1 = counter;
    	stats->fach2 = 0;
    	stats->fach3 = 0;
    	stats->fach4 = 0;
    	return true;
    }
    


  • Hat keiner Ahnung?

    Ich überlege gerade ob es nicht auch ein Problem mit dem Zeichensatz sein könnte



  • vielleicht möchtest (SOLLTEST!) du die Daten eher in eine Binärdatei speichern und auslesen.

    entweder mit fixer wortlänge, oder in ein dynamisches Array (du musst halt die wortlänge davor in eine integer speichern, und speicher reservieren!)

    mfG (c)h



  • Der zweite Parameter von strcat muss ein Zeiger auf einen nullterminierten char-Array sein (wie der erste auch). Deine Variable zeichen ist weder ein Array, noch nullterminiert.



  • Und wie kriege ich das hin?



  • Wieso liest du überhaupt so umständlich zeichenweise ein? Ein einfaches

    string s1;
    getline(cin, s1, '|');
    

    im Schleifenrumpf sollte dir eigentlich immer das nächste Wort liefern...

    Mfg, smasher1985



  • Danke mit getline gehts.


Anmelden zum Antworten