In C , Fehler beim gleiche Wörter suchen

Sergei

Mitglied
Guten Morgen cwriter,
danke für die Antwort
Du speicherst die einzelnen Zeilen in einem Buffer pro Person.
Natürlich für mich wäre 1 Lösung lieber. Wie kann man einzelnen Zeilen in einem Buffer speichern... Ich bitte um Hilfe, weil da ich verstehe nichts, ich habe auch im Internet gesucht und nichts gefunden, vielleicht bin ich im Wald und sehe nicht die Bäume... :mad:
:confused::(
 

cwriter

Erfahrenes Mitglied
Wie kann man einzelnen Zeilen in einem Buffer speichern...
Indem du die Buffer für jede Zeile in ein Struct packst und dieses dann in einen Array. Diesen Array kannst du global halten oder als Parameter übergeben.

(Ich sehe schon, dass du Code willst, aber ich fordere jetzt mal ein bisschen Initiative).

Gruss
cwriter
 

Sergei

Mitglied
Guten Tag
ich sehe meine Fehler nicht, kann mir jemand helfen :) ?


Es gibt ein Text wo stehen die Arbeitszeiten von den PostMitarbeitern, ein Arbeiter soll am Tag 2 Wagen Briefe oder Zeitschrifften verteilen
wenn Arbeiter kommt tragt er die Zeit in Computer ein,
wenn Arbeiter einen Wagen abholt tragt er die Zeit in Computer ein,
wenn Arbeiter den Wagen zuruckgegeben hat tragt er die Zeit in Computer ein.
wenn Arbeiter ausversehen mehr mals die Zeit eingetragen hat soll diese Zeiten als fehlermeldung anzeigt werden

diese programme funktionniert, macht das was ich will, aber ich wollte das in die Funktion reinpacken damit ich dann das aufrufe und die Zeiten von
andere Mitarbeiter rausnehmen kann
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int InZeitUm(char * zeit);
char * ZeitVonZeileCut(const char * text, int beg, int end);

int InZeitUm(char * zeit) { // Die Methode umwandelt die geschinttene Zeit in integer und dann in Millisekunde

    char * StundeChar = ZeitVonZeileCut(zeit, 0, 2);
    int stundeInt = atoi(StundeChar);
    int st = stundeInt * 60 * 60 * 1000;
    free(StundeChar);

    char * MinuteChar = ZeitVonZeileCut(zeit, 3, 5);
    int minuteInt = atoi(MinuteChar);
    int mi = minuteInt * 60 * 1000;
    free(MinuteChar);

    char * SekundeChar = ZeitVonZeileCut(zeit, 6, 8);
    int sekInt = atoi(SekundeChar);
    int se = sekInt * 1000;
    free(SekundeChar);

    char * MiSekChar = ZeitVonZeileCut(zeit, 9, 12);
    int msekInt = atoi(MiSekChar);
    free(MiSekChar);

    int gesZeitInInt = st + mi + se + msekInt;
    return gesZeitInInt;
}

char * ZeitVonZeileCut(const char * text, int beg, int end) {// diese Methode Schneidet die Zeit raus
    int i;
    char *ZeitChar = 0;
    int len = end - beg;
    if (text)
        if (text + beg)
            if (0 < len)
                if ((ZeitChar = (char *) malloc(1 + len))) {
                    for (i = beg; text[i] != '\0' && i < end; i++)
                        ZeitChar[i - beg] = text[i];
                    ZeitChar[i - beg] = '\0';
                }
    return ZeitChar;
}

