CString vergleichen



  • hallo,
    ich möchte in meinem programm einen einzugebenden string mit einem char aus einer datei vergleichen.ausgabe ist ein CString und da steht eine zahl drin.
    die andere zahl steht in der "Schlüssel.txt".ich hab das so gemacht, dass die 2
    zahlen gleich sind, um zu testen.
    aber irgendwie geht er immer in die darunterstehende if-anweisung.

    FILE * Dest;
    char buffer[500];
    bool gefunden=FALSE;
    Dest=fopen("Schlüssel.txt","r");			
    while(fgets(buffer,500,Dest)!=NULL)
    	{
    		if(ausgabe.CompareNoCase(buffer)==0)
    			{
    				gefunden=TRUE;
    				break;
    			}
    	}
    if(gefunden==FALSE)
          {
    	      AfxMessageBox("Keine Übereinstimmung!",MB_OK,0);
    	}
    fclose(Dest);
    

    warum macht er das ? 😡
    mfg
    fevernova



  • Hi,

    wie sieht denn deine schlüssel.txt aus ?

    Wenn da z.B. der string mit return beendet wurde wird das mitverglichen (häufiger fehler) !

    Ich hab mal ein Paar Zeilen getippt das funktioniert - die eizelnen Objecte & Methoden solltest du dir in der hilfe ansehen :

    CString BenutzerString = "12345"; // Die eingabe des Benutzers
     CString DateiString; // Hier kommt die Zahl aus der Datei rein
     CStdioFile Datei; // Die Datei
    
    	Datei.Open("schlüssel.txt", CFile::modeRead);	// Datei öffnen zum Lesen
    	Datei.ReadString(DateiString);	// String einlesen (Liest nur bis Zeilenende (\n) oder (\0))
    
    	DateiString.Trim(); // Eventulle andere Sonderzeichen entfenen (z.b. Tabulator) (\t))
    
        if(DateiString.CompareNoCase(BenutzerString) != 0) // Strings vergleichen
    	{
    		AfxMessageBox("Keine übereinstimmung !");
    	} else AfxMessageBox("Übereinstimmung !");
    

    P.S.
    Es fehlen natürlich noch wichtige Dinge wie überprüfung ob die Datei existiert und ob gelesen wurde etc. (bevor ich wieder geschlagen werde)



  • hallo,
    danke erstmal für den lösungsansatz.
    jedoch liest er ja nur die erste zeile ein.
    ich brauch aber was für die ganze textdatei !
    mfg
    fevernova 🕶



  • Bau doch eine Schleife drum.



  • wie kann ich das am besten lösen ?
    ReadString liest ja nur bis zeilenende.



  • Guck mal, das sagt die MSDN dazu:

    The CFile and CStdioFile classes may throw a CFileException when certain error conditions occur; however, these classes do not throw a CFileException when the end of file is reached. If an application using the CFile or CStdioFile class needs to check for the end-of-file condition when reading from a file, the return values from the Read() and ReadString() member functions should be checked.

    CFile::Read returns the actual number of bytes read. If this number is less than the bytes requested, then the end of file has been reached.

    CStdioFile::ReadString returns a NULL pointer when the end of file has been reached.



  • Vergelich jewde Zeile einzeln :

    CString BenutzerString = "12345"; // Die eingabe des Benutzers
     CString DateiString; // Hier kommt die Zahl aus der Datei rein
    
     CStdioFile Datei; // Die Datei
    
    	Datei.Open("schlüssel.txt", CFile::modeRead);	// Datei öffnen zum Lesen
    
    	while(NULL != Datei.ReadString(DateiString))	// Solange lesen bis Dateiende
    	{
    		DateiString.Trim(); // Eventulle andere Sonderzeichen entfenen (z.b. Tabulator) (\t))
    
        		if(DateiString.CompareNoCase(BenutzerString) != 0) // Strings vergleichen
    		{
    			AfxMessageBox("Keine übereinstimmung !");
    		} else AfxMessageBox("Übereinstimmung !");
    
    	}
    

    Vergleich Alle Zeilen in einem String

    CString BenutzerString = "12345"; // Die eingabe des Benutzers
     CString DateiString; // Hier kommt die Zahl aus der Datei rein
     CString AlleZeilen // Komplette datei einlesen
     CStdioFile Datei; // Die Datei
    
    	Datei.Open("schlüssel.txt", CFile::modeRead);	// Datei öffnen zum Lesen
    
    	while(NULL != Datei.ReadString(DateiString))	// Solange lesen bis Dateiende
    	{
    		DateiString.Trim(); // Eventulle andere Sonderzeichen entfenen (z.b. Tabulator) (\t))
    		AlleZeile.Append(DateiString.GetString()) // anhängen
    	}
    
    	if(AlleZeilen.CompareNoCase(BenutzerString) != 0) // Strings vergleichen
    	{
    		AfxMessageBox("Keine übereinstimmung !");
    	} else AfxMessageBox("Übereinstimmung !");
    


  • habs anders gelöst mit fscanf.
    da wird CR weggelassen.😮
    mfg
    fevernova


Anmelden zum Antworten