All pastes #32947 Raw Edit

Untitled

public text v1 · immutable
#32947 ·published 2005-12-08 12:35 UTC
rendered paste body
#include <math.h>
#include <conio.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct time{
int minuten;
double sekunden; 
};    



int main(void)
{
    FILE *eingabe; //Pointer an den der Dateiname zugewiesen wird
    FILE *ausgabe ; //Pointer für Textausgabe
    FILE *error;
    double trennzahl;
    double fuel1,fuel2;
    struct time drucktime1;
    struct time drucktime2;
    char *zeiger, i; //Zeiger zum Stringauslesen
    char name_eingabe[10]; //Dateiname der Eingegeben wird
    char zeile[100];        
    int zaehler=0;
    int rpm1,rpm2,temp1,temp2,speed1,speed2;
    int richtig=0;  //Zähler für Maschine 1 zählt die Richtigkeit der einzelnen Datensätze und überprüft
    int richtig1=0; //Zähler für Maschine 2 zählt die Richtigkeit der einzelnen Datensätze und überprüft
    int wurdegedruckt=0; //Zähler um den Überschriftendruck nach 20 Zeilen zu wiederholen;
    
    
    //Aufruf aller Funktionen!
    int inumber(char temparray[]);  // Inumber überprüfung
    int pnumber(char temparray[]); // Pnumber überprüfung
    double rpm (double trennzahl); // RPM beider maschinen
    double speedm2 (double trennzahl); //speed maschine 2
    double fuelm2 (double trennzahl); // fuel maschine 2
    double tempm2 (double trennzahl); // temp maschine 2                                             
    time timem1 (double trennzahl);   // time maschine 1
    time timem2 (double trennzahl);  // time maschine 2
    void druck1(time drucktime1,int rpm1, int speed1, double fuel1, int temp1);  //Druck Funktion Maschine 1
    void druck2(time drucktime2, int rpm2 ,int speed2,double fuel2,int temp2);  //Druck Funktion Maschine 2
    void druckstern();                                                          // Fehler Print 
                                                                                                                                                                                                                                                                                                    
    printf ("Uebungsaufgabe 3: Datenfilter by Jan Knobloch SS 2005");
    printf ("\n\n");
    
    /* Abfrage des Dateinamens*/
    printf ("Geben den Dateinamen der zu oeffnenden Datei ein:");
    gets (name_eingabe);
    
    /*Öffnen der Dateien*/
    eingabe=fopen(name_eingabe, "r");
    ausgabe=fopen("errors.txt", "w");
    error=fopen("errors.txt", "w");
    
    printf("%s",eingabe);
    if (eingabe==NULL)
        {
            printf ("Datei ist leer/und oder nicht vorhanden!");
            getch();
            return 0;
        }    
       
    printf ("Datei wurde erfolgreich eingelesen vielen Dank!\n\n");
    getch();
    
//----------------------------------------------DRUCKEN DER KOPFZEILE DER AUSGABE----------------       
printf ("      Zeit   Umdrehungen   Geschwindigkeit   Verbrauch    Temperatur\n");                
printf ("     [m:s]         [1/s]            [km/h]   [l/100km]      [Grad C]\n");               
//-----------------------------------------------------------------------------------------------
    
    
    char trennzeichen;    
    while (!feof(eingabe))
        {
            fgets (zeile,100,eingabe); 
            
            for(i=0; i<strlen(zeile); i++)     // Solange String nicht zuende ist soll zähler erhöht werden
            {
                if (zeile[i]=='$')             // wenn trennzeichen Dollar gefunden wird wird trennzeichen auf Dollar gesetzt
                {
                    trennzeichen='$';
                    break;
                
                }
                
                if (zeile[i]==',')            // wenn trennzeichen Komma gefunden wird wird trennzeichen auf Komma gesetzt
                {
                    trennzeichen=',';
                    break;
                }    
            
            }    
            
            char temparray[100];             //Temparray zum ablegen von Teilstrings
            int tempzaehler=0;              // Zähler auf null
            int data=0;                     // Stelle des Datensatzes auf null
            for(i=0; i<strlen(zeile); i++)   // Solange String nicht zuende ist soll zähler erhöht werden
            {
                        if (zeile[i]!=trennzeichen && zeile[i]!='\n') //Wenn zeichen im String nicht Trennzeichen und nicht Absatz
                                    {
                                    temparray[tempzaehler]=zeile[i]; // Dann wird string in Teilstring kopiert
                                    tempzaehler++;      
                                    }    
            
                        else                                                    // Ansonsten!
                        {
                            
                                                temparray[tempzaehler]='\0';    //Wird ein Stringende eingebaut
                                                tempzaehler=0;                   //Tempzähler auf 0 gesetzt                                                                             
                                                
                                                data++;                         // Erhöhung des Datensatzes zum fangen in der if Schleife!
                                                
                             if (trennzeichen==',')                             // Aufteilen nach Maschine 1 und 2 durch Trennzeichen erkennung
                             {
            
                               
                               if (data==1)                                     // Datensatz 1 von Trennzeichen Komma wird bearbeitet
                               {  
                               //TIME    
                               trennzahl=atof(temparray);                       //umwandlung des Strings in eine Double Zahl
                               richtig=(richtig+pnumber(temparray));            // Zähler zur endüberprüfung ob Zeile korrekt eingelesen wurde wird erhöht
                               drucktime1=timem1(trennzahl);                         // Umrechnung der Zahl mittels ihrer Funktion
                               }    
                               
                               if (data==2)                                     // Datensatz 2 von Trennzeichen Komma wird bearbeitet
                               {
                               //RPM  
                               
                               trennzahl=atof(temparray);                       //umwandlung des Strings in eine Double Zahl
                               rpm1=(int)(rpm(trennzahl));                    // Umrechnung mittels ihrer Funktion 
                               richtig=(richtig+inumber(temparray));            // Zähler zur endüberprüfung ob Zeile korrekt eingelesen wurde wird erhöht
                               }
                               
                               
                               if (data==3)                                     // Datensatz 3 von Trennzeichen Komma wird bearbeitet
                               {
                               //SPEED      
                               trennzahl=atof(temparray);                        //umwandlung des Strings in eine Double Zahl
                               richtig=(richtig+inumber(temparray));             // Zähler zur endüberprüfung ob Zeile korrekt eingelesen wurde wird erhöht
                               speed1=((int)(trennzahl));                 // Umrechnung mittels ihrer Funktion 
                               }
                               
                               
                               if (data==4)                                     // Datensatz 4 von Trennzeichen Komma wird bearbeitet
                               {
                               //FUEL  
                               trennzahl=atof(temparray);                       //umwandlung des Strings in eine Double Zahl
                               richtig=(richtig+pnumber(temparray));            // Zähler zur endüberprüfung ob Zeile korrekt eingelesen wurde wird erhöht
                               fuel1=(trennzahl);                        // Umrechnung mittels ihrer Funktion 
                               }
                               
                               if (data==5)                                    // Datensatz 5 von Trennzeichen Komma wird bearbeitet
                               {  
                               //TEMP
                               trennzahl=atof(temparray);                      //umwandlung des Strings in eine Double Zahl
                               richtig=(richtig+inumber(temparray));           // Zähler zur endüberprüfung ob Zeile korrekt eingelesen wurde wird erhöht
                               temp1=((int)(trennzahl));                 // Umrechnung mittels ihrer Funktion 
                               
                               
                               if (richtig == 5)                               // Wenn alle Zahlen richtig überprüft wurden
                               {
                                   druck1(drucktime1,rpm1,speed1,fuel1,temp1);      // Ausgabe der Zeile
                                   wurdegedruckt++;                            // Erhöhung des Zählers fuer REPrint der Kopfzeile
                                   richtig=0;                                   // Rückzsetzen von richtig
                                   richtig1=0;                                   //Rücksetzen von richtig2
                                   zaehler++;                                   // erhöhung des Zählers zur richtigen Zeilenausgabe
                               }    
                               else
                                  {    
                                  druckstern();                                   // Ausgabe des Fehlerdrucks
                                  fprintf (error,"%s\n\n",zeile);                 //Schreiben in die Fehlerdatei
                                  wurdegedruckt++;                                // Erhöhung des Zählers fuer REPrint der Kopfzeile
                                  zaehler++;                                      // erhöhung des Zählers zur richtigen Zeilenausgabe
                                  richtig=0;                                     //Rücksetzen von richtig
                                  richtig1=0;                                   //Rücksetzen von richtig2
                                  }    
                               }
                               
                               
                             }
                             
                              else                                              // Wenn Trennzeichen DOLLAR IST
                              {
                              
                              if (data==1)                                      // Datensatz 1 von Trennzeichen Dollar wird bearbeitet
                               {
                               //TIME
                               trennzahl=atof(temparray);                       //umwandlung des Strings in eine Double Zahl
                               richtig1=(richtig1+inumber(temparray));          // Zähler zur endüberprüfung ob Zeile korrekt eingelesen wurde wird erhöht
                               drucktime2=timem2(trennzahl);                         // Umrechnung mittels ihrer Funktion 
                               } 
                               
                               if (data==2)                                     // Datensatz 2 von Trennzeichen Dollar wird bearbeitet
                               {
                               //NAME  
                               
                               }
                               
                               
                               if (data==3)                                    // Datensatz 3 von Trennzeichen Dollar wird bearbeitet
                               {  
                               //TEMP
                               trennzahl=atof(temparray);                     //umwandlung des Strings in eine Double Zahl
                               richtig1=(richtig1+inumber(temparray));        // Zähler zur endüberprüfung ob Zeile korrekt eingelesen wurde wird erhöht
                               temp2=(int)(tempm2(trennzahl));                // Umrechnung mittels ihrer Funktion 
                               }
                               
                               
                               if (data==4)                                   // Datensatz 4 von Trennzeichen Dollar wird bearbeitet
                               { 
                               //SPEED
                               trennzahl=atof(temparray);                     //umwandlung des Strings in eine Double Zahl
                               richtig1=(richtig1+inumber(temparray));        // Zähler zur endüberprüfung ob Zeile korrekt eingelesen wurde wird erhöht
                               speed2=(int)(speedm2(trennzahl));              // Umrechnung mittels ihrer Funktion 
                               }    
                               
                               if (data==5)                                  // Datensatz 5 von Trennzeichen Dollar wird bearbeitet
                               {  
                               //FUEL
                               trennzahl=atof(temparray);                    //umwandlung des Strings in eine Double Zahl
                               richtig1=(richtig1+inumber(temparray));       // Zähler zur endüberprüfung ob Zeile korrekt eingelesen wurde wird erhöht
                               fuel2=fuelm2(trennzahl);                      // Umrechnung mittels ihrer Funktion 
                               }                             
                               
                               if (data==6)                                 // Datensatz 6 von Trennzeichen Dollar wird bearbeitet
                               {
                               //RPM
                                   trennzahl=atof(temparray);               //umwandlung des Strings in eine Double Zahl
                                   richtig1=(richtig1+inumber(temparray));  // Zähler zur endüberprüfung ob Zeile korrekt eingelesen wurde wird erhöht
                                   rpm2=(int)(rpm(trennzahl));            // Umrechnung mittels ihrer Funktion 
                                   zaehler++;
                                   
                                   if(richtig1 != 5)
                                   {
                                   druckstern();                     //Ausgabe der Fehlerzeile falls falsch
                                   fprintf (error,"%s\n\n",zeile);   // Drucken in Fehlerdatei
                                   richtig1=0;                       //Rücksetzung von Richtig
                                   wurdegedruckt++;                  // Erhöhung von wurdegedruckt
                                   zaehler++;                        // Erhöhung des Zählers
                                   }
                                   
                                   
                                   if (richtig1 == 5 && zaehler!=8)              //  Damit letzte zeile nicht ausgelassen wird
                                   {
                                       druck2(drucktime2,rpm2,speed2,fuel2,temp2);    // Drucken der letzten Zeile
                                       wurdegedruckt++;                          // Erhöhung von wurdegedruckt
                                       richtig1=0;                               // Rücksetzung von Richtig
                                   }    
                                                                     
                               }    
                                   
                                      
                               
                               }       
     
                               }                    
                               

       if (wurdegedruckt==20){
       //----------------------------------------------DRUCKEN DER KOPFZEILE DER AUSGABE----------------       
       printf ("\n\n");
       printf ("      Zeit       Umdrehungen   Geschwindigkeit   Verbrauch       Temperatur\n");                
       printf ("      [m:s]        [1/S]           [km/h]        [l/100]          [Grad C]\n");               
       //-----------------------------------------------------------------------------------------------    
       wurdegedruckt=0;    
       }    
       
       
       }  

}
                               
getch();
}
//-----------------------------------------------------------Überprüfung der I NUMMER---------------------
int inumber(char temparray[])
  {
    for(int i=0; i<strlen(temparray); i++) // Durchlaufen des Teilstrings
    {
      if (!isdigit(temparray[i]))         //Wenn es keine zahl ist 0 Rückgeben
         return 0;
    } 
    return 1;                           // ansonsten 1
  }
  
