txt_parsen; wie?



  • Hallo,
    als Hausaufgaben haben wir aufbekommen, eine txt Datei zu parsen.

    Im Pfad "/home/schueler0815/txt_parser" gibt es eine "parse.txt", wo folgender Inhalt drin steht:

    Dies ist ein nicht zu berücksichtegender Text...
    
    Hier steht nochmehr davon...
    
    parse=/home/schueler0815/
    
    weiterer Text...
    

    Was nun das Ziel der Aufgabe ist, ist eine printf-Ausgabe mit dem Inhalt "/home/schueler0815/"...

    und genau hierbei benötige ich Hilfestellung. Allerdings keinen fertigen Code für copy&paste, da ich es verstehen will/ muss.

    Gedanklich hätte ich gedacht, den gesamten Inhalt in einen string zu kopieren, welcher groß genug ist. Als nächstes in einer mehrfach verschachtelten for-Schleife den Anfang des eigentlichen Textes zu erfassen (Textmarke setzen).

    In etwa so:

    int i, j, k, l, m;
    for (i=0; string[i] != "p"; i++)
    {
        for (j=0; string[j] != "a"; i++)
        {
            for (k=0; string[k] != "r"; i++)
            {
                for (l=0; string[l] != "s"; i++)
                {
                    for (m=0; string[m] != "e"; i++)
                    {
                        // mit strcpy nun den folgenden string kopieren
                    }
                }
            }
        }
    }
    

    Aber irgendwie sieht das total dumm aus, und geht auch nicht...

    Was wäre die eleganteste Lösung vom Gedankenansatz her?

    Danke schonmal 🙂



  • du schreibst dir eine funktion deren deklaration in etwa so aussieht:

    bool startsWith(char *string, char *target);
    

    die dann so aufgerufen wird:

    bool isParseCommand = startsWith(string, "parse");
    

    jetzt musst du die funktion nur auszuprogrammieren.

    // EDIT: setzt voraus dass die variable string immer nur eine zeile der textdatei enthaelt. du solltest also zeilenweise einlesen. sollte man eh immer generell, ist meist besser als kompletten inhalt in einen buffer zu kopieren.



  • Nich gleich so schwer... bin doch noch Anfänger.

    Geht das nicht ganz einfach über Arrays, strcpy, strcat usw?

    Gedanklich will ich gucken, in welcher Zeile "parse" steht. Ab da bis zum Zeilenende soll gelesen werden. Und das für mich verständlich 😉



  • Nach etlichem Brainstorming hab ich nun die Ausgabe der txt-Datei:

    /* Datentypen bestimmen */
        FILE *file; // Filezeiger
        char zeile[500];
    
        if ((file = fopen("parse.txt", "r")) == NULL) // Datei öffnen
        {
            printf("Konnte Datei nicht öffnen...\n");
    
        }
    
        /* Nun die ganzen Operationen mit der Datei */
        while(fgets(zeile, 500, file) != NULL)
        {
            printf("%s \n", zeile);
        }
    
        /* Nun die Datei noch schließen */
        fclose(file);
    
        return 0;
    

    Nun müsste ich doch nur anstelle des printf einen weiteren Parser einbauen, der mir nach dem Wort "parse" sucht. Aber wie?



  • strstr ist dein Freund...

    Für jede Zeile aufrufen, schauen ob der Pointer von strstr nicht null ist, und dann an der geeignetent Stelle, (pointer + 6 für parse=) kopieren.

    Fertig



  • Also wäre das sowas in der Art?

    /* Datentypen bestimmen */ 
         FILE *file; // Filezeiger 
         char zeile[500]; 
    
         if ((file = fopen("parse.txt", "r")) == NULL) // Datei öffnen 
         { 
             printf("Konnte Datei nicht öffnen...\n"); 
    
         } 
    
         /* Nun die ganzen Operationen mit der Datei */ 
         while(fgets(zeile, 500, file) != NULL) 
         { 
             if ((strstr(zeile, "parse=")) != NULL)
             {
                 /* Und hier? :-( */
                 /* So...?
                    strcpy(string, zeile+6);
                 */
             }
             printf("%s \n", zeile); 
         } 
    
         /* Nun die Datei noch schließen */ 
         fclose(file); 
    
         return 0;
    

    Bin halt noch in den Kinderschuhen 😞



  • char   *p;
    
    while ( fgets( zeile, 499, file)){
      if ( (p = strstr( zeile, "parse=")) != NULL)
         printf( "\nda isser: '%s'", p+6);
    }
    


  • genau das isses.

    Dankeschön 🙂


Anmelden zum Antworten