P
Paper
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:
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


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:
#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
Zuletzt bearbeitet von einem Moderator: