ArchivVorführaufgaben05

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;
}