tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
23
ZUGRIFFE
870
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Paper Paper ist offline Mitglied Silber
    Registriert seit
    Sep 2011
    Beiträge
    56
    Guten Morgen an alle ich muss euch mal belässtigen ich bin einfach nicht für's Programmieren geschaffen deshalb brauch ich eure Hilfe.

    Die Aufgabe ist es das die Software eine Logdatei einliesst, den Unix Timestamp in ein Datum und eine Uhrzeit umwandelt und das Datum in eine neue Datei schreibt. Soweit klappt es auch nur er anstelle des Datums in der neuen textdatei anstelle des Datums eine (NULL) einträgt. Ich habe 100mal geschaut aber ich finde den Fehler einfach nicht ich bin hier richtig am verzweifeln.



    Ich habe folgenden Code:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
     
     
     
    int main()
     
     
    {
       int unixModus = 0;
       int lnr = 0,mtime=0;
       int ijahr=0,imonat=0,itag=0,istd=0,imin=0,isek=0;  
       
        //Auswahl
        printf("Bitte waehlen:\n\n<1> Datum --> Unix\n\n<2> Unix --> Datum\n\n<3> Log auslesen\n\n");
        scanf("%d",&unixModus);
     
     
        
        
    switch(unixModus)
    {
       case 1:
            //Abfrage des Datums und der Uhrzeit
            printf("\n\n\nBitte geben Sie das Datum [dd.mm.yyyy] ein:::\n");
            scanf("%d.%d.%d",&itag,&imonat,&ijahr);   
      
            printf("Bitte geben Sie die Uhrzeit [hh:mm:ss] ein:::\n");
            scanf("%d:%d:%d",&istd,&imin,&isek);
            
            printf("\n\n\nBitte waehlen: <1> UTC/GMT  ||  <2> LocalTime:::\n");
            scanf("%d",&mtime);
            //Ausgabe der Unixzeit ---> Aufruf der Funktion date2Unix()
            if (mtime==2)
            printf("UniXZeit::: %d [LocalTimezone]\n\n",date2Unix(ijahr,imonat ,itag,istd,imin,isek,mtime));
            else if(mtime==1)
            printf("UniXZeit::: %d [UTC/GMT]\n\n",date2Unix(ijahr,imonat ,itag,istd,imin,isek,mtime));
            else
            errorSend();
            break;
     
       case 2:
            
            //Abfrage des Timestamps
           printf("\n\n\nBitte geben Sie den Unix Timestamp ein:::\n");
           scanf("%d",&lnr);
           
           printf("\n\n\nBitte waehlen: <1> UTC/GMT  ||  <2> LocalTime:::\n");
           scanf("%d",&mtime);
           //Ausgabe des Datums ---> Aufruf der Funktion Unix2Date()
           printf("\n\nUniXZeit::: %d\n\n--> Datum: %s\n\n\n",lnr,Unix2Date(lnr,mtime));
           break;
     
       case 3:
           //Aufruf der Funktion zur Verarbeitung der .log-Dateien
           logConvert();
           
           
           
           
     
          
           break;
     
       default:
           //Default-Ausgabe wenn die Auswahl falsch war    
           printf("\n:::::::::::::::::::::::::::::::::::::::::::::\n");   
           printf("\n\n\nFalsche Eingabe ::: Bitte Neustarten!\n\n");
          
    } 
     
      
    system("PAUSE");    
    return 0;    
    }
     
     
     
     
     
     
     
     
     
     
     
    //---------------UNIX2DATE--------------------
     
    int Unix2Date(int unixzeit,int modusTime)
    {
      //Variabeln für die einzelnen Datumsteile 
      int ijahr=0,imonat=0,itag=0,istd=0,imin=0,isek=0;
      char timezone[30];
      
      
      char stringVar[20];
      int sommerZeit=0;
      
      //Endwert der UnixZeit 19.01.2038 um 4:14:07
      int unixMax = 2147483647;
      
      //Überprüfung,ob die eingegebene Unixzeit gültig ist
      if (unixzeit>>unixMax)
      {
                              
         errorSend(); 
       
      }
      
      //time_t ist ein Zeitstempel ... in Sek ab 1970
      //wie UnixZeit
      time_t unixStamp = unixzeit;
      
      //Struktur für time_t
      struct tm * unixConvert;
      
      //String zum Speichern des Datums
      char cbuffer[80];
      
      //Struktur bekommt den Zeitstempel
       
      if(modusTime==2)
      unixConvert = localtime(&unixStamp);
      else if (modusTime==1)
      unixConvert = gmtime(&unixStamp);
      
      //Speichern der einzelnen Datumsteile in Variabeln
      strftime( stringVar, 20, "%d", unixConvert ); //Tag
      itag = atoi(stringVar);
      strftime( stringVar, 20, "%m", unixConvert ); //Monat
      imonat = atoi(stringVar);
      strftime( stringVar, 20, "%Y", unixConvert ); //Jahr
      ijahr = atoi(stringVar);
      strftime( stringVar, 20, "%H", unixConvert ); //Stunde
      istd = atoi(stringVar);
      strftime( stringVar, 20, "%M", unixConvert ); //Minute
      imin = atoi(stringVar);
      strftime( stringVar, 20, "%S", unixConvert ); //Sekunde
      isek = atoi(stringVar);
      
      
      //Zeitzone
      strftime( timezone, 30, "%z", unixConvert );
      
     
    //Ausgabestring  
    char str1[50]; 
     
    //Zwischenspeicher
    char buffer[20];
     
     
      //Umwandlung und Zusammenfassung in einen Return-String
     strcpy (str1,itoa(itag,buffer,10));
     strcat (str1,".");
     strcat (str1,itoa(imonat,buffer,10));
     strcat (str1,".");
     strcat (str1,itoa(ijahr,buffer,10));
     strcat (str1," um ");
     strcat (str1,itoa((istd),buffer,10));
     strcat (str1,":");
     strcat (str1,itoa(imin,buffer,10));
     strcat (str1,":");
     strcat (str1,itoa(isek,buffer,10));
     if (modusTime==2)
     {
     strcat (str1,"  ");
     strcat (str1,timezone);
    }
    else
    {
     strcat (str1,"  ");
     strcat (str1,"UTC/GMT");    
    }
     //Rückgabe des Datums
     printf (str1);
     return 0; 
    }
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    //--------------------LOGCONVERT--------------------
     
     
     
     
    int logConvert()
    {
     
    //Zwischenspeicher fürs Einlesen   
    char puffer[256];
    int line= sizeof(puffer);
     
    //Trennzeichen
    char del[]="\n";
     
    //Zählvariabeln
    int i =0;
     
      //Festlegen des Pfades für die Input-Datei
      FILE *fileOutput;
           fileOutput = fopen( "squidNeu.log", "w");
     
     
     
      //Überprüfung, ob Datei vorhanden ist  
      if(NULL == fileOutput) {
          fprintf(stderr, "Fehler beim Oeffnen ...\n");
          return EXIT_FAILURE;
       }
     
       //Festlegen des Pfades für die Output-Datei     
      FILE *fileInput;
           fileInput = fopen( "squid123.log", "r");
      
      //Überprüfung, ob Datei vorhanden ist        
      if(NULL == fileInput) {
          fprintf(stderr, "Fehler beim Oeffnen ...\n");
          return EXIT_FAILURE;
       } 
      
     
    //Ergebnisvariable
    int unixzeit2[1000];    
     
    //Zählvariable
    int counter=0;
     
    //Pointer für die Stringteilung
    char *wordptr;
     
       //solange Zeilen vorhanden sind wird eingelesen
       while(fgets (puffer, line, fileInput))
       {
       
            //erste Zeile wird eingelesen
           wordptr = strtok(puffer,del);
                          
                             
                           
            //Überprüfung, ob man am Ende des Strings ist          
            while(wordptr == NULL);
            {
                         
                         
                         
                         
                         
                         //printf("WORDPTR: %s\n",wordptr);
                         sscanf(wordptr, "%d",&unixzeit2[counter]);
                         //printf("UNIX: %d\n",unixzeit2[counter]);
                         counter++;
     
                         //Sprung zum nächsten Satzteil
                         //Stelle durch NULL markiert
                         wordptr = strtok(NULL,del);
                           
            }
       }
     
     
     
    int a=0;
    //Ausgabe des ErgebnisArrays in die Output-Datei
    for(;a<counter;a++)
    {                  
                       
    //printf("Unix: %d  --> Datum: %s\n",unixzeit2[a],Unix2Date(unixzeit2[a]));                              
    fprintf(fileOutput,"Unix: %d --> Datum: %s \n",unixzeit2[a],Unix2Date(unixzeit2[a],2));
     
    }
     
    //Schließen der Dateien
    fclose(fileInput);
    fclose(fileOutput);
     
           
    }
     
     
    int date2Unix(int ijahr,int imonat ,int itag,int istd,int imin,int isek,int modusTime)
    {
     
     
     
    //Zeitzone [GMT+1]
    int timeZoneBonus = 1;
    int sommerZeit=0;
     
    //Ergebnisdatei
    int unixzeit3;
     
    int y=0;
     
    //Array zum speichern der Eingaben
    char datum[11];
    char uhrzeit[9];
     
     
    int convert [10];
     
    //Zeiger für die "Zerlegung" des Datum-/Uhrzeit-Strings
    char *dateptr;
    char *dateptr2;
     
    //Tage im Jahr bei Monatsanfang // ohne Schaltjahr
    int daysUntilMonth[12] = {0,31,59,90,120,151,181,212,243,273,304,334};
     
    //Wie viele Tage hat der Monat //ohne Schaltjahr
    int monthEnd[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
     
     
    //Ende Februar 28 oder 29 
    if (ijahr %4 == 0 && (ijahr %100 != 0 || ijahr %400 ==0))
    {
       //Addition des Schalttages       
       monthEnd[2] = monthEnd[2] + 1;
    }
     
    //Überprüfung der Eingabe, ob Datum gültig
    if(ijahr>=1970 && ijahr<=2038)
    {
        if (imonat>=1 && imonat<=12)
        {
                      
                      if(itag >=1 && itag <= monthEnd[imonat])
                      {
     
                              if(istd>=0 && istd<=23)
                              {
                                         if(imin>=0 && imin<=59)
                                         {
                                                    
                                                    if(isek>=0 && isek<=59)
                                                    {
     
    //Startjahr der Unixzeit  
    int curJahr=1970;
    int schaltTage = 0;
     
    //Schleife die für jedes Schltjahr einen "Schalttag" hinzu rechnet 
    //von 1970 bis zum angegebenen
     
    for(;curJahr<=ijahr-1;curJahr++)
    {
                                    
      //Jahr ist ein Schaltjahr, wenn
      // Jahreszahl durch 4 teilbar ist und entweder nicht durch 100 teilbar ist
      // oder durch 400
      
      if(curJahr%4== 0 && (curJahr%100!=0 || curJahr%400==0))
      
      {
      schaltTage=schaltTage + 1;          
      
     }
      
    }
     
    //Abfangen der Sommerzeit
    if (imonat>=3 && itag>=27 && istd >=2 && imonat <=10 && itag<=30 && istd<=3)
    sommerZeit = 1;
    else
    sommerZeit = 0;
     
     
    //Jahre seit Unix
     
    if ( (imonat>2) && (ijahr%4==0 && (ijahr%100!=0 || ijahr%400==0)) )
    {
     unixzeit3 = unixzeit3 + 3600*24;
    }
      
      ijahr= ijahr-1970;
     
    //berechnung der Unixzeit
    if (modusTime==1)
    { 
    unixzeit3=isek + 60*imin + 3600*(istd )
                   +(daysUntilMonth[imonat-1]+itag-1)*3600*24
                   +(ijahr*365+schaltTage)*3600*24;
    } 
    else if (modusTime==2) 
    {
    unixzeit3=isek + 60*imin + 3600*(istd- sommerZeit - timeZoneBonus)
                   +(daysUntilMonth[imonat-1]+itag-1)*3600*24
                   +(ijahr*365+schaltTage)*3600*24;
        
    }
     
    //Ausgabe
        
                      
    }
    else
    errorSend();    
    }
    else
    errorSend();    //Fehlerausgabe bei falschem Datum
    }
    else
    errorSend();    //oder Uhrzeit
    }
    else
    errorSend();
    }
    else
    errorSend();
    }
    else
    errorSend();
     
     
    //Berechnete Unixzeit gültig****?
    if(unixzeit3<=2147483647 && unixzeit3>=0)
    {
    return unixzeit3;  //Rückgabe der Unixzeit
    }
    else
    errorSend();       //sonst Fehler
     
     
    }
     
     
    //Fehlermeldung 
    int errorSend()
    {
     printf("\n:::::::::::::::::::::::::::::::::::::::::::::\n");     
     printf("\n\n\nFalsche Eingabe ::: Bitte Neustarten!\n\n");
     printf("Unix Timestamp began am 01.01.1970 um 00:00:00 [UTC/GMT]\n\n\n"); 
     printf("           und endet am 19.01.2038 um 03:14:07 [UTC/GMT]\n\n\n"); 
     
    system("Pause");
         
    }

    also der Teil den ich meine beginnt ab "//--------------------LOGCONVERT--------------------" Zeile 204

    Die neue Text datei die er ausgibt sieht dann so aus

    Unix: 1310139853 --> Datum: (null)
    Unix: 1310139853 --> Datum: (null)
    Unix: 1310139853 --> Datum: (null)
    Unix: 1310139853 --> Datum: (null)
    Unix: 1310139853 --> Datum: (null)
    Unix: 1310139853 --> Datum: (null)
    Unix: 1310139853 --> Datum: (null)
    Unix: 1310139855 --> Datum: (null)

    ich hoffe ihr könnt mir helfen.

    Grüße Paper
    Geändert von Paper (16.11.11 um 10:54 Uhr)
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Code c:
    1
    
    fprintf(fileOutput,"Unix: %d --> Datum: %s \n", unixzeit2[a], Unix2Date(unixzeit2[a],2));
    die Funktion Unix2Date hat folgenden Prototyp:
    Code c:
    1
    
    int Unix2Date(int, int)
    sie gibt also einen int zurück...

    In Funktion Unix2Date, Zeile 88:
    Code c:
    1
    2
    
        printf (str1); // schreibt das Datum auf die Kommandozeile
      return 0; // gibt immer 0 zurück
    Hä?

    Sorry, aber hast du wirklich erwartet, das das funktioniert?

    Gruß

    \edit: WTF?
    Code c:
    1
    2
    3
    4
    5
    6
    
      strftime( stringVar, 20, "%d", unixConvert ); //Tag
      itag = atoi(stringVar);
     
    ...
     
    strcpy (str1,itoa(itag,buffer,10));
    Du extrahierst also aus dem Datum den Tag als String, konvertierst ihn in einen int, um ihn dann wieder in einen String zu konvertieren... und das für alle Datumswerte um sie in einen Gesamtstring zu schreiben? Dir ist schon klar, das du einfach nur die strftime Funktion dafür benutzen mußt?
    Geändert von deepthroat (16.11.11 um 11:33 Uhr)
    Paper bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Paper Paper ist offline Mitglied Silber
    Registriert seit
    Sep 2011
    Beiträge
    56
    Den Code habe ich so übernommen, ich soll damit weiterarbeiten und halt den LogConvert machen.
    Den jenigen der das alles geschrieben hat, den seh ich nie mehr wieder weil der nur kurz hier war. Jetzt wo er weg ist soll ich das mit seinem Code machen. Verstehen tu ich manche sachen auch nicht aber wenn ich's verändere läuft garnichtsmehr . Ich versuchs hier so gut wie es geht . Meine ganzen versuche da i.was zu ändern sind gescheitert weil es dann garnichtmehr funktioniert hat.



    Zitat Zitat von deepthroat Beitrag anzeigen
    In Funktion Unix2Date, Zeile 88:
    Code c:
    1
    2
    
        printf (str1); // schreibt das Datum auf die Kommandozeile
      return 0; // gibt immer 0 zurück
    Hä?
    Da weiß ich nicht was genau falsch ist. Ich habe daran gedacht dieses str1 zu ändern aber dann stürzt das Programm ab.


    Zitat Zitat von deepthroat Beitrag anzeigen

    WTF?
    Code c:
    1
    2
    3
    4
    5
    6
    
      strftime( stringVar, 20, "%d", unixConvert ); //Tag
      itag = atoi(stringVar);
     
    ...
     
    strcpy (str1,itoa(itag,buffer,10));
    Ist das hier jetzt falsch oder einfach nur umständlich geschrieben?

    Das was ich daran erfolgreich geändert habe ist einfach nur das hier

    Code c:
    1
    2
    3
    
    //Festlegen des Pfades für die Output-Datei     
      FILE *fileInput;
           fileInput = fopen( "squid123.log", "r");

    weil da vorher auch ein w stand. Aber Ok das zu verändern ist kein akt

    aah ich bin blöd xD das kommt davon wenn man noch keinen Cafee getrunken hat xD

    hier bei dem Teil

    printf (str1); // schreibt das Datum auf die Kommandozeile
    return 0; // gibt immer 0 zurück

    einfach bei return auch dieses str1 rein kloppen dann gehts

    aber hättest du mich nicht drauf aufmerksam gemacht wäre es mir nicht aufgefallen vielen dank
    Geändert von sheel (16.11.11 um 15:53 Uhr) Grund: Triplepost
     

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von Paper Beitrag anzeigen
    aah ich bin blöd xD das kommt davon wenn man noch keinen Cafee getrunken hat xD

    hier bei dem Teil

    printf (str1); // schreibt das Datum auf die Kommandozeile
    return 0; // gibt immer 0 zurück

    einfach bei return auch dieses str1 rein kloppen dann gehts
    Ist aber noch lange nicht richtig.

    Du solltest unbedingt die Warnungen deines Compilers einschalten.

    1. die Funktion hat Rückgabetyp int, du gibst einen char* zurück
    2. du gibst einen Zeiger auf lokalen Speicher zurück, das führt zu Abstürzen
    3. du benutzt Funktionen die (noch) gar nicht deklariert sind, Funktionen sollten / müssen zuerst deklariert werden

    Übrigens kann man seine Beiträge auch bearbeiten, es Doppel oder Tripelposts verstoßen gegen die Netiquette...

    Ist das hier jetzt falsch oder einfach nur umständlich geschrieben?
    umständlich ist gar kein Ausdruck...
    dann kommen wir zum 2. Problem in der kommandozeile steht einfach alles nebeneinander
    ich schaff es nicht das auch untereinaner zu schreiben. I,wie klappt das nicht
    Das Problem kann ich nicht nachvollziehen. Kopiere die Ausgabe hier in Code-Tags.

    Bitte achte auf die Groß/Kleinschreibung usw. Siehe Netiquette. Danke.

    Gruß
    Paper bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    Paper Paper ist offline Mitglied Silber
    Registriert seit
    Sep 2011
    Beiträge
    56
    Entschuldigung das mit den Doppelpostings etc. passiert nichtmehr
    Da ist wohl einfach die Vorfreude mit mir durch gegangen.

    Zitat Zitat von deepthroat Beitrag anzeigen
    Das Problem kann ich nicht nachvollziehen. Kopiere die Ausgabe hier in Code-Tags.

    Also so sieht es in der Kommandozeile aus...

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    8.7.2011 um 17:44:13  Mitteleuropõische Sommerzeit8.7.2011 um 17:44:13  Mitteleu
    ropõische Sommerzeit8.7.2011 um 17:44:13  Mitteleuropõische Sommerzeit8.7.2011 u
    m 17:44:13  Mitteleuropõische Sommerzeit8.7.2011 um 17:44:13  Mitteleuropõische
    Sommerzeit8.7.2011 um 17:44:13  Mitteleuropõische Sommerzeit8.7.2011 um 17:44:13
      Mitteleuropõische Sommerzeit8.7.2011 um 17:44:15  Mitteleuropõische Sommerzeit
    8.7.2011 um 17:44:15  Mitteleuropõische Sommerzeit8.7.2011 um 17:44:15  Mitteleu
    ropõische Sommerzeit8.7.2011 um 17:44:15  Mitteleuropõische Sommerzeit8.7.2011 u
    m 17:44:15  Mitteleuropõische Sommerzeit8.7.2011 um 17:44:15  Mitteleuropõische
    Sommerzeit8.7.2011 um 17:44:15  Mitteleuropõische Sommerzeit8.7.2011 um 17:44:15
      Mitteleuropõische Sommerzeit8.7.2011 um 17:44:15  Mitteleuropõische Sommerzeit
    8.7.2011 um 17:44:15  Mitteleuropõische Sommerzeit8.7.2011 um 17:44:16  Mitteleu
    ropõische Sommerzeit4.1.2002 um 0:36:50  Mitteleuropõische Zeit8.7.2011 um 17:44
    :16  Mitteleuropõische Sommerzeit8.7.2011 um 17:44:16  Mitteleuropõische Sommerz
    eit8.7.2011 um 17:44:16  Mitteleuropõische Sommerzeit29.1.2002 um 15:44:25  Mitt
    eleuropõische Zeit8.7.2011 um 17:44:16  Mitteleuropõische Sommerzeit8.7.2011 um
    17:44:35  Mitteleuropõische Sommerzeit8.7.2011 um 17:44:35  Mitteleuropõische So
    mmerzeit8.7.2011 um 17:44:35  Mitteleuropõische Sommerzeit8.8.2005 um 1:18:32  M
    itteleuropõische Sommerzeit8.7.2011 um 17:44:35  Mitteleuropõische Sommerzeit8.7
    .2011 um 17:44:35  Mitteleuropõische Sommerzeit8.7.2011 um 17:44:35  Mitteleurop
    õische Sommerzeit8.7.2011 um 17:44:35  Mitteleuropõische Sommerzeit8.7.2011 um 1
    7:44:35  Mitteleuropõische Sommerzeit30.9.1970 um 14:24:46  Mitteleuropõische So
    mmerzeit

    und ich würde es gerne untereinander haben.

    8.7.2011 um 17:44:13 Mitteleuropõische Sommerzeit
    8.7.2011 um 17:44:13 Mitteleuropõische Sommerzeit
    8.7.2011 um 17:44:13 Mitteleuropõische Sommerzeit .... so meine ich das





    Zitat Zitat von deepthroat Beitrag anzeigen

    1. die Funktion hat Rückgabetyp int, du gibst einen char* zurück
    2. du gibst einen Zeiger auf lokalen Speicher zurück, das führt zu Abstürzen
    3. du benutzt Funktionen die (noch) gar nicht deklariert sind, Funktionen sollten / müssen zuerst deklariert werden



    Zu 1. Also ist das die böse Variante?

    Zu 2. Hmm ich habe geschaut aber finde keine möglichkeit das anders zu lösen

    Zu 3. Ich dachte die sind schon deklariert
    Geändert von Paper (16.11.11 um 12:46 Uhr)
     

  6. #6
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von Paper Beitrag anzeigen
    Also so sieht es in der KOmmandozeile aus...
    Für welche Eingabe? "Log auslesen"? Ich sehe nicht wo da eine Ausgabe auf der Kommandozeile gemacht wird - welche Zeile?
    Zitat Zitat von Paper Beitrag anzeigen
    Zu 1. Also ist das die böse Variante?
    Es ist falsch und funktioniert nur falls ein int mind. so groß ist wie ein char Zeiger.
    Zitat Zitat von Paper Beitrag anzeigen
    Zu 2. Sorry für die doofe Frage aber welchen Teil des Codes meinst du damit?
    Das return str1 in der Funktion Unix2Date.
    Zitat Zitat von Paper Beitrag anzeigen
    Zu 3. Ich dachte die sind schon deklariert :S
    Du benutzt in main Zeile 53 z.B. die Funktion Unix2Date welche allerdings erst in Zeile 93 definiert (und somit auch erst deklariert) wird. Funktionen müssen vor ihrer ersten Benutzung deklariert werden (ansonsten kann das zu schwer identifizierbaren Fehlern führen).
    Geändert von deepthroat (16.11.11 um 12:48 Uhr)
    Paper bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  7. #7
    Paper Paper ist offline Mitglied Silber
    Registriert seit
    Sep 2011
    Beiträge
    56
    Zitat Zitat von deepthroat Beitrag anzeigen
    Für welche Eingabe? "Log auslesen"? Ich sehe nicht wo da eine Ausgabe auf der Kommandozeile gemacht wird - welche Zeile?
    Also der Teil
    Code c:
    1
    2
    
     printf (str1); 
    return (str1);

    das printf (str1); ist es was unformatiert ist in der Kommandozeile.
    Hatte es testweise mal auskommentiert um zu schauen ob es das ist was angezeigt wurde.


    Zitat Zitat von deepthroat Beitrag anzeigen
    Das return str1 in der Funktion Unix2Date.
    Ja ich habe meinen Eintrag bearbeitet aber leider zuspät :/
    Ich habe geschaut aber keine Ahnung wie man das Problem lösen kann.



    Zitat Zitat von deepthroat Beitrag anzeigen
    Du benutzt in main Zeile 53 z.B. die Funktion Unix2Date welche allerdings erst in Zeile 93 definiert (und somit auch erst deklariert) wird.
    Das ist Falsch? Hmm weil es läuft ja einwandfrei, es tut was es tun muss.
    Da gibt mein Compiler auch garkeine Fehler /Warnung aus.
    Geändert von Paper (16.11.11 um 13:02 Uhr)
     

  8. #8
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von Paper Beitrag anzeigen
    dann springt er bei 3 direkt zum Log COnvert und das was er in die Datei schreibt, gibt er auch in der Kommandozeile aus nur halt so unformatiert.
    Über welchen Code sprichst du? In deinem Code oben gibt es keine Ausgabe auf die Kommandozeile oder ich sehe es nicht. Also, welche Zeile?
    Zitat Zitat von Paper Beitrag anzeigen
    Ich habe geschaut aber keine Ahnung wie man das Problem lösen kann.
    Man könnte die Funktion z.B. so definieren:
    Code c:
    1
    2
    3
    4
    5
    6
    7
    8
    
    const char* Unix2Date(int unixzeit,int modusTime) 
    {
      static char str1[50];
     
      ...
      
      return str1;
    }
    Und wenn du deinen Code ordentlich einrücken würdest, wäre er auch leichter lesbar.
    Zitat Zitat von Paper Beitrag anzeigen
    Das ist Falsch? Hmm weil es läuft ja einwandfrei, es tut was es tun muss.
    Da gibt mein Compiler auch garkeine Fehler /Warnung aus.
    Welchen Compiler verwendest du? Der GCC gibt für den Code aus Beitrag 1 folgendes aus:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    footunx.c: In Funktion »main«:
    footunx.c:37:9: Warnung: Implizite Deklaration der Funktion »date2Unix« [-Wimplicit-function-declaration]
    footunx.c:41:9: Warnung: Implizite Deklaration der Funktion »errorSend« [-Wimplicit-function-declaration]
    footunx.c:53:7: Warnung: Implizite Deklaration der Funktion »Unix2Date« [-Wimplicit-function-declaration]
    footunx.c:53:7: Warnung: Format »%s« erwartet Argumenttyp »char *«, aber Argument 3 hat Typ »int« [-Wformat]
    footunx.c:58:7: Warnung: Implizite Deklaration der Funktion »logConvert« [-Wimplicit-function-declaration]
    footunx.c: In Funktion »Unix2Date«:
    footunx.c:120:8: Warnung: Variable »cbuffer« wird nicht verwendet [-Wunused-variable]
    footunx.c:99:7: Warnung: Variable »sommerZeit« wird nicht verwendet [-Wunused-variable]
    footunx.c: In Funktion »logConvert«:
    footunx.c:291:7: Warnung: Format »%s« erwartet Argumenttyp »char *«, aber Argument 4 hat Typ »int« [-Wformat]
    footunx.c:220:7: Warnung: Variable »i« wird nicht verwendet [-Wunused-variable]
    footunx.c: In Funktion »date2Unix«:
    footunx.c:326:9: Warnung: Variable »dateptr2« wird nicht verwendet [-Wunused-variable]
    footunx.c:325:9: Warnung: Variable »dateptr« wird nicht verwendet [-Wunused-variable]
    footunx.c:322:7: Warnung: Variable »convert« wird nicht verwendet [-Wunused-variable]
    footunx.c:319:8: Warnung: Variable »uhrzeit« wird nicht verwendet [-Wunused-variable]
    footunx.c:318:8: Warnung: Variable »datum« wird nicht verwendet [-Wunused-variable]
    footunx.c:315:7: Warnung: Variable »y« wird nicht verwendet [-Wunused-variable]
    footunx.c: In Funktion »errorSend«:
    footunx.c:458:1: Warnung: Kontrollfluss erreicht Ende von Nicht-void-Funktion [-Wreturn-type]
    footunx.c: In Funktion »date2Unix«:
    footunx.c:445:1: Warnung: Kontrollfluss erreicht Ende von Nicht-void-Funktion [-Wreturn-type]
    footunx.c: In Funktion »logConvert«:
    footunx.c:300:1: Warnung: Kontrollfluss erreicht Ende von Nicht-void-Funktion [-Wreturn-type]
    footunx.c: In Funktion »date2Unix«:
    footunx.c:393:41: Warnung: »unixzeit3« könnte in dieser Funktion uninitialisiert verwendet werden [-Wuninitialized]
    Paper bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  9. #9
    Paper Paper ist offline Mitglied Silber
    Registriert seit
    Sep 2011
    Beiträge
    56
    Zitat Zitat von deepthroat Beitrag anzeigen
    Über welchen Code sprichst du? In deinem Code oben gibt es keine Ausgabe auf die Kommandozeile oder ich sehe es nicht. Also, welche Zeile?
    Code c:
    1
    2
    
    printf (str1); 
    return (str1);

    das printf (str1); ist es was unformatiert ist in der Kommandozeile.
    Hatte es testweise mal auskommentiert um zu schauen ob es das ist was angezeigt wurde.






    Zitat Zitat von deepthroat Beitrag anzeigen
    const char* Unix2Date(int unixzeit,int modusTime)
    {
    static char str1[50];

    ...

    return str1;
    }
    und anstelle des ... kommt der Code den ich schon habe rein für den Teil? oder muss
    ich den auch umschreiben?






    Zitat Zitat von deepthroat Beitrag anzeigen
    Welchen Compiler verwendest du? Der GCC gibt für den Code aus Beitrag 1 folgendes aus:
    Ich benutze den Dev C++.
     

  10. #10
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von Paper Beitrag anzeigen
    Code c:
    1
    2
    
    printf (str1); 
    return (str1);

    das printf (str1); ist es was unformatiert ist in der Kommandozeile.
    Die Verwendung von printf in dieser Form ist sowieso gefährlich (was wenn ein % im String ist?).
    Code c:
    1
    
    puts(str1);
    Zitat Zitat von Paper Beitrag anzeigen
    und anstelle des ... kommt der Code den ich schon habe rein für den Teil?
    Ja.
    Zitat Zitat von Paper Beitrag anzeigen
    oder muss ich den auch umschreiben?
    Nicht unbedingt. Wäre aber eine gute Idee.
    Zitat Zitat von Paper Beitrag anzeigen
    Ich benutze den Dev C++.
    Dev C++ ist kein Compiler sondern eine "IDE". Du hast also auch den GCC. Dann schalte alle Warnungen an! (Tools -> Compiler Options -> Compiler :

    [x] Add the following commands when calling compiler:

    -Wall

    )

    Gruß
    Geändert von deepthroat (16.11.11 um 13:30 Uhr)
    Paper bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  11. #11
    Paper Paper ist offline Mitglied Silber
    Registriert seit
    Sep 2011
    Beiträge
    56
    Zitat Zitat von deepthroat Beitrag anzeigen
    Die Verwendung von printf in dieser Form ist sowieso gefährlich (was wenn ein % im String ist?).
    Achso ich hatte das so gelassen weil man in einem Timestamp ja eh kein % oder sonstiges findet.



    Ich habe das jetzt mal so gemacht. Ich habe keine Ahnung was da genau rein muss, ich habe es so versucht aber das war wohl ein Fehler.
    Code c:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    
    const char* Unix2Date(int unixzeit,int modusTime) 
    {
      static char str1[50];
     
     //Variabeln für die einzelnen Datumsteile 
      int ijahr=0,imonat=0,itag=0,istd=0,imin=0,isek=0;
      char timezone[30];
      
      
      char stringVar[20];
      int sommerZeit=0;
      
      //Endwert der UnixZeit 19.01.2038 um 4:14:07
      int unixMax = 2147483647;
      
      //Überprüfung,ob die eingegebene Unixzeit gültig ist
      if (unixzeit>>unixMax)
      {
                              
         errorSend(); 
       
      }
      
      //time_t ist ein Zeitstempel ... in Sek ab 1970
      //wie UnixZeit
      time_t unixStamp = unixzeit;
      
      //Struktur für time_t
      struct tm * unixConvert;
      
      //String zum Speichern des Datums
      char cbuffer[80];
      
      //Struktur bekommt den Zeitstempel
       
      if(modusTime==2)
      unixConvert = localtime(&unixStamp);
      else if (modusTime==1)
      unixConvert = gmtime(&unixStamp);
      
      //Speichern der einzelnen Datumsteile in Variabeln
      strftime( stringVar, 20, "%d", unixConvert ); //Tag
      itag = atoi(stringVar);
      strftime( stringVar, 20, "%m", unixConvert ); //Monat
      imonat = atoi(stringVar);
      strftime( stringVar, 20, "%Y", unixConvert ); //Jahr
      ijahr = atoi(stringVar);
      strftime( stringVar, 20, "%H", unixConvert ); //Stunde
      istd = atoi(stringVar);
      strftime( stringVar, 20, "%M", unixConvert ); //Minute
      imin = atoi(stringVar);
      strftime( stringVar, 20, "%S", unixConvert ); //Sekunde
      isek = atoi(stringVar);
      
      
      //Zeitzone
      strftime( timezone, 30, "%z", unixConvert );
      
     
    //Ausgabestring  
    char str1[50]; 
     
    //Zwischenspeicher
    char buffer[20];
     
     
      //Umwandlung und Zusammenfassung in einen Return-String
     strcpy (str1,itoa(itag,buffer,10));
     strcat (str1,".");
     strcat (str1,itoa(imonat,buffer,10));
     strcat (str1,".");
     strcat (str1,itoa(ijahr,buffer,10));
     strcat (str1," um ");
     strcat (str1,itoa((istd),buffer,10));
     strcat (str1,":");
     strcat (str1,itoa(imin,buffer,10));
     strcat (str1,":");
     strcat (str1,itoa(isek,buffer,10));
     if (modusTime==2)
     {
     strcat (str1,"  ");
     strcat (str1,timezone);
    }
    else
    {
     strcat (str1,"  ");
     strcat (str1,"UTC/GMT");    
    }
     
      puts(str1);
      return str1;
    }

    Den Code den ich schon hatte, für diesen Teil

    Code c:
    1
    2
    3
    4
    5
    
    int Unix2Date(int unixzeit,int modusTime)
    ....
    ....
    ....
    return str1;
     

  12. #12
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von Paper Beitrag anzeigen
    Achso ich hatte das so gelassen weil man in einem Timestamp ja eh kein % oder sonstiges findet.
    Woher willst du das wissen? Timezone steht z.B. unter Windows in der Registry und da kann man eintragen was man will...
    Zitat Zitat von Paper Beitrag anzeigen
    Ich habe das jetzt mal so gemacht. Ich habe keine Ahnung was da genau rein muss, ich habe es so versucht aber das war wohl ein Fehler.
    Warum? Fehlermeldungen? Warnungen? Absturz?
    Paper bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  13. #13
    Paper Paper ist offline Mitglied Silber
    Registriert seit
    Sep 2011
    Beiträge
    56
    Zitat Zitat von deepthroat Beitrag anzeigen
    Woher willst du das wissen? Timezone steht z.B. unter Windows in der Registry und da kann man eintragen was man will...
    Ja gut stimmt ich bin nur von dem Linux Timestamp ausgegangen weil das Programm nur dafür gebraucht wird.


    Zitat Zitat von deepthroat Beitrag anzeigen
    Warum? Fehlermeldungen? Warnungen? Absturz?
    Jaaa Fehlermeldungen und zwar folgende

    genau so werden die mir angezeigt unten bei Dev C++

    193 conflicting types for 'Unix2Date'
    54 previous implicit declaration of 'Unix2Date' was here
    In function `Unix2Date':
    252 redeclaration of 'str1' with no linkage
    194 previous declaration of 'str1' was here
    281 [Warning] function returns address of local variable
     

  14. #14
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von Paper Beitrag anzeigen
    Jaaa Fehlermeldungen und zwar folgende

    genau so werden die mir angezeigt unten bei Dev C++

    193 conflicting types for 'Unix2Date'
    54 previous implicit declaration of 'Unix2Date' was here
    In function `Unix2Date':
    Du mußt die Funktionen alle deklarieren, bevor du sie benutzt.
    Zitat Zitat von Paper Beitrag anzeigen
    252 redeclaration of 'str1' with no linkage
    194 previous declaration of 'str1' was here
    Du darfst die Variable str1 nicht doppelt definieren. Ich dachte das wäre klar...
    Paper bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  15. #15
    Paper Paper ist offline Mitglied Silber
    Registriert seit
    Sep 2011
    Beiträge
    56
    Zitat Zitat von deepthroat Beitrag anzeigen
    Du mußt die Funktionen alle deklarieren, bevor du sie benutzt.
    Hmm okay =/ jetzt nurnoch schauen wie ich das anstelle


    Zitat Zitat von deepthroat Beitrag anzeigen
    Du darfst die Variable str1 nicht doppelt definieren. Ich dachte das wäre klar...
    aach ich Holzkopf-.- jaaa sry

    Mal eine andere frage den Pfad zur Datei die eingelesen wird habe ich momentan so angegeben

    Code c:
    1
    2
    3
    
    //Festlegen des Pfades für die Input-Datei
      FILE *fileInput;
           fileInput = fopen( "squidN123.log", "r");

    das geht aber nur wenn die Datei sich im gleichen Ordner befindet wie das Programm.
    Geht das irgendwie das die Software drauf zugreift auch wenn die 2 Dateien in unterschiedlichen Verzeichnissen liegen?
    Geändert von sheel (16.11.11 um 15:55 Uhr) Grund: Doppel
     

Ähnliche Themen

  1. Beim Programm Start Passwort Feld BITTE HILFE
    Von Roma3 im Forum Visual Basic 6.0
    Antworten: 7
    Letzter Beitrag: 14.05.08, 16:54
  2. Antworten: 2
    Letzter Beitrag: 10.03.08, 22:07
  3. Antworten: 2
    Letzter Beitrag: 12.02.08, 19:26
  4. Antworten: 0
    Letzter Beitrag: 07.08.07, 18:12
  5. Antworten: 8
    Letzter Beitrag: 14.06.04, 10:37