//-----------------------------------------------------------Überprüfung der P NUMMER---------------------  
int pnumber(char temparray[])
  {
      char *trennzeichen=".";
      char *pointer;
     pointer=strtok(temparray,trennzeichen);  
     
     if (!atoi(pointer))
     {
     return 0;   
         
     }    
     
     pointer=strtok(NULL,".");  //NULL IST EIN POINTER DIE FUNKTION VERLANGT 2 POINTER UND BEKOMMT EINEN NEUEN ( CONST POINTER ODER STATIC VARIABLE IN STRING.H)
     
      if (!atoi(pointer))
     {
     return 0;   
         
     } 
     return 1;
     
}   
//--------------------------------------------------TIME MASCHINE1---------------------------
time timem1 (double trennzahl)
{

struct time drucktime;

double nachkomma;
int vorkomma=0;

drucktime.minuten=(int)trennzahl;        // Abschneiden des nachkomma teils
drucktime.sekunden=(trennzahl-drucktime.minuten); // ausrechnen des nachkomma teils
drucktime.sekunden=(round(((drucktime.sekunden )*60))); // umrechnung des nachkomma teils da 100 einheiten

return drucktime;
}
//----------------------------------------------------TIME MASCHINE2------------------------                              
time timem2 (double trennzahl)
{
 
 struct time drucktime;
               
    if (trennzahl >= 60)  //Wenn Trennzahl über 60 Sekunden
    {

    drucktime.minuten=(int)(trennzahl/60); //Abschneiden des nachkomma teils und Umrechnen in Minuten
    drucktime.sekunden=round(((trennzahl/60)-drucktime.minuten)*100); //Zahl - vorkomma = nachkomma *100 wegen 0.xxx
    
    }  
    
        else{
            drucktime.minuten=00;
            drucktime.sekunden=round(trennzahl);
            
            }        

return drucktime;


}
//-----------------------------------------------------RPM UMRECHNUNG 1 und 2---------------------------
double rpm (double trennzahl)
{
    trennzahl=(trennzahl/60);                   // RPM / 60  = RP/S
    return trennzahl;
}