int main(int argc, char** argv) {

    FILE *pFile;
    int leseAusZeile = 170;
    char zeile1[leseAusZeile];
    char zeileV_SW1[leseAusZeile];

    char filename[50] = "/home/alt/2017-Projekte/LukasPost1";

    const char SuchWort_1a_1[80] = "Lukas Maly gekommen";
    const char SuchWort_2a_2 [80] = "Lukas Maly abholte  Wagen <";
    const char SuchWort_2b_2 [80] = "Lukas Maly  zuruckgab Wagen <";

    const char SuchWort_4a_1[80] = "Kerstin Maly gekommen";
    const char SuchWort_4a_2 [80] = "Kerstin Maly abholte  Wagen <";
    const char SuchWort_4b_2 [80] = "Kerstin Maly  zuruckgab Wagen <";

    char * strZeit_1a_1;
    char * strZeit_2a_2;
    char * strZeit_2b_2;

    int flagSW1 = 0; // boolean für 1-te Wort  wenn sich wiederholt
    int flagSW2 = 0;  // boolean für 3-te Wort  wenn sich wiederholt
    int flagSW3 = 0;  // boolean für 4-te Wort  wenn sich wiederholt

    int counter = 0;


    printf("=================================================\n");
    pFile = fopen(filename, "r");
    if (pFile != NULL) {
        while (fgets(zeile1, leseAusZeile, pFile)) {
           ///////////// wie kann man  diese Funktion in eine Methode reintun //////////////////////////////

            if (strstr(zeile1, (SuchWort_1a_1)) != NULL) {  // wird erste Wort gesucht
                counter++;                                  // wenn das gibt erhöhe counter um 1
                counter = counter % 6; // am Tag soll nur 6 mal sich einstemmpeln, daher steht 6
                strZeit_1a_1 = ZeitVonZeileCut(zeile1, 13, 25); // schneidet die Zeit von der Zeile
                if (flagSW1 == 1) {                             // wenn "gekommen" war mehr mals dann anzeige nächste gekommene als Fehlermeldung
                    printf("ERROR, 1-te kommt mehr mals:  %s:\n", strZeit_1a_1);
                    counter--;                                  // bei wiederholungen soll wieder counter runter gesetzt werden
                }
                flagSW1 = 1;                      // wenn "gekommen" wiederholt sich markiere das und  danach zeige
                flagSW2 = 0;                      // das ist bollean für nachste gesuchteWörter
                flagSW3 = 0;
                printf("%d------------%s", counter, zeile1); // Rest ist gleiche, wird genau so 2 und 3 wort gesucht
                // printf("%d------------%s\n", counter, strZeit_1a_1);
            }
            if (strstr(zeile1, (SuchWort_2a_2)) != NULL) { // sucht abgeholte zeit
                counter++;
                strZeit_2a_2 = ZeitVonZeileCut(zeile1, 13, 25);
                if (flagSW2 == 1) {
                    printf("ERROR, 2-te kommt mehr mals:  %s:\n", strZeit_2a_2);
                    counter--;
                }
                flagSW2 = 1;
             
                flagSW1 = 0;
                printf("%d------------%s", counter, zeile1);
            }
            if (strstr(zeile1, (SuchWort_2b_2)) != NULL) { // sucht zuruckgegebene Zeit
                counter++;
                strZeit_2b_2 = ZeitVonZeileCut(zeile1, 13, 25);
                if (flagSW3 == 1) {
                    printf("ERROR, 3-te kommt mehr mals:  %s:\n", strZeit_2b_2);
                    counter--;
                }
                flagSW3 = 1;
                printf("%d------------%s", counter, zeile1);
                //  printf("%d------------%s\n", counter, strZeit_2b_2);
                if (counter == 6) {
                    printf("___________________________________________________________________________\n");
                }
            }   
       }
        fclose(pFile);
        return 0;
    } else {
        printf("File ist nicht gefunden\n");
        return -1;
    }
}
Man muss den Text nur ein Mal durchlaufen und die Zeiten von mehreren Mitarbeitern anzeigen, zb : zu erst alles von Lukas anzeigen dann alles von Kerstin und so
weiter...

mir wurde vorgeschlagen einzelnen Zeilen in einem Buffer pro Person zu speichern. ich habe das gemacht,ich denke... aber jetzt es wird jede Zeile analysiert und wenn
* nicht dort gesuchte Wort gefunden hat (null) angezeigt, und bei Wiederholungen Fehlermeldung kommt nicht mehr, es kommt auch keine Fehlermeldung...

C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char * ZeitVonZeileCut(const char * text, int beg, int end) {// diese Methode Schneidet die Zeit raus
    int i;
    char *ZeitChar = 0;
    int len = end - beg;
    if (text)
        if (text + beg)
            if (0 < len)
                if ((ZeitChar = (char *) malloc(1 + len))) {
                    for (i = beg; text[i] != '\0' && i < end; i++)
                        ZeitChar[i - beg] = text[i];
                    ZeitChar[i - beg] = '\0';
                }
    return ZeitChar;
}

char * ZeigeErsteZeit(const char * SuchWort_1a_1, char *zeile1, char *strZeit_1a_1, char *textError1, int counter, int flagSW1, int flagSW2, int flagSW3) {
    if (strstr(zeile1, (SuchWort_1a_1)) != NULL) { // wird erste Wort gesucht

        strZeit_1a_1 = ZeitVonZeileCut(zeile1, 13, 25); // schneidet die Zeit von der Zeile
        if (flagSW1 == 1) { // wenn "gekommen" war mehr mals dann anzeige das als Fehlermeldung
            textError1 = "ERROR, 1-te kommt mehr mals:";
            strcat(textError1, strZeit_1a_1); // verkettet geschnittene Zeit und den Text wo sagt Das ist eine Error zusammen und wird das ausgegeben
            return textError1;
            counter--; // bei wiederholungen soll wieder counter runter gesetzt werden
        }
        flagSW1 = 1; // wenn "gekommen" wiederholt sich markiere das und  danach zeige
        flagSW2 = 0; //
        flagSW3 = 0;
    }
    return strZeit_1a_1;

}

