Textdatei auslesen und eine andere Textdatei schreiben?



  • habe ein frage zu meiner Code wenn jemand da helfen kann..
    also das Programm macht alles richtig wenn die datei Verkehrsdaten so aussieht:

    A 192.168.0.84 5910 192.168.0.221 5796 0 user user1
    A 192.168.0.84 5910 192.168.0.221 5796 0 user user1
    A 192.168.0.84 5910 192.168.0.221 5796 0 user user1
    E 192.168.0.84 5910 192.168.0.221 5796 user user1
    A 192.168.0.160 10460 192.168.0.151 10164 0 user3 user2
    E 192.168.0.160 10460 192.168.0.151 10164 user3 user2
    A 192.168.0.221 5806 192.168.0.84 5920 0 user1 user
    E 192.168.0.221 5806 192.168.0.84 5920 user1 user

    aber wenn die datei Verkehrsdaten so aussieht: die drei ersten A zeilen habe die gleiche Inhalt

    A 192.168.0.84 5910 192.168.0.221 5796 0 user user1
    A 192.168.0.221 5796 192.168.0.84 5910 0 user1 user
    A 192.168.0.221 5796 192.168.0.84 5910 0 user1 user
    E 192.168.0.221 5796 192.168.0.84 5910 user1 user
    A 192.168.0.160 10460 192.168.0.151 10164 0 user3 user2
    E 192.168.0.160 10460 192.168.0.151 10164 user3 user2
    A 192.168.0.221 5806 192.168.0.84 5920 0 user1 user
    E 192.168.0.221 5806 192.168.0.84 5920 user1 user

    dann macht folgendes: die zwei ersten A zeilen habe den gleichen Inhalt

    A 192.168.0.84 5910 192.168.0.221 5796 0 user user1
    A 192.168.0.221 5796 192.168.0.84 5910 0 user1 user
    E 192.168.0.221 5796 192.168.0.84 5910 user1 user
    A 192.168.0.160 10460 192.168.0.151 10164 0 user3 user2
    E 192.168.0.160 10460 192.168.0.151 10164 user3 user2
    A 192.168.0.221 5806 192.168.0.84 5920 0 user1 user
    E 192.168.0.221 5806 192.168.0.84 5920 user1 user

    obwohl ich die ip1 mit ip2 und port1 mit port2 im Code vergleiche so

    strcmp(ip2,ip1)!=0 && strcmp(port2,port1)!=0
    

    sieht nicht logisch aus ja??
    aber wenn so es vergleiche

    strcmp(ip2,ip1)==0 && strcmp(port2,port1)==0
    

    werden nur die E zeilen in textdatei Feld reingeschrieben...verstehe ich nicht mehr

    #include <stdio.h> 
    #include <unistd.h> 
    #include <string.h> 
    
    //Variableninitialisierung 
    FILE *file, *file1; 
    char data[256], ip1[32], ip2[32], port1[8], port2[8], IP1[32], 
    char IP2[32], codec[8], name1[8], name2[8], AorE[1]; 
    char Session1[32], Session2[32], Session3[32], Session4[32], Session5[32], Session6[32]; 
    char *ptr; 
    int n; 
    
    int main(void) 
    
    { 
    // open a txt file verkehrsdaten 
    file = fopen("/var/tmp/Verkehrsdaten","r"); 
    n=0; 
    
    while(1){     
    
        while(fgets (data, 256, file)) 
        { 
    //hier werden die Daten zeilenweise aus der verkehrsdaten.txt gelesen 
        ptr = strtok(data," "); 
        sprintf(AorE, "%s", ptr); 
    
            if(strstr(AorE, "A")!=NULL) 
            { 
                ptr = strtok(NULL," "); 
                sprintf(ip1, "%s", ptr); 
    
                ptr = strtok(NULL," "); 
                sprintf(port1, "%s", ptr); 
    
                ptr = strtok(NULL," "); 
                sprintf(ip2, "%s", ptr); 
    
                ptr = strtok(NULL," "); 
                sprintf(port2, "%s", ptr); 
    
                ptr = strtok(NULL," "); 
                sprintf(codec, "%s", ptr); 
    
                ptr = strtok(NULL," "); 
                sprintf(name1, "%s", ptr); 
    
                ptr = strtok(NULL," "); 
                sprintf(name2, "%s", ptr); 
    
    //feld.txt wird hier durch file1 zum schreiben geöffnet 
                file1 = fopen("/var/tmp/feld","a"); 
    
    //beispielhafter Vergleich der Daten (funktioniert so nur für die ersten drei Zeilen!) 
    if(strstr(Session2,port1)==NULL && strstr(Session4,port2)==NULL && strstr(Session5,name1)==NULL && strstr(Session6,name2)==NULL 
    && strcmp(ip2,ip1)!=0 && strcmp(port2,port1)!=0 && strcmp(name2,name1)!=0)
    				{	
    fprintf(file1, "%s %s %s %s %s %s %s %s", AorE, ip1, port1, ip2, port2, codec, name1, name2);
    
    if(n==0){strcpy(Session1,ip1);strcpy(Session2,port1);strcpy(Session3,ip2);strcpy(Session4,port2);n++;}
    if(n==1){strcpy(Session1,ip1);strcpy(Session2,port1);strcpy(Session3,ip2);strcpy(Session4,port2);n--;}
    fclose(file1); 
                    } 
    
     //alternative Behandlung, wenn eine Zeile mit "E" markiert ist 
                    if(strstr(AorE, "E")!=NULL) 
                    { 
                        ptr = strtok(NULL," "); 
                        sprintf(IP1, "%s", ptr); 
    
                        ptr = strtok(NULL," "); 
                        sprintf(port1, "%s", ptr); 
    
                        ptr = strtok(NULL," "); 
                        sprintf(IP2, "%s", ptr); 
    
                        ptr = strtok(NULL," "); 
                        sprintf(port2, "%s", ptr); 
    
                        ptr = strtok(NULL," "); 
                        sprintf(name1, "%s", ptr); 
    
                        ptr = strtok(NULL," "); 
                        sprintf(name2, "%s", ptr); 
    
                        file1 = fopen("/var/tmp/feld","a"); 
                        fprintf(file1, "%s %s %s %s %s %s %s", AorE, IP1, port1, IP2, port2, name1, name2); 
                        fclose(file1); 
    
                    } 
    if(strstr(Session1,ip1)!=NULL && strstr(Session2,port1)!=NULL && strstr(Session3,ip2)!=NULL && strstr(Session4,port2)!=NULL) {n=0;}
    if(strstr(Session1,ip1)!=NULL && strstr(Session2,port1)!=NULL && strstr(Session3,ip2)!=NULL && strstr(Session4,port2)!=NULL) {n=1;}        } 
    
        } 
    fclose(file); 
    }
    


  • hallo leute kann jemand helfen...ein logik Fehler ist Code und ich finde es nicht....

    danke im Voraus



  • azoul schrieb:

    obwohl ich die ip1 mit ip2 und port1 mit port2 im Code vergleiche so
    C/C++ Code:
    strcmp(ip2,ip1)!=0 && strcmp(port2,port1)!=0
    sieht nicht logisch aus ja??
    aber wenn so es vergleiche
    C/C++ Code:
    strcmp(ip2,ip1)==0 && strcmp(port2,port1)==0
    werden nur die E zeilen in textdatei Feld reingeschrieben...verstehe ich nicht mehr

    1 == ( strcmp(ip2,ip1) != 0 ) -> ip1 ist nicht gleich ip2
    1 == ( strcmp(ip2,ip1) == 0 ) -> ip1 ist gleich ip2



  • strcmp schrieb:

    1 == ( strcmp(ip2,ip1) != 0 ) -> ip1 ist nicht gleich ip2
    1 == ( strcmp(ip2,ip1) == 0 ) -> ip1 ist gleich ip2

    das weiß ich auch das so ist aber ih meine warum bekomme mit dem code nicht was ich will wenn ich deisem vergleich mache... du kannst bei dir ausprobieren, wenn du mal zeit hast.?



  • azoul schrieb:

    hallo B.B..
    vielleicht die letzte Frage zu den Code:
    wenn ich das allein in der konsolle ausführe macht er alles wunderbar aber wenn das programm in eindere aufrufe passiert folgendes:
    ...

    Wenn das Programm von einem anderen Programm aufgerufen wird, ändert sich prinzipiell nichts an dem Ablauf.

    azoul schrieb:

    ich habe das Programm in andere programm, das auf dauer läuft(Endlose Schleife), aufgerufen damit es alles automatisch läuft

    Gibst du auch genug Zeit, damit sich das aufgerufene Programm beenden kann ?



  • kann jemand helfen den Fehler in meinem Code zu finden..



  • if(strstr(Session2,port1)==NULL && strstr(Session4,port2)==NULL && strstr(Session5,name1)==NULL && strstr(Session6,name2)==NULL
    && strcmp(ip2,ip1)!=0 && strcmp(port2,port1)!=0 && strcmp(name2,name1)!=0)

    Wo hast du den Wert für Session2 her ?
    Bist du Kumpel von Hasso ?
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-211540-and-postdays-is-0-and-postorder-is-asc-and-start-is-0.html



  • Bing Bang schrieb:

    Bist du Kumpel von Hasso ?

    Der Gedanke kam mir tatsächlich auch schon...



  • habt ihr nichts zu tun ausser die anderen zu beobachten...
    nicht zu fassen das gilt für _matze und Bing Bang



  • meister schrieb:

    habt ihr nichts zu tun ausser die anderen zu beobachten...
    nicht zu fassen das gilt für _matze und Bing Bang

    Hast du nix besseres vor, als mich zu beobachten oder was.
    Nicht zu fassen. 👎

    MuG,
    B.B.


Anmelden zum Antworten