000
08.06.2004, 15:04 Uhr
~ruuuuudi
Gast
|
hi, habe ein problem mit einem programm in dem 2 while-schleifen vorkommen. mein programm soll eine datei auslesen (z.b. Test.tst), diese datei von datenmüll entfernen und in out.txt speichern. In out.txt stehen jetzt Sachen wie z.B:
C++: |
<test> 345 Programmer peter = 123 hans = 234 ...
|
Weiterhin soll während des Programmes eine zweite datei (z.b. bat.txt) eingelesen werden, die z.B. so aussieht:
C++: |
222 tester karl = 334 345 Programmer hans = 000 555 regisseur frauke = 7 ...
|
das ganze sieht jetzt vielleicht etwas verwirrend aus, ist aber im prinzip einfach zu verstehen. Das Programm solll wie gesagt anfangs den Datenmüll aus test.tst entfernen und in out.txt speichern (nicht den Datenmüll, sondern den Rest) Anschließend wird überprüft ob out.txt datendätze besitzt, wenn ja, dann sollen die einzelnen Zeilen von out.txt überprüft und gespalten werden. dafür habe ich zwei funktionen, eine zum splitten, und eine um die führenden whitespaces zu entfernen. das klappt auch soweit perfekt. So: jetzt mein Problem: Also nachdem die test.txt eingelesen wurde (zeilenweise) wird die bat.txt zeilenweise überprüft ob sich da z.b. eine Gruppennummer 345 mit dem Namen Programmer befindet. Wenn ja, dann soll die nächste Zeile überprüft werden, wieder gesplittet und die quasi veränderten werte sollen in die bat.txt eingetragen werden. Bsp. wenn vorher da stand hans = 234 soll danach in der Zeile Hans = 000 stehen, da hans ja der Gruppennummer und der gruppe angehört. Bisher habe ich da etwa so gelöst: Habe es kommentiert um nicht den ganzen Code zu posten, ist nämlich ganz schön long
C++: |
batfile = fopen("bat.txt","w"); //sieht wie oben aus testfile = fopen("test.tst","r"); //sieht wie oben aus out = fopen("out.txt","w"); // hier ist alles ohne datenmüll drin
//dann fange ich an: while ( fgets (in, MAX_LEN, test) != NULL) { //datenmüllbeseitigung //alles bei dem int read =0 ist, fliegt jetzt raus
if(read!=0) { if (strstr (in,"<test>") != NULL) { //um sich die gruppe zu merken und die Zeile <test> 345 Programmer zu splitten und die einzelteile zu merken } else { // wenn nicht <test> drin ist, dann splitte die Zeile und speichere die Werte in par und wer.(Bsp.: par = Hans wer = 234) }
/*jetzt kommt glaube mein problem: Nachdem ich nun parameter und wert und gruppe habe, will ich die bat.txt zeilenweise überprüfen ob dort die werte vorkommen und zwar so:*/ while(fgets(buffer, MAX_LEN, batfile) != NULL) { if (( strstr (buffer,groupname) != NULL) && ( strstr (buffer,grnumber) !=NULL)) { /*Quasi wenn der gruppenname, der zuvor gespeichert wurde und die gruppennummer übereinstimmen und in der bat-datei gefunden wurden, sollen jetzt ab da die werte geändert werden. */ printf(buffer); .......... //hier stehen jetzt alle zeilen, die den gruppennamen und die gruppennummer beinhalten. }
|
So, aber wie kann ich jetzt weiter machen? Oder bin ich schon auf dem falschen dampfer??? bei mir wird bis hierher die zweite while-schleife nur einmal durchlaufen. Im prinzip müsste die ja mindestens so oft durchlaufen werden, wie die test.tst Zeilen hat oder nicht? Ach ich weiß nicht mehr weiter, hoffe jemand kann mir weiter helfen insofern mein problem überhaupt verstanden wurde. *SCHNIEF* |