char * ZeigeZweiteZeit(const char * SuchWort_2a_2, char *zeile1, char *strZeit_2a_2, char * textError2, int counter, int flagSW1, int flagSW2, int flagSW3) {
    if (strstr(zeile1, (SuchWort_2a_2)) != NULL) { // sucht abgeholte zeit
        strZeit_2a_2 = ZeitVonZeileCut(zeile1, 13, 25);
        if (flagSW2 == 1) {
            textError2 = "ERROR, 2-te kommt mehr mals:";
            strcat(textError2, strZeit_2a_2);
            return textError2;
            counter--;
        }
        flagSW2 = 1;
        flagSW1 = 0;
        return strZeit_2a_2;
    }
}

char * ZeigeDritteZeit(const char * SuchWort_2b_2, char *zeile1, char *strZeit_2b_2, char *textError3, int counter, int flagSW1, int flagSW2, int flagSW3) {
    if (strstr(zeile1, (SuchWort_2b_2)) != NULL) { // sucht zuruckgegebene Zeit
        strZeit_2b_2 = ZeitVonZeileCut(zeile1, 13, 25);
        if (flagSW3 == 1) {
            counter--;
            textError3 = "ERROR, 2-te kommt mehr mals:";
            strcat(textError3, SuchWort_2b_2);
            return textError3;
        }
        flagSW3 = 1;
        return strZeit_2b_2;
        if (counter == 6) {
            printf("___________________________________________________________________________\n");
        }
    }
}

int main(int argc, char** argv) {
    int N = 80;
    FILE *pFile;
    char zeile1[N];

    char filename[50] = "/home/alt/2017-Projekte/LukasPost1";

    const char SuchWort_1a_1[80] = "Lukas Maly gekommen";
    const char SuchWort_2a_2 [80] = "Lukas Maly abholte  Wagen <";
    const char SuchWort_2b_2 [80] = "Lukas Maly  zuruckgab Wagen <";

    const char SuchWort_4a_1[80] = "Kerstin Maly gekommen";
    const char SuchWort_4a_2 [80] = "Kerstin Maly abholte  Wagen <";
    const char SuchWort_4b_2 [80] = "Kerstin Maly  zuruckgab Wagen <";

    char * strZeit_1a_1;
    char * strZeit_2a_2;
    char * strZeit_2b_2;

    char *textError1;
    char *textError2;
    char *textError3;

    char *lukasErste;
    char *lukasZweite;
    char *lukasDritte;

    char *kerstinsErste;
    char *kerstinsZweite;
    char *kerstinsDritte;

    int flagSW1 = 0; // boolean für 1-te Wort  wenn sich wiederholt
    int flagSW2 = 0; // boolean für 3-te Wort  wenn sich wiederholt
    int flagSW3 = 0; // boolean für 4-te Wort  wenn sich wiederholt

    int counter = 0;

    printf("=================================================\n");
    pFile = fopen(filename, "r");
    if (pFile != NULL) {
        while (fgets(zeile1, N, pFile)) {
            counter = counter % 6; // an Tag soll nur 6 mal ein und austemmpeln daher steht 6
            ///////////// wie kann man  diese Funktion in eine Methode reintun //////////////////////////////
            lukasErste = ZeigeErsteZeit(SuchWort_4a_1, zeile1, strZeit_1a_1, textError1, counter, flagSW1, flagSW2, flagSW3);
            counter++; // wenn das gibt erhöhe counter um 1
            printf("%d–––––%s\n", counter, lukasErste);
            lukasZweite = ZeigeZweiteZeit(SuchWort_2a_2, zeile1, strZeit_2a_2, textError2, counter, flagSW1, flagSW2, flagSW3);
            counter++; // wenn das gibt erhöhe counter um 1
            printf("%d–––––%s\n", counter, lukasZweite);
            lukasDritte = ZeigeDritteZeit(SuchWort_2b_2, zeile1, strZeit_2b_2, textError3, counter, flagSW1, flagSW2, flagSW3);
            counter++; // wenn das gibt erhöhe counter um 1
            printf("%d–––––%s\n", counter, lukasDritte);
            kerstinsErste = ZeigeErsteZeit(SuchWort_1a_1, zeile1, strZeit_1a_1, textError1, counter, flagSW1, flagSW2, flagSW3);
            counter++; // wenn das gibt erhöhe counter um 1
            printf("%d–––––%s\n", counter, kerstinsErste);
            kerstinsZweite = ZeigeZweiteZeit(SuchWort_4a_2, zeile1, strZeit_2a_2, textError2, counter, flagSW1, flagSW2, flagSW3);
            counter++; // wenn das gibt erhöhe counter um 1
             printf("%d–––––%s\n", counter, kerstinsZweite);
            kerstinsDritte = ZeigeDritteZeit(SuchWort_4b_2, zeile1, strZeit_2b_2, textError3, counter, flagSW1, flagSW2, flagSW3);
            counter++; // wenn das gibt erhöhe counter um 1
            printf("%d–––––%s\n", counter, kerstinsDritte);
            ////////////////////////////////////////////////bis hier in eine methode tun////////////////////////////////////                       
        }
        fclose(pFile);
        return 0;
    } else {
        printf("File ist nicht gefunden\n");
        return -1;
    }
}
das ist datei wo man muss die Zeiten rausnehmen sollte
Code:
deb|12-03-08|06:00:08.651| Lukas Maly gekommen---------------------
deb|12-03-08|06:00:08.652| Lukas Maly gekommen---------------------

