Textdatei verfolgen



  • Hallo Leute!

    Hab ein Problem mit einem kleinen Programm.
    Die Idee des Programmes ist, dass es die pausenlos den Inhalt einer Textdatei verfolgt und sobald bestimmte Wörter auftauchen soll es eine Aktion ausführen.
    Leider funktioniert das ganze mit dem vergleichen nicht so wie es soll. Habe auch schon mit strcmp versucht aber das hat auch nicht richtig geklappt...
    Zum Testen des Programmes habe ich einfach mal mit Printf ne ausgabe erzeugt falls die if aktion zutrifft, wenn das Programm fertig ist sollte es unter linux laufen und andere Programme starten...

    Hofffe ihr könnt mir weiterhelfen, bei Google habe ich die letzten Tage wie blöd gesucht aber hab einfach nichts anständiges gefunden. 😡

    Hier mal den Code... (Bin noch ein zimlicher C++ neuling.... 😉 )

    #include <cstdlib>
    #include <stdio.h>
    #include <string.h>
    
    int einlesen()
    {
        FILE *fz;
        char buf[100];
    
        fz = fopen("datei.txt","r");
    
        if (fz == NULL)
        printf("Error! \n");
    
        while (fgets(buf,sizeof(buf),fz))
        {
        puts(buf);
    
        if(buf == "hallo"))
             printf("HALLO!");
    
        if(buf == "test")
             printf("TEST!");
    
        if(buf == "123")
             printf("456");   
        } 
    
        fclose(fz);
    
        return 0;
    
    }
    
    int main(int argc, char *argv[])
    {
        const int repeat = 0; 
    
        while (repeat != 3)                                                              
        einlesen();
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    


  • Sehe ich das richtig: Du öffnest die Datei, liest sie zeilenweise und prüfst anschließend jede Zeile, ob er identisch zu "hallo", "test" oder "123" ist, korrekt? Eventuell solltest du statt des Pointer-Vergleichs strcmp oder strstr (gibt zurück, ob ein String im anderen enthalten ist) verwenden.

    PS: Dir ist hoffentlich klar, daß du dort eine Endlosschleife fabriziert hast.



  • Hey CStoll

    Ja genau so sollte das Programm funktionieren!

    strcmp hab ich schon versucht, aber das hat leider nicht richtig funnktioniert

    if(strcmp(buf,"hallo"))
             printf("HALLO!");
    

    Die sache mit strstr muss ich mal versuchen, danke für den tip werds gleich mal testen...

    Ja das mit der Endlosschleife ist mir klar, das programm sollte sich auch die ganze zeit widerholen und darauf warten das was passiert, da sich die Textdatei ständig verändert...



  • Du brauchst "if(!strcmp(buf,"hallo"))..." - strcmp liefert 0 (==false), wenn die Strings übereinstimmen.



  • Ja genau stimmt! Habs auf beide arten (mit und ohne !) versucht hat aber leider nicht funktioniert...

    Mit strstr könnte es funktionieren, bin gerade am testen 🙂



  • Oke die sache läuft 😃
    Vielen Dank für deine schnelle Hilfe CStoll! 🙂

    Hier noch den Code fals irgendwer mal ein ähnliches Problem hat...

    #include <cstdlib>
    #include <stdio.h>
    #include <string.h>
    
    int einlesen()
    {
        FILE *fz;
        char buf[100]; 
    
        fz = fopen("../txt/speicher.txt","r");
    
        if (fz == NULL)
        printf("Error! \n");
    
        while (fgets(buf,sizeof(buf),fz))
        {
        puts(buf);
    
        if(strstr(buf,"hallo"))
             printf("HALLO! \a");
    
        if(strstr(buf,"test"))
             printf("TEST!");
    
        if(strstr(buf,"123"))
             printf("456");   
        } 
    
        fclose(fz);
        return 0;
    
    }
    
    int main(int argc, char *argv[])
    {
        const int repeat = 0; 
    
        while (repeat != 3)                                                              // Endloss Schleife
        einlesen();
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

Anmelden zum Antworten