//------------------------------------------------------------------------------------------------------

    
//-----------------------------------------------------SPEED UMRECHNUNG2----------------------------------
double speedm2 (double trennzahl)
{
    trennzahl=(trennzahl *3.6);  // Umrechnung in KM/H pro STD
    return trennzahl;
}

//------------------------------------------------------------------------------------------------------


//-----------------------------------------------------FUEL UMRECHNUNG2----------------------------------//!!!
double fuelm2 (double trennzahl)
{
trennzahl=((trennzahl*60)/1000)/100;   // * 60 = ML     / 1000 = LITER  /100 = LITER/KM

return trennzahl;
}

//------------------------------------------------------------------------------------------------------


//-----------------------------------------------------TEMP UMRECHNUNG2----------------------------------
double tempm2 (double trennzahl)
{

    trennzahl=(trennzahl-273); // Umrechnen in Grad Celsius
    return trennzahl;
}

//------------------------------------------------------------------------------------------------------

//---------------------------------------------------DRUCK M1-------------------------------------------
void druck1(time drucktime1,int rpm1, int speed1, double fuel1, int temp1)
{
printf ("     %.2d:%0.0lf %13d  %16d %11.2lf %13d\n",drucktime1.minuten,drucktime1.sekunden,rpm1,speed1,fuel1,temp1);
}    
//------------------------------------------------------------------------------------------------------

//---------------------------------------------------DRUCK M2-------------------------------------------
void druck2(
time drucktime2, int rpm2 ,int speed2,double fuel2,int temp2)
{
printf ("     %.2d:%0.0lf %13d  %16d %11.2lf %13d\n",drucktime2.minuten,drucktime2.sekunden,rpm2,speed2,fuel2,temp2);
}     
//------------------------------------------------------------------------------------------------------

//---------------------------------------------------FEHLERAUSGABE--------------------------------------
void druckstern()
{        
printf ("     ***********************Fehler in Zeile*************************\n");
}  
//------------------------------------------------------------------------------------------------------