Datei auslesen und vergleichen



  • hallo leute,
    ich hab ein problem.ich möchte eine textdatei auslesen,in der seriennummern drinstehen,die ich einfügen lasse.
    die seriennummern stehen im CString Strhelp.

    fseek(Dest,0,SEEK_SET);					//setzt auf start
    while(fgets(snrtext,17,Dest)!=NULL)			//vergleich inhalt textdatei mit scanner-id
    {
    	if(Strhelp.CompareNoCase(snrtext)==0)	//wenn gleich
    	{
    	}
    	else							//wenn ungleich
    	{
    		gleich=TRUE;
    		break;
    	}
    }
    if(gleich==TRUE)						//wenn ungleich
    {
    	fseek(Dest,0,SEEK_END);				//geht an dateiende
    	Strhelp+='\n';
    	fputs(Strhelp,Dest);				//schreibt an dateiende
    }
    fclose(Dest);
    

    problem ist,dass der vergleich ungleich ist,obwohl die gleiche seriennummer schon in der textdatei steht.

    hilfe
    mfg
    fevernova



  • Was ist CString?

    Unterscheidet sich die Seriennummer in irgend einer Art und Weise? Irgendwelche
    Buchstaben gross statt klein geschrieben (oder umgekehrt)? Ein Zeichen zuviel
    gelesen oder ein Zeichen zuviel im Vergleichstring?

    Schau dir die Zeichenketten nochmal an.

    mfg
    v R



  • mach aus snrtext n cstring und vergleich die beiden mal



  • also die seriennummern beinhalten buchstaben und zahlen.
    die seriennummer ist immer gleichlang und steht in einem CString Strhelp,
    z.B."00200000032360".



  • hast du meinen vorschlag ausprobiert?



  • @ Sovok:
    wo soll ich das machen und wie ?



  • if(Strhelp.CompareNoCase(CString(snrtext))==0)

    was is snrtext überhaupt für n datentyp?



  • also irgendwie geht er gar nicht in dei while-schleife.
    ich geb dir mal den ganzen code:

    CComboBox * combo;											
    combo = (CComboBox *) GetDlgItem(IDC_COMBO_Regist_COMBO);	
    
    	int iK=0;
    	long AsciiMode=0;
    	char cDeviceId[8] = "";
    	char snrtext[17] ="";
    	short sHelp=0;
    	CString Strhelp="";
    	CString Help="";
    	CString Pfad="Seriennummer.txt";
    	bool gleich=FALSE;
    
    	FILE * Dest;
    	Dest = fopen(Pfad,"a+");
    	csp2Init(combo->GetCurSel());
    	csp2ReadData();
    	AsciiMode = PARAM_ON;
    
    	if(AsciiMode = PARAM_ON)  
    		{  
    			csp2GetDeviceId(cDeviceId,8);  
    			for(iK=0;iK<8;iK++)  
    			    {
    				if(cDeviceId[iK]<0)
    					{
    						sHelp=256+ cDeviceId[iK];
    						Help.Format("%02X",sHelp);
    					}
    				else
    					{
    						Help.Format("%02X",cDeviceId[iK]);
    					}
    				Strhelp+=Help;
    			     }
    		}
    	fseek(Dest,0,SEEK_SET);						//setzt auf start
    	while(fgets(snrtext,17,Dest)==NULL)				//vergleich inhalt textdatei mit scanner-id
    		{
    			if(Strhelp.CompareNoCase(CString(snrtext))==0)	//wenn gleich
    				{
    					AfxMessageBox("Dieser Scanner wurde bereits eingelesen!",MB_OK,0);
    				}
    			else								//wenn ungleich
    				{
    					gleich=TRUE;
    					break;
    				}
    		}
    	if(gleich==TRUE)								//wenn ungleich
    		{
    			fseek(Dest,0,SEEK_END);					//geht an dateiende
    			Strhelp+='\n';
    			fputs(Strhelp,Dest);					//schreibt an dateiende
    		}
    	fclose(Dest);
    
    	CHinweis formularCHinweis;
    	formularCHinweis.DoModal();
    


  • fevernova schrieb:

    also irgendwie geht er gar nicht in dei while-schleife.
    ich geb dir mal den ganzen code:

    AsciiMode = PARAM_ON;
    
    	if(AsciiMode = PARAM_ON)  //== fehlt
    

    Und die abfrage ist nicht sehr sinnvoll 🙄

    Devil



  • hast recht,aber das ist egal.dient jka nur zum auslesen der seriennummer!
    der zweite teil ist ausschlaggebend.



  • Dann schau bitte mal in die MSDN was CString::CompareNoCase zurückgibt...

    Devil



  • rückgabe ist ein int,
    wenn gleich,dann '0'



  • was steht denn in dem CString(snrtext) ?



  • in snrtext steht die erste seriennummer der textdatei.
    jetzt ist folgendes problem.wenn jetzt eine seriennummer hinzukommen soll,vergleicht er ja nur den ersten eintrag.und wenn der unterschiedlich zur neuen
    nummer ist,fügt er diese neu hinzu.

    wie durchsucht man die ganze datei ???



  • bei ifstream könnt ich dir das auf die schnelle sagen... bei file leider ned
    schau dich mal bei den faqs um



  • Hi,

    Du kannst eine Schleife einbauen.
    Solange das Dateiende nicht erreicht ist,
    soll die Nummer überprüft werden.
    Ist das Ende erreicht und die Nummer nicht
    vorhanden, fügst du die neue Nummer am Ende ein.

    mfg tomb



  • @ tomb,die idee hab ich auch.
    aber das umsetzen ?
    wie komm ich ans dateiende ?



  • @ tomb,die idee hab ich auch.
    aber das umsetzen ?
    wie komm ich ans dateiende ?



  • ifstream file("blah.txt")
    if(file.is_good())
    while(!file.eof())//eof == end of file
    file.getline...



  • Wenn du Windows Klassen verwendest,
    warum nimmst du nicht CFile oder ein einfaches FILE-HANDLE
    und liest in einer Schleife die Seriennummer mittels
    einer Seriennummer-Struktur aus.
    Du würdest dir viel ärger ersparen.
    Die Anleitung zu CFile steht in de MSDN.

    mfg tomb


Anmelden zum Antworten