Datenfilter
Vorführaufgabe 05 · C
- Datei: vorfuehraufgabe05.c
- Stand:
- Umfang: 175 Zeilen
Anmerkung auf der alten Seite: „Ist ganz sicher keine Musterlösung, aber sie funktioniert.“
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int wandle_m1_daten(char *zeile1)
{
int aktuell=0,komma,zaehler=0;
char zeile2[250],zeile3[250],merker[2][20];
zeile3[0]='\0';
do{
zaehler++;
komma = strcspn(zeile1 + aktuell,",");
strncpy(zeile2, zeile1 + aktuell, komma);
zeile2[komma]='\0';
if(zaehler==1 || zaehler==4)
{
if(atof(zeile2)!=0)
{
if(zeile2[strlen(zeile2)-3]=='.')
{
if(zaehler==1)
{
strncpy(merker[0],zeile2,strlen(zeile2)-3);
merker[0][strlen(zeile2)-3]='\0';
strncpy(merker[1],zeile2+strlen(zeile2)-2,strlen(zeile2));
sprintf(zeile2,"%02d:%02d",atoi(merker[0]),(int)(atof(merker[1])/100*60));
strcat(zeile3,zeile2);
}
else
{
sprintf(zeile2,"%14.2lf",atof(zeile2));
strcat(zeile3,zeile2);
}
}
else return 11; //fehler, komma fehlt oder an falscher stelle
}
else
{
return 12; //fehler, kein doublewert
}
}
else
{
if(atoi(zeile2)!=0)
{
if(strspn(zeile2,"0123456789\n")==strlen(zeile2))
{
sprintf(zeile2,"%14d",atoi(zeile2));
strcat(zeile3,zeile2);
}
else return 21; //fehler, komma enthalten
}
else
{
return 22; //fehler, keine Zahl
}
}
aktuell+=komma+1;
}while(zeile1[aktuell-1]!='\0');
strcpy(zeile1,zeile3);
return 0;
}
int wandle_m2_daten(char *zeile1)
{
int aktuell=0,komma,zaehler=0;
char zeile2[6][250],zeile3[250];
zeile3[0]='\0';
do{
komma = strcspn(zeile1 + aktuell,"$");
strncpy(zeile2[zaehler], zeile1 + aktuell, komma);
zeile2[zaehler][komma]='\0';
if(zaehler!=1)
{
if(zaehler==2)
{
sprintf(zeile2[zaehler],"%14d",atoi(zeile2[zaehler])-273);
}
else if(atoi(zeile2[zaehler])!=0)
{
if(zaehler==0)
{
sprintf(zeile2[zaehler],"%02d:%02d",(int)atof(zeile2[zaehler])/60,atoi(zeile2[zaehler]) % 60);
}
else
sprintf(zeile2[zaehler],"%14d",atoi(zeile2[zaehler]));
}
else
{
return 1; //fehler kein integerwert
}
}
aktuell+=komma+1;
zaehler++;
}while(zeile1[aktuell-1]!='\0');
strcat(zeile3,zeile2[0]);
strcat(zeile3,zeile2[5]);
strcat(zeile3,zeile2[3]);
strcat(zeile3,zeile2[4]);
strcat(zeile3,zeile2[2]);
strcpy(zeile1,zeile3);
return 0;
}
int main(void)
{
FILE *origfile, *copyfile;
char zeile[250];
int titelzaehler=0;
origfile = fopen("file01.txt", "r");
if (origfile==NULL)
printf("Fehler beim Oeffnen des Originals\n");
else
{
copyfile = fopen("errors.txt", "w");
if (copyfile==NULL)
printf("Fehler beim Oeffnen der Kopie\n");
else
{
while (!feof(origfile))
{
zeile[0]='\0';
fgets (zeile, 250, origfile);
/*----------------------------*/
if(titelzaehler % 20 == 0)
printf("Zeit Umdrehungen Geschwindigkeit Verbrauch Temperatur\n");
if(wandle_m1_daten(zeile)==0) //wenn m1 format dann
printf("%s\n",zeile);
else if(wandle_m2_daten(zeile)==0) //wenn m2 format dann
printf("%s\n",zeile);
else if(strlen(zeile)!=0)
fprintf(copyfile, "%s", zeile);
/*----------------------------*/
titelzaehler++;
}
}
fclose(origfile);
if (fclose(copyfile))
printf("Fehler beim Schliessen der Kopie\n");
else
printf("Kopie wurde erstellt.\n");
}
return 0;
}