1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

In C , Fehler beim gleiche Wörter suchen

Dieses Thema im Forum "C/C++" wurde erstellt von Sergei, 6. April 2017.

  1. Sergei

    Sergei Mitglied

    Guten Tag,
    ich brauche wieder eure Hilfe, viellecht kan mit jemand helfen...

    man muss hier den Tagesablauf von Postmitarbeiter berechen, am Tag zb Lukas Maly soll 2 Wagen mit Briefe verteilen
    Er kommt und stempelt sich ein, sein Arbeitstag ist angefangen er soll im Betrieb max in 3 Minute sein er nimmt seinen Wagen, und beim rausgehen
    vom Betrieb auf der Checkliste bigt ein das er den Wagen mit Nummer <100> abgeholt hat, er soll einen Wagen max in 4 Stunden fertig machen
    und kommt wieder ins Betrieb zum zuruckgeben den Wagen
    Aufgabe mann muss die Zeiten wo er länger als muss begraucht hat. zB: am 2-ten Tag er kommt zum BEtrieb und von 6 Uhr und bis 10 schläft ein ;) man muss diese
    Zeit anzeigen und Wagennummer anzeigen.
    Lukas gekommen und abholte Wagen = soll max 3 min
    Lukas abholte Wagen und zuruckgab Wagen = max 4 Stunden (braucht er um eine Wagen zu leer machen)
    Lukas gekommen und 2te Wagen zuruckgab = max 9 Stunden ( das ist max Arbeitszeit)
    "Lukas Maly gekommen"
    Lukas Maly abholte Wagen <"
    "Lukas Maly zuruckgab Wagen <"

    wenn ich nur 3 erste eingebe ich bekomme die Zeit, sobald wenn ich will nächste 3 suchen funktionniert
    meine Programme nicht mehr....weil ich denke gesuchteWorter gleich sind ... Wie kann man alle 6 Zeiten anzeigen?

    Code (C):
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4. int InZeitUm(char * zeit);
    5. char * ZeitVonZeileCut(const char * text, int beg, int end);
    6.  
    7.  
    8. #define filename "/home/alt/2017-Projekte/LukasPost"
    9.  
    10. #define SuchWort_1a_1 "Lukas Maly gekommen"
    11. #define SuchWort_1a_2 "Lukas Maly abholte  Wagen <"
    12. #define SuchWort_1b_2 "Lukas Maly  zuruckgab Wagen <"
    13.  
    14. #define SuchWort_2a_1 "Lukas Maly gekommen"
    15. #define SuchWort_2a_2 "Lukas Maly abholte  Wagen <"
    16. #define SuchWort3a_1 "Lukas Maly  zuruckgab Wagen <"
    17.  
    18. //
    19.  
    20.  
    21. int InZeitUm(char * zeit) {          // Die Methode umwandelt die geschinttene Zeit in integer und dann in Millisekunde
    22.  
    23.     char * stundeChar = ZeitVonZeileCut(zeit, 0, 2);
    24.     int stundeInt = atoi(stundeChar);
    25.     int st = stundeInt * 60 * 60 * 1000;
    26.  
    27.  
    28.     char * MinuteChar = ZeitVonZeileCut(zeit, 3, 5);
    29.     int minuteInt = atoi(MinuteChar);
    30.     int mi = minuteInt * 60 * 1000;
    31.  
    32.  
    33.     char * SekundeChar = ZeitVonZeileCut(zeit, 6, 8);
    34.     int sekInt = atoi(SekundeChar);
    35.     int se = sekInt * 1000;
    36.  
    37.     char * MiSekChar = ZeitVonZeileCut(zeit, 9, 12);
    38.     int msekInt = atoi(MiSekChar);
    39.  
    40.  
    41.     int gesZeitInInt = st + mi + se + msekInt;
    42.     return gesZeitInInt;
    43. }
    44.  
    45. char * ZeitVonZeileCut(const char * text, int beg, int end) { // diese Methode Schneidet die Zeit raus
    46.     int i;
    47.     char *ZeitChar = 0;
    48.     int len = end - beg;
    49.     if (text)
    50.         if (text + beg)
    51.             if (0 < len)
    52.                 if ((ZeitChar = (char *) malloc(1 + len))) {
    53.                     for (i = beg; text[i] != '\0' && i < end; i++)
    54.                         ZeitChar[i - beg] = text[i];
    55.                     ZeitChar[i - beg] = '\0';
    56.                 }
    57.     return ZeitChar;
    58. }
    59.  
    60. int main(int argc, char** argv) {
    61.  
    62.     FILE *pFile;
    63.     int leseAusZeile = 170;
    64.     char zeile1[leseAusZeile];
    65.  
    66.     int regel_1_erlaubt = 0;
    67.  
    68.     char * strZeit_1;
    69.     char * strZeit_2;
    70.     char * strZeit_3;
    71.     char * strZeit_4;
    72.     char * strZeit_5;
    73.     char * strZeit_6;
    74.  
    75.     int intZeit_1 = 0;
    76.     int intZeit_2 = 0;
    77.     int intZeit_3 = 0;
    78.     int intZeit_4 = 0;
    79.     int intZeit_5 = 0;
    80.     int intZeit_6 = 0;
    81.  
    82.     int dif = 0;
    83.  
    84.     printf("=================================================\n");
    85.     pFile = fopen(filename, "r");
    86.     if (pFile != NULL) {
    87.         while (!feof(pFile)) {
    88.             fgets(zeile1, leseAusZeile, pFile);
    89.             if (strstr(zeile1, (SuchWort_1a_1)) != NULL) {
    90.                 regel_1_erlaubt = 1; // boolean wenn 1te gesuchte Wort das ist regel_1_erlaubt=1
    91.                 strZeit_1 = ZeitVonZeileCut(zeile1, 13, 25);
    92.                 //    printf(" 1:  %s \n", strZeit_a);
    93.                 printf(" 1:  %s \n", zeile1);
    94.  
    95.             } else if ((strstr(zeile1, (SuchWort_1a_2)) != NULL)&&(regel_1_erlaubt == 1)) {
    96.                 regel_1_erlaubt = 2;
    97.                 strZeit_2 = ZeitVonZeileCut(zeile1, 13, 25);
    98.                 //    printf(" 2:  %s \n", strZeit_b);
    99.                 printf(" 2:  %s \n", zeile1);
    100.  
    101.             } else if ((strstr(zeile1, (SuchWort_1b_2)) != NULL)&&(regel_1_erlaubt == 2)) {
    102.                 regel_1_erlaubt = 3;
    103.                 strZeit_3 = ZeitVonZeileCut(zeile1, 13, 25);
    104.                 //   printf(" 3:  %s \n", strZeit_c);
    105.                 printf(" 3:  %s \n", zeile1);
    106.             } else if ((strstr(zeile1, (SuchWort_2a_1)) != NULL)&&(regel_1_erlaubt == 3)) {
    107.                 regel_1_erlaubt = 4;
    108.                 strZeit_4 = ZeitVonZeileCut(zeile1, 13, 25);
    109.                 //   printf(" 4:  %s \n", strZeit_d);
    110.                 printf(" 4:  %s \n", zeile1);
    111.  
    112.             } else if ((strstr(zeile1, (SuchWort_2a_2)) != NULL)&&(regel_1_erlaubt == 4)) {
    113.                 regel_1_erlaubt = 5;
    114.                 strZeit_5 = ZeitVonZeileCut(zeile1, 13, 25);
    115.                 //   printf(" 5:  %s \n", strZeit_e);
    116.                 printf(" 5:  %s \n", zeile1);
    117.  
    118.             } else if ((strstr(zeile1, (SuchWort3a_1)) != NULL)&&(regel_1_erlaubt == 5)) {
    119.                 strZeit_6 = ZeitVonZeileCut(zeile1, 13, 25);
    120.                 //      printf(" 6:  %s \n", strZeit_f);
    121.                 printf(" 6:  %s \n", zeile1);
    122.  
    123.                 intZeit_1 = InZeitUm(strZeit_1); // hier ich wollte die Zeit raus nehmen zum berechnen
    124.                 intZeit_2 = InZeitUm(strZeit_2);
    125.                 intZeit_3 = InZeitUm(strZeit_3);
    126.                 intZeit_4 = InZeitUm(strZeit_4);
    127.                 intZeit_5 = InZeitUm(strZeit_5);
    128.                 intZeit_6 = InZeitUm(strZeit_6);
    129.  
    130.                 printf("------------%d\n", intZeit_1); //die Zeit in String anzeigen
    131.                 printf("------------%d\n", intZeit_2);
    132.                 printf("------------%d\n", intZeit_3);
    133.                 printf("------------%d\n", intZeit_4);
    134.                 printf("------------%d\n", intZeit_5);
    135.                 printf("------------%d\n", intZeit_6);
    136.                 printf("=================================================\n");
    137.             }
    138.         }
    139.         fclose(pFile);
    140.     } else {
    141.         printf("File ist nicht gefunden\n");
    142.         abort();
    143.     }
    144. }
     

    Anhänge:

  2. cwriter

    cwriter Erfahrenes Mitglied

    Hi

    Na? Sind wir wieder der feof()-Unsitte verfallen? :-] (Es ist nicht allzu schlimm, führt aber zumindest zu komplizierterem Code)

    Warum denkst du, dass das Problem ist, dass die gesuchten Wörter gleich sind?

    Also deine beiden Suchsets sind eigentlich identisch. Daher werden die unteren strstr-Verzweigungen nie ausgeführt (bzw. sie werden es, aber es wird nie in sie eingetreten).
    Die Bedingung, in "else if ((strstr(zeile1, (SuchWort_2a_1)) != NULL)&&(regel_1_erlaubt == 3))" einzutreten, ist auch bei
    "if (strstr(zeile1, (SuchWort_1a_1)) != NULL) {" erfüllt, wenn SuchWort_2a_1 == SuchWort_1a_1.
    Daher kommt es dir wohl so vor, dass die Zeilen 1, 2, 3 in der Ausgabe doppelt vorkommen, aber eigentlich sind es unterschiedliche Zeilen, nur das Präfix ist dasselbe.
    Oder anders ausgedrückt:
    Würdest du in den printf("%d: ") jeweils einen Zähler ausgeben, der mit fgets() mitzählt (also nach jedem fgets() inkrementiert wird), dann hättest du andere Resultate.

    In Zukunft wäre es für uns übrigens relativ praktisch, würdest du die Ausgabe deines Programms und wenn möglich die erwartete Ausgabe mitangeben - dann müssen wir (bzw. ich) den Code nicht immer im Kopf kompilieren :)

    /EDIT: Sehe gerade: Du hast ja gar keine Ausgabe. Das liegt daran, dass der if-Block, in dem die Verzweigung ist, nie ausgeführt wird (siehe oben).

    Übrigens solltest du deine Programme dynamischer gestalten, d.h.: Weg mit den #defines, die sind böse. Mach doch einfach ein const char* bla = "Das ist ein Text"; stattdessen hin. Ist für den Compiler ein bisschen angenehmer.
    Zudem ist Codeverdoppelung ein bisschen stumpf. Stell dir vor, du wolltest 100 solche Einträge ausgeben. Willst du dann auch einfach den Code 100x kopieren? Für dein Problem bräuchtest du eigentlich nur einen Array, je nachdem von structs oder Strings, und dann müsstest du nicht so viele neue Variablen definieren (denn ein Array ist ja nichts anderes als nummerierte Variablen:)
    Code (C):
    1. int a[4];
    2. //Dasselbe wie
    3. int a0;
    4. int a1;
    5. int a2;
    6. int a3;
    (Das gilt natürlich nur eingeschränkt und ist eigentlich systemabhängig usw., aber semantisch ist es dasselbe).
    Ein struct ist dann ähnlich:

    Code (C):
    1. typedef struct
    2. {
    3. int a;
    4. char b;
    5. } myStruct
    6.  
    7. myStruct arr[4];
    8. //Ist dasselbe wie
    9. int a0;
    10. char b0;
    11.  
    12. int a1;
    13. char b1;
    14.  
    15. int a2;
    16. char b2;
    17.  
    18. int a3;
    19. char b3;
    Und so würde dein Code schon sehr viel übersichtlicher.

    Gruss
    cwriter
     
    Zuletzt bearbeitet: 6. April 2017
  3. Sergei

    Sergei Mitglied

    immer noch keine Zeit
     
    Zuletzt bearbeitet: 6. April 2017
  4. Sergei

    Sergei Mitglied

    Danke Cwriter, ich habe geändert, aber immer noch krige ich nicht die richtige zeiten raus, :(
    mit struct habe ich erstes mal versucht. Wie bekomme ich die Zeiten raus...

    Regel 1 erlaubt
    1. 06:00:08.650| lukas gekommen
    2. 06:03:08.152| lukas wagen abgeholt<1>
    3... lukas wage zuruckgegeben<1>
    4... lukas gekommen
    5. ..lukas wagen abgeholt<2>
    6. ..lukas wagen zuruckgegeben<2>

    hier man muss gucken ob [dif<3] minute ist dif=2-1 und dif=5-4 das ist die Zeit zum wagen abgeben und neue nehmen zb: ((06:03:08.152)-(06:00:08.650))
    noch [difWagen< 4 Stunde] difWage=3-2 und 6-5
    und letzte ist [TagesZeit< 9 Stunde] 6-1
    Wenn länger als muss angehalten war muss man die Zeit und WagenNummer anzeigen

    Regel 1-a erlaubt
    1. lukas gekommen
    2. lukas wagen abgeholt<3>
    3. lukas gekommen
    4. lukas wagen abgeholt<4>
    5. lukas wagen zuruckgegeben<3>
    6. lukas wagen zuruckgegeben<4>
    hier hat er vergessen 3-te Wagen zuruck geben, aber es ist erlaubt auch am Ende alle Wagen zuruck geben
    hier man muss gucken ob [dif<3] minute ist dif=2-1 und dif=5-4 das ist die Zeit zum wagen abgeben und neue nehmen
    noch [difWagen< 4 Stunde] difWage=3-2 und
    und letzte ist [TagesZeit< 9 Stunde] 6-1

    NICHT erlaubte Regeln
    1. lukas gekommen
    2. lukas wagen zuruckgegeben <3>
    3. lukas wagen zuruckgegeben <4>
    4. lukas wagen abgeholt <5>
    5. lukas wagen zuruckgegeben <5>
    6. lukas wagen abgeholt <6>
    7. lukas wagen zuruckgegeben <6>

    weil wagen soll schon vorherige Tag da sein dafür die andere Postarbeiter schon Nachts den Wagen aufladen mussen
    mann muss erlaubte und nicht erlaubte Regeln anzeigen wann hat er was gemacht wer hat den Wagen nicht zuruck gegeben...
    Dann noch am Ende man muss die Arbeitzeiten von einen Monat addiren... aber das ist schon andere Geschichte ... :)

    Code (C):
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4. int InZeitUm(char * zeit);
    5. char * ZeitVonZeileCut(const char * text, int beg, int end);
    6.  
    7. struct arbeitzeit {
    8.     int intZeit;
    9.     char *strZeit;
    10. };
    11.  
    12. int InZeitUm(char * zeit) { // Die Methode umwandelt die geschinttene Zeit in integer und dann in Millisekunde
    13.  
    14.     char * stundeChar = ZeitVonZeileCut(zeit, 0, 2);
    15.     int stundeInt = atoi(stundeChar);
    16.     int st = stundeInt * 60 * 60 * 1000;
    17.  
    18.     char * MinuteChar = ZeitVonZeileCut(zeit, 3, 5);
    19.     int minuteInt = atoi(MinuteChar);
    20.     int mi = minuteInt * 60 * 1000;
    21.  
    22.     char * SekundeChar = ZeitVonZeileCut(zeit, 6, 8);
    23.     int sekInt = atoi(SekundeChar);
    24.     int se = sekInt * 1000;
    25.  
    26.     char * MiSekChar = ZeitVonZeileCut(zeit, 9, 12);
    27.     int msekInt = atoi(MiSekChar);
    28.  
    29.     int gesZeitInInt = st + mi + se + msekInt;
    30.     return gesZeitInInt;
    31. }
    32.  
    33. char * ZeitVonZeileCut(const char * text, int beg, int end) {// diese Methode Schneidet die Zeit raus
    34.     int i;
    35.     char *ZeitChar = 0;
    36.     int len = end - beg;
    37.     if (text)
    38.         if (text + beg)
    39.             if (0 < len)
    40.                 if ((ZeitChar = (char *) malloc(1 + len))) {
    41.                     for (i = beg; text[i] != '\0' && i < end; i++)
    42.                         ZeitChar[i - beg] = text[i];
    43.                     ZeitChar[i - beg] = '\0';
    44.                 }
    45.     return ZeitChar;
    46. }
    47. int main(int argc, char** argv) {
    48.  
    49.     FILE *pFile;
    50.     int leseAusZeile = 170;
    51.     char zeile1[leseAusZeile];
    52.  
    53.     char filename[50] = "/home/alt/2017-Projekte/LukasPost";
    54.     const char SuchWort_1a_1[80] = "Lukas Maly gekommen";
    55.     const char SuchWort_1a_2 [80] = "Lukas Maly abholte  Wagen <";
    56.     const char SuchWort_1b_2 [80] = "Lukas Maly  zuruckgab Wagen <";
    57.  
    58.     int regel_1_erlaubt = 0;
    59.  
    60.     int zeitLimit1 = 180000; //von kommen und neue Wagen abholen 3-Min
    61.     int maxZeitWagenLeeren = 14400000; // einen Wagen fertig leeren dauert max 4 Stunden
    62.     int MaximalArbeitszeit = 32400000; // Tages Arbeitzeit soll nicht mehr als 9 Stunde sein
    63.  
    64.     int dif = 0;
    65.     int counter = 0;
    66.  
    67.     struct arbeitzeit a;
    68.     struct arbeitzeit b;
    69.     struct arbeitzeit c;
    70.     struct arbeitzeit d;
    71.     struct arbeitzeit e;
    72.     struct arbeitzeit f;
    73.     struct arbeitzeit g;
    74.  
    75.     printf("=================================================\n");
    76.     pFile = fopen(filename, "r");
    77.     if (pFile != NULL) {
    78.         while (fgets(zeile1, leseAusZeile, pFile)) {
    79.             counter++;
    80.             if (strstr(zeile1, (SuchWort_1a_1)) != NULL) { // wenn im Text 1 gesuchte Wort da ist setze regel_1_erlaubt auf 1
    81.                 regel_1_erlaubt = 1;
    82.                 a.strZeit = ZeitVonZeileCut(zeile1, 13, 25); // schneide von der Zeile die Zeit aus
    83.                     d.strZeit = ZeitVonZeileCut(zeile1, 13, 25);
    84.                 //    printf(" 1:  %s \n", strZeit_a);
    85.                 printf(" %d:  %s \n", counter, zeile1); // das ist nur zum sehen was da raus kommt
    86.                 //  printf(" %d:  %s \n", counter, a.intZeit);
    87.             }
    88.             if ((strstr(zeile1, (SuchWort_1a_2)) != NULL)&&(regel_1_erlaubt == 1)) { // wenn im Text 2 gesuchte Wort da ist und obere regel_1 =1 war dann setze regel_1_erlaubt auf 2
    89.                 regel_1_erlaubt = 2;
    90.                 b.strZeit = ZeitVonZeileCut(zeile1, 13, 25); // schneide von der Zeile die Zeit aus
    91.                  e.strZeit = ZeitVonZeileCut(zeile1, 13, 25); // schneide von der Zeile die Zeit aus
    92.                 //    printf(" 2:  %s \n", strZeit_b);
    93.                 printf(" %d:  %s \n", counter, zeile1); // das ist nur zum sehen was da raus kommt  analog die nächste 4 Wörter suchen
    94.             }
    95.             if ((strstr(zeile1, (SuchWort_1b_2)) != NULL)&&(regel_1_erlaubt == 2)) {
    96.                 regel_1_erlaubt = 3;
    97.                 c.strZeit = ZeitVonZeileCut(zeile1, 13, 25);
    98.                   f.strZeit = ZeitVonZeileCut(zeile1, 13, 25);
    99.                 //   printf(" 3:  %s \n", strZeit_c);
    100.                 printf(" %d:  %s \n", counter, zeile1);
    101.      
    102.  
    103.                 a.intZeit = InZeitUm(a.strZeit);
    104.                 b.intZeit = InZeitUm(b.strZeit);
    105.                 c.intZeit = InZeitUm(c.strZeit);
    106.                 d.intZeit = InZeitUm(d.strZeit);
    107.                 e.intZeit = InZeitUm(e.strZeit);
    108.                 f.intZeit = InZeitUm(f.strZeit);
    109.  
    110.                 printf("=================================================\n");
    111.  
    112.                 printf("------------%d\n", a.intZeit);
    113.                 printf("------------%d\n", b.intZeit);
    114.                 printf("------------%d\n", c.intZeit);
    115.                 printf("------------%d\n", d.intZeit);
    116.                 printf("------------%d\n", e.intZeit);
    117.                 printf("------------%d\n", f.intZeit);
    118.  
    119.                  int dif = b.intZeit - a.intZeit;
    120.                        if (dif < zeitLimit1) {
    121.                            printf("%s - %s =%d\n", b.strZeit, a.strZeit , dif);
    122.                        }                
    123.                        printf("=================================================\n");
    124.                    
    125.             }
    126.         }
    127.         fclose(pFile);
    128.     } else {
    129.         printf("File ist nicht gefunden\n");
    130.         abort();
    131.     }
    132.     }
     
    Zuletzt bearbeitet: 6. April 2017
  5. cwriter

    cwriter Erfahrenes Mitglied

    Ich verstehe deinen Code nicht so ganz.
    Du hast immer noch 6 Variablen (nun heissen sie halt a-f) für 3 mögliche Zustände.
    Dann nutzt du malloc in ZeitVonZeileCut, aber nirgends ein free.

    Wie du die Zeiten bekommst: Naja, du hast sie ja. Was wolltest du denn haben?

    Ahja und du musst nicht schreiben, wenn du keine Zeit hast - ich sehe ja dann, wenn du es dir angeschaut hast.

    Gruss
    cwriter
     
  6. Sergei

    Sergei Mitglied

    Ganz herzliche Dank an dir cwriter dank dir bin ich bischen kluger geworden :)
    sonst hätte ich tausend Stück sowas gehabt
    const char SuchWort_1[80] = "Lukas Maly gekommen";
    const char SuchWort_2 [80] = "Lukas Maly abholte Wagen <";
    const char SuchWort_3 [80] = "Lukas Maly zuruckgab Wagen <";

    ich habe bekommen das was ich wollte :) Danke , trotzdem mit malloc free ich habe nicht geschafft wo soll ich frei machen wenn Funktion ZeitVonZeileCut den Wert gibt soll da frei machen oder
    Was kann man machen damit counter immer wieder nur bis 6 zählt?
    Code (C):
    1.    
    2.  return ZeitChar;
    3.     free(ZeitChar);
    4.        
    so ist richtig?

    ich habe so gemacht und die Zeiten bekommen die ich wollte
    Code (C):
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4. int InZeitUm(char * zeit);
    5. char * ZeitVonZeileCut(const char * text, int beg, int end);
    6.  
    7. struct arbeitzeit {
    8.     int intZeit;
    9.     char *strZeit;
    10. };
    11.  
    12. int InZeitUm(char * zeit) { // Die Methode umwandelt die geschinttene Zeit in integer und dann in Millisekunde
    13.  
    14.     char * stundeChar = ZeitVonZeileCut(zeit, 0, 2);
    15.     int stundeInt = atoi(stundeChar);
    16.     int st = stundeInt * 60 * 60 * 1000;
    17.  
    18.     char * MinuteChar = ZeitVonZeileCut(zeit, 3, 5);
    19.     int minuteInt = atoi(MinuteChar);
    20.     int mi = minuteInt * 60 * 1000;
    21.  
    22.     char * SekundeChar = ZeitVonZeileCut(zeit, 6, 8);
    23.     int sekInt = atoi(SekundeChar);
    24.     int se = sekInt * 1000;
    25.  
    26.     char * MiSekChar = ZeitVonZeileCut(zeit, 9, 12);
    27.     int msekInt = atoi(MiSekChar);
    28.  
    29.     int gesZeitInInt = st + mi + se + msekInt;
    30.     return gesZeitInInt;
    31. }
    32.  
    33. char * ZeitVonZeileCut(const char * text, int beg, int end) {// diese Methode Schneidet die Zeit raus
    34.     int i;
    35.     char *ZeitChar = 0;
    36.     int len = end - beg;
    37.     if (text)
    38.         if (text + beg)
    39.             if (0 < len)
    40.                 if ((ZeitChar = (char *) malloc(1 + len))) {
    41.                     for (i = beg; text[i] != '\0' && i < end; i++)
    42.                         ZeitChar[i - beg] = text[i];
    43.                     ZeitChar[i - beg] = '\0';
    44.                 }
    45.     return ZeitChar;
    46.     free(ZeitChar);
    47. }
    48.  
    49. int main(int argc, char** argv) {
    50.  
    51.     FILE *pFile;
    52.     int leseAusZeile = 170;
    53.     char zeile1[leseAusZeile];
    54.  
    55.     char filename[50] = "/home/alt/2017-Projekte/LukasPost";
    56.     const char SuchWort_1[80] = "Lukas Maly gekommen";
    57.     const char SuchWort_2 [80] = "Lukas Maly abholte  Wagen <";
    58.     const char SuchWort_3 [80] = "Lukas Maly  zuruckgab Wagen <";
    59.  
    60.     int regel_1_erlaubt = 0;
    61.  
    62.     struct arbeitzeit a;
    63.     struct arbeitzeit b;
    64.     struct arbeitzeit c;
    65.     struct arbeitzeit d;
    66.     struct arbeitzeit e;
    67.     struct arbeitzeit f;
    68.     int counter = 0;
    69.  
    70.     printf("=================================================\n");
    71.     pFile = fopen(filename, "r");
    72.     if (pFile != NULL) {
    73.         while (fgets(zeile1, leseAusZeile, pFile)) {
    74.             if (strstr(zeile1, (SuchWort_1)) != NULL) { // wenn im Text 1 gesuchte Wort da ist setze regel_1_erlaubt auf
    75.                 regel_1_erlaubt = 1;
    76.                 counter++;
    77.                 printf("%d------------%s", counter,  zeile1); // das ist nur zum sehen was da raus kommt
    78.                 a.strZeit = ZeitVonZeileCut(zeile1, 13, 25);
    79.                 a.intZeit = InZeitUm(a.strZeit);
    80.                 printf("%d------------%s\n\n", counter, a.strZeit);
    81.             }
    82.             if ((strstr(zeile1, (SuchWort_2)) != NULL)&&(regel_1_erlaubt == 1)) { // wenn im Text 2 gesuchte Wort da ist und obere regel_1 =1 war dann setze regel_1_erlaubt auf 2
    83.                 regel_1_erlaubt = 2;
    84.                 counter++;
    85.                 printf("%d------------%s", counter, zeile1); // das ist nur zum sehen was da raus kommt  analog die nächste 4 Wörter suchen
    86.                 b.strZeit = ZeitVonZeileCut(zeile1, 13, 25);
    87.                 b.intZeit = InZeitUm(b.strZeit);
    88.                 printf("%d------------%s\n\n", counter, b.strZeit);
    89.             }
    90.             if ((strstr(zeile1, (SuchWort_3)) != NULL)&&(regel_1_erlaubt == 2)) {
    91.                 regel_1_erlaubt = 3;
    92.                 counter++;
    93.                 printf("%d------------%s", counter, zeile1);
    94.                 c.strZeit = ZeitVonZeileCut(zeile1, 13, 25);
    95.                 c.intZeit = InZeitUm(c.strZeit);
    96.                printf("%d------------%s\n\n", counter, c.strZeit);
    97.             }
    98.             if ((strstr(zeile1, (SuchWort_1)) != NULL)&&(regel_1_erlaubt == 3)) { // wenn im Text 1 gesuchte Wort da ist setze regel_1_erlaubt auf 1
    99.                 regel_1_erlaubt = 4;
    100.                 counter++;
    101.                 printf("%d------------%s", counter, zeile1); // das ist nur zum sehen was da raus kommt
    102.                 d.strZeit = ZeitVonZeileCut(zeile1, 13, 25);
    103.                 d.intZeit = InZeitUm(d.strZeit);
    104.               printf("%d------------%s\n\n", counter, d.strZeit);
    105.             }
    106.             if ((strstr(zeile1, (SuchWort_2)) != NULL)&&(regel_1_erlaubt == 4)) { // wenn im Text 2 gesuchte Wort da ist und obere regel_1 =1 war dann setze regel_1_erlaubt auf 2
    107.                 regel_1_erlaubt = 5;
    108.                 counter++;
    109.                 printf("%d------------%s", counter, zeile1); // das ist nur zum sehen was da raus kommt  analog die nächste 4 Wörter suchen
    110.                 e.strZeit = ZeitVonZeileCut(zeile1, 13, 25);
    111.                 e.intZeit = InZeitUm(e.strZeit);
    112.                 printf("%d------------%s\n\n", counter, e.strZeit);
    113.             }
    114.             if ((strstr(zeile1, (SuchWort_3)) != NULL)&&(regel_1_erlaubt == 5)) {
    115.                 counter++;
    116.                 printf("%d------------%s", counter, zeile1);
    117.                 f.strZeit = ZeitVonZeileCut(zeile1, 13, 25);
    118.                 f.intZeit = InZeitUm(f.strZeit);
    119.                 printf("%d------------%s\n\n", counter, f.strZeit);
    120.                 printf("=================================================\n");
    121.  
    122.             }
    123.         }
    124.         fclose(pFile);
    125.     } else {
    126.         printf("File ist nicht gefunden\n");
    127.         abort();
    128.     }
    129. }
     
    Zuletzt bearbeitet: 7. April 2017
  7. cwriter

    cwriter Erfahrenes Mitglied

    Nein, das free kann so ja gar nicht ausgeführt werden. Du müsstest das free() in InZeitUm() am Ende auf jeweils stundeChar, MinuteChar etc. anwenden.
    Das ist sehr einfach. Am Ende des Loops (oder nach jeder Erhöhung, aber bei deinem Code einfach als letzte Zeile innerhalb der while-Schlaufe) einfügen:
    Code (C):
    1. counter = counter % 6;
    2. //(Semantisch dasselbe wie):
    3. while(counter >=6) counter -= 6;
    Aber nutze bitte % und nicht die while-Variante, da % auf den meisten CPUs effizienter ist.

    Gruss
    cwriter
     
  8. Sergei

    Sergei Mitglied

    Es sieht wirklich schick aus :):rolleyes: mit %
    DANKE BRUDER !!!
     
  9. Sergei

    Sergei Mitglied

    Guten Tag, liebe Gruppenmitglieder, wieder mal ich, brauche sehr euere Hilfe,
    Ich verstehe das Kod sieht zimlich scheiße aus, bitte nicht streng sein, bin noch Anfänger.
    man muss die Zeiten von Mitarbeiter anzeigen. erst die Zeiten von Lukas anzeigen dann von Kerstin.

    zB: Lukas gekommen
    Lukas Wagen abgeholt<1>
    Lukas Wagen zuruckgegeben<1>
    Lukas gekommen
    Lukas Wagen abgeholt<2>
    Lukas Wagen zuruckgegeben<2>
    __________________________________
    Kerstin gekommen
    Kerstin Wagen abgeholt<3>
    Kerstin Wagen zuruckgegeben<3>
    Kerstin gekommen
    Kerstin Wagen abgeholt<4>
    Kerstin Wagen zuruckgegeben<4>


    Code (C):
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4. int InZeitUm(char * zeit);
    5. char * ZeitVonZeileCut(const char * text, int beg, int end);
    6.  
    7. int InZeitUm(char * zeit) { // Die Methode umwandelt die geschinttene Zeit in integer und dann in Millisekunde
    8.  
    9.     char * StundeChar = ZeitVonZeileCut(zeit, 0, 2);
    10.     int stundeInt = atoi(StundeChar);
    11.     int st = stundeInt * 60 * 60 * 1000;
    12.     free(StundeChar);
    13.  
    14.     char * MinuteChar = ZeitVonZeileCut(zeit, 3, 5);
    15.     int minuteInt = atoi(MinuteChar);
    16.     int mi = minuteInt * 60 * 1000;
    17.     free(MinuteChar);
    18.  
    19.     char * SekundeChar = ZeitVonZeileCut(zeit, 6, 8);
    20.     int sekInt = atoi(SekundeChar);
    21.     int se = sekInt * 1000;
    22.     free(SekundeChar);
    23.  
    24.     char * MiSekChar = ZeitVonZeileCut(zeit, 9, 12);
    25.     int msekInt = atoi(MiSekChar);
    26.     free(MiSekChar);
    27.  
    28.     int gesZeitInInt = st + mi + se + msekInt;
    29.     return gesZeitInInt;
    30. }
    31.  
    32. char * ZeitVonZeileCut(const char * text, int beg, int end) {// diese Methode Schneidet die Zeit raus
    33.     int i;
    34.     char *ZeitChar = 0;
    35.     int len = end - beg;
    36.     if (text)
    37.         if (text + beg)
    38.             if (0 < len)
    39.                 if ((ZeitChar = (char *) malloc(1 + len))) {
    40.                     for (i = beg; text[i] != '\0' && i < end; i++)
    41.                         ZeitChar[i - beg] = text[i];
    42.                     ZeitChar[i - beg] = '\0';
    43.                 }
    44.     return ZeitChar;
    45. }
    46.  
    47. int main(int argc, char** argv) {
    48.  
    49.     FILE *pFile;
    50.     int leseAusZeile = 170;
    51.     char zeile1[leseAusZeile];
    52.     char zeileV_SW1[leseAusZeile];
    53.     char zeileV_SW2[leseAusZeile];
    54.     char zeileV_SW3[leseAusZeile];
    55.  
    56.     char filename[50] = "/home/alt/2017-Projekte/LukasPost1";
    57.  
    58.  
    59.  
    60.     const char SuchWort_1a_1[80] = "Lukas Maly gekommen";
    61.     const char SuchWort_2a_2 [80] = "Lukas Maly abholte  Wagen <";
    62.     const char SuchWort_2b_2 [80] = "Lukas Maly  zuruckgab Wagen <";
    63.  
    64.     const char SuchWort_4a_1[80] = "Kerstin Maly gekommen";
    65.     const char SuchWort_4a_2 [80] = "Kerstin Maly abholte  Wagen <";
    66.     const char SuchWort_4b_2 [80] = "Kerstin Maly  zuruckgab Wagen <";
    67.  
    68.     char * strZeit_1a_1;
    69.     char * strZeit_2a_2;
    70.     char * strZeit_2b_2;
    71.  
    72.     int flagSW1 = 0;
    73.     int flagSW2 = 0;
    74.     int flagSW3 = 0;
    75.  
    76.     int counter = 0;
    77.  
    78.  
    79.     printf("=================================================\n");
    80.     pFile = fopen(filename, "r");
    81.     if (pFile != NULL) {
    82.         while (fgets(zeile1, leseAusZeile, pFile)) {
    83.       ///////////////////////////////////// wie kann man  diese Funktion in eine Methode reintun ////////////////////////////////////////////////////////////////////
    84.            
    85.             if (strstr(zeile1, (SuchWort_1a_1)) != NULL) {
    86.                    counter++;
    87.                 counter = counter % 6;    // an Tag soll nur 6 mal ein und austemmpeln daher steht 6
    88.                 strZeit_1a_1 = ZeitVonZeileCut(zeile1, 13, 25);  // schneidet die Zeit von der Zeile
    89.                 if (flagSW1 == 1) {
    90.                     printf("ERROR, 1-te kommt mehr mals:  %s:\n", zeileV_SW1);
    91.                     counter--;
    92.                 }
    93.                 flagSW1 = 1; // wenn "gekommen" wiederholt sich markiere das und  danach zeige
    94.                 flagSW2 = 0; //
    95.                 flagSW3 = 0;
    96.                 strcpy(zeileV_SW1, strZeit_1a_1);
    97.                  printf("%d------------%s", counter, zeile1);
    98.                // printf("%d------------%s\n", counter, strZeit_1a_1);
    99.             }
    100.             if (strstr(zeile1, (SuchWort_2a_2)) != NULL) {  // sucht abgeholte zeit
    101.                 counter++;
    102.                 strZeit_2a_2 = ZeitVonZeileCut(zeile1, 13, 25);
    103.                 if (flagSW2 == 1) {
    104.                     printf("ERROR, 2-te kommt mehr mals:  %s:\n", zeileV_SW2);
    105.                     counter--;
    106.                 }
    107.                 flagSW2 = 1;
    108.                 strcpy(zeileV_SW2, strZeit_2a_2);
    109.                 flagSW1 = 0;
    110.                 printf("%d------------%s", counter, zeile1);
    111.                //  printf("%d------------%s\n", counter, strZeit_2a_2);
    112.             }
    113.             if (strstr(zeile1, (SuchWort_2b_2)) != NULL) {  // sucht zuruckgegebene Zeit
    114.                 counter++;
    115.                 strZeit_2b_2 = ZeitVonZeileCut(zeile1, 13, 25);
    116.                 if (flagSW3 == 1) {
    117.                     printf("ERROR, 3-te kommt mehr mals:  %s:\n", zeileV_SW3);
    118.                     counter--;
    119.                 }
    120.                 flagSW3 = 1;
    121.                 strcpy(zeileV_SW3, strZeit_2b_2);
    122.                 printf("%d------------%s", counter, zeile1);
    123.                //  printf("%d------------%s\n", counter, strZeit_2b_2);
    124.                 if (counter == 6) {
    125.                     printf("___________________________________________________________________________\n");
    126.                 }
    127.             }
    128.             ////////////////////////////////////////////////bis hier in eine methode tun///////////////////////////////////
    129.         }
    130.         fclose(pFile);
    131.     } else {
    132.         printf("File ist nicht gefunden\n");
    133.         abort();
    134.     }
    135. }

    Das ist mein Versucht weiss ich nicht was ich da falsch mache... :(
    Code (C):
    1. ////////////////////////////////////////////////einige massen mit diese weiter////////////////////7
    2. #include <stdio.h>
    3. #include <stdlib.h>
    4. #include <string.h>
    5. int InZeitUm(char * zeit);
    6. char * ZeitVonZeileCut(const char * text, int beg, int end);
    7.  
    8. int InZeitUm(char * zeit) { // Die Methode umwandelt die geschinttene Zeit in integer und dann in Millisekunde
    9.  
    10.     char * StundeChar = ZeitVonZeileCut(zeit, 0, 2);
    11.     int stundeInt = atoi(StundeChar);
    12.     int st = stundeInt * 60 * 60 * 1000;
    13.     free(StundeChar);
    14.  
    15.     char * MinuteChar = ZeitVonZeileCut(zeit, 3, 5);
    16.     int minuteInt = atoi(MinuteChar);
    17.     int mi = minuteInt * 60 * 1000;
    18.     free(MinuteChar);
    19.  
    20.     char * SekundeChar = ZeitVonZeileCut(zeit, 6, 8);
    21.     int sekInt = atoi(SekundeChar);
    22.     int se = sekInt * 1000;
    23.     free(SekundeChar);
    24.  
    25.     char * MiSekChar = ZeitVonZeileCut(zeit, 9, 12);
    26.     int msekInt = atoi(MiSekChar);
    27.     free(MiSekChar);
    28.  
    29.     int gesZeitInInt = st + mi + se + msekInt;
    30.     return gesZeitInInt;
    31. }
    32.  
    33. char * ZeitVonZeileCut(const char * text, int beg, int end) {// diese Methode Schneidet die Zeit raus
    34.     int i;
    35.     char *ZeitChar = 0;
    36.     int len = end - beg;
    37.     if (text)
    38.         if (text + beg)
    39.             if (0 < len)
    40.                 if ((ZeitChar = (char *) malloc(1 + len))) {
    41.                     for (i = beg; text[i] != '\0' && i < end; i++)
    42.                         ZeitChar[i - beg] = text[i];
    43.                     ZeitChar[i - beg] = '\0';
    44.                 }
    45.     return ZeitChar;
    46. }
    47.  
    48. void ZeitAnzeige(char *zeile1, char *gesW1, char *gesW2, char *gesW3, int counter) {
    49.     int leseAusZeile = 170;
    50.     char zeileV_SW1[leseAusZeile];
    51.     char zeileV_SW2[leseAusZeile];
    52.     char zeileV_SW3[leseAusZeile];
    53.     char * strZeit_1;
    54.     char * strZeit_2;
    55.     char * strZeit_3;
    56.     int flagSW1 = 1;
    57.     int flagSW2 = 1;
    58.     int flagSW3 = 1;
    59.  
    60.     if (strstr(zeile1, (gesW1)) != NULL) {
    61.         counter++;
    62.         counter = counter % 6; // an Tag soll nur 6 mal ein und austemmpeln daher steht 6
    63.         strZeit_1 = ZeitVonZeileCut(zeile1, 13, 25); // schneidet die Zeit von der Zeile
    64.         if (flagSW1 == 1) {
    65.             printf("ERROR, 1-te kommt mehr mals:  %s:\n", zeileV_SW1);
    66.             counter--;
    67.         }
    68.         flagSW1 = 1; // wenn "gekommen" wiederholt sich anzeigen
    69.         flagSW2 = 0;
    70.         flagSW3 = 0;
    71.         strcpy(zeileV_SW1, strZeit_1);
    72.         // printf("%d------------%s", counter, zeile1);
    73.         printf("%d------------%s\n", counter, strZeit_1);
    74.     }
    75.     if (strstr(zeile1, (gesW2)) != NULL) { // sucht abgeholte zeit
    76.         counter++;
    77.         strZeit_2 = ZeitVonZeileCut(zeile1, 13, 25);
    78.         if (flagSW2 == 1) {
    79.             printf("ERROR, 2-te kommt mehr mals:  %s:\n", zeileV_SW2);
    80.             counter--;
    81.         }
    82.         flagSW2 = 1;
    83.         strcpy(zeileV_SW2, strZeit_2);
    84.         flagSW1 = 0;
    85.         // printf("%d------------%s", counter, zeile1);
    86.         printf("%d------------%s\n", counter, strZeit_2);
    87.     }
    88.     if (strstr(zeile1, (gesW3)) != NULL) { // sucht zuruckgegebene Zeit
    89.         counter++;
    90.         strZeit_3 = ZeitVonZeileCut(zeile1, 13, 25);
    91.         if (flagSW3 == 1) {
    92.             printf("ERROR, 3-te kommt mehr mals:  %s:\n", zeileV_SW3);
    93.             counter--;
    94.         }
    95.         flagSW3 = 1;
    96.         strcpy(zeileV_SW3, strZeit_3);
    97.         // printf("%d------------%s", counter, zeile1);
    98.         printf("%d------------%s\n", counter, strZeit_3);
    99.         if (counter == 6) {
    100.             printf("___________________________________________________________________________\n");
    101.         }
    102.     }
    103. }
    104.  
    105. int main(int argc, char** argv) {
    106.  
    107.     FILE *pFile;
    108.     int leseAusZeile = 170;
    109.     char zeile1[leseAusZeile];
    110.  
    111.     char filename[50] = "/home/alt/2017-Projekte/LukasPost1";
    112.  
    113.  
    114.  
    115.     const char SuchWort_1a_1[80] = "Lukas Maly gekommen";
    116.     const char SuchWort_2a_2 [80] = "Lukas Maly abholte  Wagen <";
    117.     const char SuchWort_2b_2 [80] = "Lukas Maly  zuruckgab Wagen <";
    118.  
    119.     const char SuchWort_4a_1[80] = "Kerstin Maly gekommen";
    120.     const char SuchWort_4a_2 [80] = "Kerstin Maly abholte  Wagen <";
    121.     const char SuchWort_4b_2 [80] = "Kerstin Maly  zuruckgab Wagen <";
    122.  
    123.     int counter = 0;
    124.  
    125.  
    126.     printf("=================================================\n");
    127.     pFile = fopen(filename, "r");
    128.     if (pFile != NULL) {
    129.         while (fgets(zeile1, leseAusZeile, pFile)) {
    130.           //  printf("Die Zeiten von Lukas\n");
    131.             ZeitAnzeige(zeile1, SuchWort_1a_1, SuchWort_2a_2, SuchWort_2b_2, counter);
    132.            
    133.           //  printf("Die Zeiten von Kersint\n");
    134.             ZeitAnzeige(zeile1, SuchWort_4a_1, SuchWort_4a_2, SuchWort_4b_2, counter);
    135.         }
    136.         fclose(pFile);
    137.     } else {
    138.         printf("File ist nicht gefunden\n");
    139.         abort();
    140.     }
    141. }
    Danke im voraus :) Beste Grüße Sergei
     
  10. cwriter

    cwriter Erfahrenes Mitglied

    Habe schon schlimmeres gesehen.
    Langsam solltest du den Ablauf kennen: Es ist für uns relativ mühsam, wenn wir jedes Mal zuerst herausfinden müssen, was dein Code denn momentan macht (und wieso das unerwünscht ist).
    Genaue Problembeschreibungen sind fast so wichtig wie der Code selbst.

    Aber wenn ich den Code so anschaue, scheinst du die Vermischung der Namen nicht zu wollen, die momentan stattfindet.
    Dazu gibt es 2 Lösungen:
    1) Du speicherst die einzelnen Zeilen in einem Buffer pro Person. Das ist die mühsame, aber effizientere Variante.
    2) Du gehst die Datei einfach komplett 2x durch:
    Code (C):
    1. pFile = fopen(filename, "r");
    2.     if (pFile != NULL) {
    3.         while (fgets(zeile1, leseAusZeile, pFile)) {
    4.           //  printf("Die Zeiten von Lukas\n");
    5.             ZeitAnzeige(zeile1, SuchWort_1a_1, SuchWort_2a_2, SuchWort_2b_2, counter);
    6.         }
    7.         rewind(pFile); //Datei zurückspulen
    8.         while (fgets(zeile1, leseAusZeile, pFile)) {
    9.               //  printf("Die Zeiten von Kersint\n");
    10.               ZeitAnzeige(zeile1, SuchWort_4a_1, SuchWort_4a_2, SuchWort_4b_2, counter);
    11.         }
    12.         fclose(pFile);
    13.         return 0;
    14.     } else {
    15.         printf("File ist nicht gefunden\n");
    16.         return -1;  //Abort() ist nicht schön (es macht den Code weniger lesbar).
    17.     }
    Damit solltest du erreichen, was du willst (den Rest des Codes habe ich nicht weiter überprüft).

    /EDIT:
    Sehe gerade: So geht das natürlich nicht. Wenn du die Buffer schon verwendest, diese aber innerhalb der Funktion "ZeitAnzeige()" definierst, dann sind sie nur während einer Ausführung dieser Funktion gültig. Sobald diese Funktion beendet, werden die Daten wieder gelöscht (oder genauer: Der Computer darf es löschen).
    Wenn du deine Variablen aus dieser Funktion raus nimmst (global machst), dann sollte der Code oben funktionieren. Falls du den Buffer-Ansatz weiterverfolgen willst, musst du Arrays bemühen. (Habe ich schonmal angedeutet, glaube ich).

    Gruss
    cwriter
     
    Sergei gefällt das.
  11. Sergei

    Sergei Mitglied

    Guten Morgen cwriter,
    danke für die Antwort
    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::(
     
  12. cwriter

    cwriter Erfahrenes Mitglied

    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
     
  13. Sergei

    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
    Code (C):
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4. int InZeitUm(char * zeit);
    5. char * ZeitVonZeileCut(const char * text, int beg, int end);
    6.  
    7. int InZeitUm(char * zeit) { // Die Methode umwandelt die geschinttene Zeit in integer und dann in Millisekunde
    8.  
    9.     char * StundeChar = ZeitVonZeileCut(zeit, 0, 2);
    10.     int stundeInt = atoi(StundeChar);
    11.     int st = stundeInt * 60 * 60 * 1000;
    12.     free(StundeChar);
    13.  
    14.     char * MinuteChar = ZeitVonZeileCut(zeit, 3, 5);
    15.     int minuteInt = atoi(MinuteChar);
    16.     int mi = minuteInt * 60 * 1000;
    17.     free(MinuteChar);
    18.  
    19.     char * SekundeChar = ZeitVonZeileCut(zeit, 6, 8);
    20.     int sekInt = atoi(SekundeChar);
    21.     int se = sekInt * 1000;
    22.     free(SekundeChar);
    23.  
    24.     char * MiSekChar = ZeitVonZeileCut(zeit, 9, 12);
    25.     int msekInt = atoi(MiSekChar);
    26.     free(MiSekChar);
    27.  
    28.     int gesZeitInInt = st + mi + se + msekInt;
    29.     return gesZeitInInt;
    30. }
    31.  
    32. char * ZeitVonZeileCut(const char * text, int beg, int end) {// diese Methode Schneidet die Zeit raus
    33.     int i;
    34.     char *ZeitChar = 0;
    35.     int len = end - beg;
    36.     if (text)
    37.         if (text + beg)
    38.             if (0 < len)
    39.                 if ((ZeitChar = (char *) malloc(1 + len))) {
    40.                     for (i = beg; text[i] != '\0' && i < end; i++)
    41.                         ZeitChar[i - beg] = text[i];
    42.                     ZeitChar[i - beg] = '\0';
    43.                 }
    44.     return ZeitChar;
    45. }
    46.  
    47. int main(int argc, char** argv) {
    48.  
    49.     FILE *pFile;
    50.     int leseAusZeile = 170;
    51.     char zeile1[leseAusZeile];
    52.     char zeileV_SW1[leseAusZeile];
    53.  
    54.     char filename[50] = "/home/alt/2017-Projekte/LukasPost1";
    55.  
    56.     const char SuchWort_1a_1[80] = "Lukas Maly gekommen";
    57.     const char SuchWort_2a_2 [80] = "Lukas Maly abholte  Wagen <";
    58.     const char SuchWort_2b_2 [80] = "Lukas Maly  zuruckgab Wagen <";
    59.  
    60.     const char SuchWort_4a_1[80] = "Kerstin Maly gekommen";
    61.     const char SuchWort_4a_2 [80] = "Kerstin Maly abholte  Wagen <";
    62.     const char SuchWort_4b_2 [80] = "Kerstin Maly  zuruckgab Wagen <";
    63.  
    64.     char * strZeit_1a_1;
    65.     char * strZeit_2a_2;
    66.     char * strZeit_2b_2;
    67.  
    68.     int flagSW1 = 0; // boolean für 1-te Wort  wenn sich wiederholt
    69.     int flagSW2 = 0;  // boolean für 3-te Wort  wenn sich wiederholt
    70.     int flagSW3 = 0;  // boolean für 4-te Wort  wenn sich wiederholt
    71.  
    72.     int counter = 0;
    73.  
    74.  
    75.     printf("=================================================\n");
    76.     pFile = fopen(filename, "r");
    77.     if (pFile != NULL) {
    78.         while (fgets(zeile1, leseAusZeile, pFile)) {
    79.            ///////////// wie kann man  diese Funktion in eine Methode reintun //////////////////////////////
    80.  
    81.             if (strstr(zeile1, (SuchWort_1a_1)) != NULL) {  // wird erste Wort gesucht
    82.                 counter++;                                  // wenn das gibt erhöhe counter um 1
    83.                 counter = counter % 6; // am Tag soll nur 6 mal sich einstemmpeln, daher steht 6
    84.                 strZeit_1a_1 = ZeitVonZeileCut(zeile1, 13, 25); // schneidet die Zeit von der Zeile
    85.                 if (flagSW1 == 1) {                             // wenn "gekommen" war mehr mals dann anzeige nächste gekommene als Fehlermeldung
    86.                     printf("ERROR, 1-te kommt mehr mals:  %s:\n", strZeit_1a_1);
    87.                     counter--;                                  // bei wiederholungen soll wieder counter runter gesetzt werden
    88.                 }
    89.                 flagSW1 = 1;                      // wenn "gekommen" wiederholt sich markiere das und  danach zeige
    90.                 flagSW2 = 0;                      // das ist bollean für nachste gesuchteWörter
    91.                 flagSW3 = 0;
    92.                 printf("%d------------%s", counter, zeile1); // Rest ist gleiche, wird genau so 2 und 3 wort gesucht
    93.                 // printf("%d------------%s\n", counter, strZeit_1a_1);
    94.             }
    95.             if (strstr(zeile1, (SuchWort_2a_2)) != NULL) { // sucht abgeholte zeit
    96.                 counter++;
    97.                 strZeit_2a_2 = ZeitVonZeileCut(zeile1, 13, 25);
    98.                 if (flagSW2 == 1) {
    99.                     printf("ERROR, 2-te kommt mehr mals:  %s:\n", strZeit_2a_2);
    100.                     counter--;
    101.                 }
    102.                 flagSW2 = 1;
    103.              
    104.                 flagSW1 = 0;
    105.                 printf("%d------------%s", counter, zeile1);
    106.             }
    107.             if (strstr(zeile1, (SuchWort_2b_2)) != NULL) { // sucht zuruckgegebene Zeit
    108.                 counter++;
    109.                 strZeit_2b_2 = ZeitVonZeileCut(zeile1, 13, 25);
    110.                 if (flagSW3 == 1) {
    111.                     printf("ERROR, 3-te kommt mehr mals:  %s:\n", strZeit_2b_2);
    112.                     counter--;
    113.                 }
    114.                 flagSW3 = 1;
    115.                 printf("%d------------%s", counter, zeile1);
    116.                 //  printf("%d------------%s\n", counter, strZeit_2b_2);
    117.                 if (counter == 6) {
    118.                     printf("___________________________________________________________________________\n");
    119.                 }
    120.             }  
    121.        }
    122.         fclose(pFile);
    123.         return 0;
    124.     } else {
    125.         printf("File ist nicht gefunden\n");
    126.         return -1;
    127.     }
    128. }
    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...

    Code (C):
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4.  
    5. char * ZeitVonZeileCut(const char * text, int beg, int end) {// diese Methode Schneidet die Zeit raus
    6.     int i;
    7.     char *ZeitChar = 0;
    8.     int len = end - beg;
    9.     if (text)
    10.         if (text + beg)
    11.             if (0 < len)
    12.                 if ((ZeitChar = (char *) malloc(1 + len))) {
    13.                     for (i = beg; text[i] != '\0' && i < end; i++)
    14.                         ZeitChar[i - beg] = text[i];
    15.                     ZeitChar[i - beg] = '\0';
    16.                 }
    17.     return ZeitChar;
    18. }
    19.  
    20. char * ZeigeErsteZeit(const char * SuchWort_1a_1, char *zeile1, char *strZeit_1a_1, char *textError1, int counter, int flagSW1, int flagSW2, int flagSW3) {
    21.     if (strstr(zeile1, (SuchWort_1a_1)) != NULL) { // wird erste Wort gesucht
    22.  
    23.         strZeit_1a_1 = ZeitVonZeileCut(zeile1, 13, 25); // schneidet die Zeit von der Zeile
    24.         if (flagSW1 == 1) { // wenn "gekommen" war mehr mals dann anzeige das als Fehlermeldung
    25.             textError1 = "ERROR, 1-te kommt mehr mals:";
    26.             strcat(textError1, strZeit_1a_1); // verkettet geschnittene Zeit und den Text wo sagt Das ist eine Error zusammen und wird das ausgegeben
    27.             return textError1;
    28.             counter--; // bei wiederholungen soll wieder counter runter gesetzt werden
    29.         }
    30.         flagSW1 = 1; // wenn "gekommen" wiederholt sich markiere das und  danach zeige
    31.         flagSW2 = 0; //
    32.         flagSW3 = 0;
    33.     }
    34.     return strZeit_1a_1;
    35.  
    36. }
    37.  
    38. char * ZeigeZweiteZeit(const char * SuchWort_2a_2, char *zeile1, char *strZeit_2a_2, char * textError2, int counter, int flagSW1, int flagSW2, int flagSW3) {
    39.     if (strstr(zeile1, (SuchWort_2a_2)) != NULL) { // sucht abgeholte zeit
    40.         strZeit_2a_2 = ZeitVonZeileCut(zeile1, 13, 25);
    41.         if (flagSW2 == 1) {
    42.             textError2 = "ERROR, 2-te kommt mehr mals:";
    43.             strcat(textError2, strZeit_2a_2);
    44.             return textError2;
    45.             counter--;
    46.         }
    47.         flagSW2 = 1;
    48.         flagSW1 = 0;
    49.         return strZeit_2a_2;
    50.     }
    51. }
    52.  
    53. char * ZeigeDritteZeit(const char * SuchWort_2b_2, char *zeile1, char *strZeit_2b_2, char *textError3, int counter, int flagSW1, int flagSW2, int flagSW3) {
    54.     if (strstr(zeile1, (SuchWort_2b_2)) != NULL) { // sucht zuruckgegebene Zeit
    55.         strZeit_2b_2 = ZeitVonZeileCut(zeile1, 13, 25);
    56.         if (flagSW3 == 1) {
    57.             counter--;
    58.             textError3 = "ERROR, 2-te kommt mehr mals:";
    59.             strcat(textError3, SuchWort_2b_2);
    60.             return textError3;
    61.         }
    62.         flagSW3 = 1;
    63.         return strZeit_2b_2;
    64.         if (counter == 6) {
    65.             printf("___________________________________________________________________________\n");
    66.         }
    67.     }
    68. }
    69.  
    70. int main(int argc, char** argv) {
    71.     int N = 80;
    72.     FILE *pFile;
    73.     char zeile1[N];
    74.  
    75.     char filename[50] = "/home/alt/2017-Projekte/LukasPost1";
    76.  
    77.     const char SuchWort_1a_1[80] = "Lukas Maly gekommen";
    78.     const char SuchWort_2a_2 [80] = "Lukas Maly abholte  Wagen <";
    79.     const char SuchWort_2b_2 [80] = "Lukas Maly  zuruckgab Wagen <";
    80.  
    81.     const char SuchWort_4a_1[80] = "Kerstin Maly gekommen";
    82.     const char SuchWort_4a_2 [80] = "Kerstin Maly abholte  Wagen <";
    83.     const char SuchWort_4b_2 [80] = "Kerstin Maly  zuruckgab Wagen <";
    84.  
    85.     char * strZeit_1a_1;
    86.     char * strZeit_2a_2;
    87.     char * strZeit_2b_2;
    88.  
    89.     char *textError1;
    90.     char *textError2;
    91.     char *textError3;
    92.  
    93.     char *lukasErste;
    94.     char *lukasZweite;
    95.     char *lukasDritte;
    96.  
    97.     char *kerstinsErste;
    98.     char *kerstinsZweite;
    99.     char *kerstinsDritte;
    100.  
    101.     int flagSW1 = 0; // boolean für 1-te Wort  wenn sich wiederholt
    102.     int flagSW2 = 0; // boolean für 3-te Wort  wenn sich wiederholt
    103.     int flagSW3 = 0; // boolean für 4-te Wort  wenn sich wiederholt
    104.  
    105.     int counter = 0;
    106.  
    107.     printf("=================================================\n");
    108.     pFile = fopen(filename, "r");
    109.     if (pFile != NULL) {
    110.         while (fgets(zeile1, N, pFile)) {
    111.             counter = counter % 6; // an Tag soll nur 6 mal ein und austemmpeln daher steht 6
    112.             ///////////// wie kann man  diese Funktion in eine Methode reintun //////////////////////////////
    113.             lukasErste = ZeigeErsteZeit(SuchWort_4a_1, zeile1, strZeit_1a_1, textError1, counter, flagSW1, flagSW2, flagSW3);
    114.             counter++; // wenn das gibt erhöhe counter um 1
    115.             printf("%d–––––%s\n", counter, lukasErste);
    116.             lukasZweite = ZeigeZweiteZeit(SuchWort_2a_2, zeile1, strZeit_2a_2, textError2, counter, flagSW1, flagSW2, flagSW3);
    117.             counter++; // wenn das gibt erhöhe counter um 1
    118.             printf("%d–––––%s\n", counter, lukasZweite);
    119.             lukasDritte = ZeigeDritteZeit(SuchWort_2b_2, zeile1, strZeit_2b_2, textError3, counter, flagSW1, flagSW2, flagSW3);
    120.             counter++; // wenn das gibt erhöhe counter um 1
    121.             printf("%d–––––%s\n", counter, lukasDritte);
    122.             kerstinsErste = ZeigeErsteZeit(SuchWort_1a_1, zeile1, strZeit_1a_1, textError1, counter, flagSW1, flagSW2, flagSW3);
    123.             counter++; // wenn das gibt erhöhe counter um 1
    124.             printf("%d–––––%s\n", counter, kerstinsErste);
    125.             kerstinsZweite = ZeigeZweiteZeit(SuchWort_4a_2, zeile1, strZeit_2a_2, textError2, counter, flagSW1, flagSW2, flagSW3);
    126.             counter++; // wenn das gibt erhöhe counter um 1
    127.              printf("%d–––––%s\n", counter, kerstinsZweite);
    128.             kerstinsDritte = ZeigeDritteZeit(SuchWort_4b_2, zeile1, strZeit_2b_2, textError3, counter, flagSW1, flagSW2, flagSW3);
    129.             counter++; // wenn das gibt erhöhe counter um 1
    130.             printf("%d–––––%s\n", counter, kerstinsDritte);
    131.             ////////////////////////////////////////////////bis hier in eine methode tun////////////////////////////////////                      
    132.         }
    133.         fclose(pFile);
    134.         return 0;
    135.     } else {
    136.         printf("File ist nicht gefunden\n");
    137.         return -1;
    138.     }
    139. }
    das ist datei wo man muss die Zeiten rausnehmen sollte
    Code (Text):
    1. deb|12-03-08|06:00:08.651| Lukas Maly gekommen---------------------
    2. deb|12-03-08|06:00:08.652| Lukas Maly gekommen---------------------
    3.  
    4. deb|12-03-08|06:00:08.653| Lukas Maly gekommen ____________________
    5. deb|12-03-08|06:03:08.111| Lukas Maly abholte  Wagen <00991>-------
    6. deb|12-03-08|06:03:08.122| Lukas Maly abholte  Wagen <00991>_______
    7. deb|12-03-08|06:11:08:134| Kerstin Maly gekommen
    8. deb|12-03-08|06:15:08.132| India  Maly gekommen
    9. deb|12-03-08|06:16:08.132| Kerstin Maly abholte  Wagen <229>
    10. deb|12-03-08|06:17:08.132| India  Maly abholte  Wagen <1000>
    11. deb|12-03-08|10:00:08.600| Lukas Maly  zuruckgab Wagen <00991>_____
    12. deb|12-03-08|10:00:08.601| Lukas Maly gekommen---------------------
    13. deb|12-03-08|10:00:08.602| Lukas Maly gekommen_____________________
    14. deb|12-03-08|10:06:08.145| Lukas Maly abholte  Wagen <00992>______
    15. deb|12-03-08|11:20:08.186| Kerstin Maly zuruckgab Wagen <229>
    16. deb|12-03-08|11:20:08.111| Kerstin Maly gekommen
    17. deb|12-03-08|11:25:08.167| Kerstin Maly abholte  Wagen <230>
    18. deb|12-03-08|11:00:08.100| India  Maly abholte  Wagen <1001>
    19. deb|12-03-08|13:00:08.345| Lukas Maly  zuruckgab Wagen <00992>____
    20. deb|12-03-08|13:07:70.100| Kerstin Maly zuruckgab Wagen <230>
    21. deb|12-03-08|15:08:08.189| India  Maly abholte  Wagen <1002>
    22.  
    23.  
    24.  
    25. deb|13-03-08|06:11:08:134| Lukas Maly gekommen
    26. deb|13-03-08|06:15:08.132| India  Maly gekommen
    27. deb|13-03-08|06:15:08.333| Kerstin Maly gekommen
    28. deb|13-03-08|06:16:08.132| Kerstin Maly abholte  Wagen <231>
    29. deb|13-03-08|06:17:08.132| India  Maly abholte  Wagen <1003>
    30. deb|13-03-08|10:06:08.567| Lukas Maly abholte  Wagen <00993>_______
    31. deb|13-03-08|11:20:08.186| Kerstin Maly zuruckgab Wagen <231>
    32. deb|13-03-08|11:25:08.444| Kerstin Maly gekommen
    33. deb|13-03-08|11:25:08.167| Kerstin Maly abholte  Wagen <232>
    34. deb|13-03-08|11:00:08.100| India  Maly abholte  Wagen <1004>
    35. deb|13-03-08|13:00:08.001| Lukas Maly  zuruckgab Wagen <00993>_____
    36. deb|13-03-08|13:00:08.002| Lukas Maly  zuruckgab Wagen <00993>_____
    37. deb|13-03-08|13:07:70.100| Kerstin Maly zuruckgab Wagen <232>
    38. deb|13-03-08|13:07:70.200| Kerstin Maly zuruckgab Wagen <232>
    39. deb|13-03-08|15:05:08.345| Lukas Maly gekommen______________________
    40. deb|13-03-08|15:08:08.189| Lukas Maly abholte  Wagen <00994>________
    41. deb|13-03-08|18:20:08.100| Lukas Maly  zuruckgab Wagen <00994>______
    42. deb|13-03-08|18:20:08.200| Lukas Maly  zuruckgab Wagen <00994>_____
    43.  
    44. deb|14-03-08|06:00:08.650| Lukas Maly gekommen______________________
    45. deb|14-03-08|06:03:08.152| Lukas Maly abholte  Wagen <00995>________
    46. deb|14-03-08|10:00:08.600| Lukas Maly  zuruckgab Wagen <00995>______
    47. deb|14-03-08|10:00:08.600| Lukas Maly gekommen______________________
    48. deb|14-03-08|10:06:08.145| Lukas Maly abholte  Wagen <00996>________
    49. deb|14-03-08|10:00:08.345| Lukas Maly  zuruckgab Wagen <00996>______
     
Die Seite wird geladen...