deb|12-03-08|06:00:08.653| Lukas Maly gekommen ____________________
deb|12-03-08|06:03:08.111| Lukas Maly abholte  Wagen <00991>-------
deb|12-03-08|06:03:08.122| Lukas Maly abholte  Wagen <00991>_______
deb|12-03-08|06:11:08:134| Kerstin Maly gekommen
deb|12-03-08|06:15:08.132| India  Maly gekommen
deb|12-03-08|06:16:08.132| Kerstin Maly abholte  Wagen <229>
deb|12-03-08|06:17:08.132| India  Maly abholte  Wagen <1000>
deb|12-03-08|10:00:08.600| Lukas Maly  zuruckgab Wagen <00991>_____
deb|12-03-08|10:00:08.601| Lukas Maly gekommen---------------------
deb|12-03-08|10:00:08.602| Lukas Maly gekommen_____________________
deb|12-03-08|10:06:08.145| Lukas Maly abholte  Wagen <00992>______
deb|12-03-08|11:20:08.186| Kerstin Maly zuruckgab Wagen <229>
deb|12-03-08|11:20:08.111| Kerstin Maly gekommen
deb|12-03-08|11:25:08.167| Kerstin Maly abholte  Wagen <230>
deb|12-03-08|11:00:08.100| India  Maly abholte  Wagen <1001>
deb|12-03-08|13:00:08.345| Lukas Maly  zuruckgab Wagen <00992>____
deb|12-03-08|13:07:70.100| Kerstin Maly zuruckgab Wagen <230>
deb|12-03-08|15:08:08.189| India  Maly abholte  Wagen <1002>



deb|13-03-08|06:11:08:134| Lukas Maly gekommen
deb|13-03-08|06:15:08.132| India  Maly gekommen
deb|13-03-08|06:15:08.333| Kerstin Maly gekommen
deb|13-03-08|06:16:08.132| Kerstin Maly abholte  Wagen <231>
deb|13-03-08|06:17:08.132| India  Maly abholte  Wagen <1003>
deb|13-03-08|10:06:08.567| Lukas Maly abholte  Wagen <00993>_______
deb|13-03-08|11:20:08.186| Kerstin Maly zuruckgab Wagen <231>
deb|13-03-08|11:25:08.444| Kerstin Maly gekommen
deb|13-03-08|11:25:08.167| Kerstin Maly abholte  Wagen <232>
deb|13-03-08|11:00:08.100| India  Maly abholte  Wagen <1004>
deb|13-03-08|13:00:08.001| Lukas Maly  zuruckgab Wagen <00993>_____
deb|13-03-08|13:00:08.002| Lukas Maly  zuruckgab Wagen <00993>_____
deb|13-03-08|13:07:70.100| Kerstin Maly zuruckgab Wagen <232>
deb|13-03-08|13:07:70.200| Kerstin Maly zuruckgab Wagen <232>
deb|13-03-08|15:05:08.345| Lukas Maly gekommen______________________
deb|13-03-08|15:08:08.189| Lukas Maly abholte  Wagen <00994>________
deb|13-03-08|18:20:08.100| Lukas Maly  zuruckgab Wagen <00994>______
deb|13-03-08|18:20:08.200| Lukas Maly  zuruckgab Wagen <00994>_____

deb|14-03-08|06:00:08.650| Lukas Maly gekommen______________________
deb|14-03-08|06:03:08.152| Lukas Maly abholte  Wagen <00995>________
deb|14-03-08|10:00:08.600| Lukas Maly  zuruckgab Wagen <00995>______
deb|14-03-08|10:00:08.600| Lukas Maly gekommen______________________
deb|14-03-08|10:06:08.145| Lukas Maly abholte  Wagen <00996>________
deb|14-03-08|10:00:08.345| Lukas Maly  zuruckgab Wagen <00996>______