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