Datei auslesen und vergleichen



  • 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



  • oder gleich CFile+CArchive
    Seriennummerklasse von CObjekt abgeleitet mit Serialize
    naja vielleicht n bissi zu viel für son paar zahlen

    die ifstream variante is ziemlich vollständig bezogen auf die funktionalität die du brauchst


Anmelden zum Antworten