All pastes #32972 Raw Edit

Something

public text v1 · immutable
#32972 ·published 2005-12-08 15:52 UTC
rendered paste body
// jan.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"

#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;        
    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
            richtig=0;                      // Rücksetzn von richtig                      
            richtig1=0;                     //Rücksetzn von richtig2
			zeile = strtok(zeile,"\n");

            for(i=0; i<=strlen(zeile); i++)   // Solange String nicht zuende ist soll zähler erhöht werden
            {
                if (zeile[i]!=trennzeichen && zeile[i]!= '\0') //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
                  {
            
                               
                               switch (data){                                     // Datensatz 1 von Trennzeichen Komma wird bearbeitet
                                 case 1:
                                 //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
                                 break;   
                               
                                 case 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
                                 break;
                               
                                 case 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 
                                 break;
                               
                                 case 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 
                                 break;
                               
                                 case 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 
                                 druck1(drucktime1,rpm1,speed1,fuel1,temp1);      // Ausgabe der Zeile
                                 wurdegedruckt++;                            // Erhöhung des Zählers fuer REPrint der Kopfzeile
                                 break;

								 default:
                                           druckstern();                                   // Ausgabe des Fehlerdrucks
                                           fprintf (error,"%s\n\n",zeile);                 //Schreiben in die Fehlerdatei
                                           wurdegedruckt++; 
									       break;

                              }    
                               
/*							   
                               switch (richtig){                               // Wenn alle Zahlen richtig überprüft wurden
                                   case 5:
                                   //druck1(drucktime1,rpm1,speed1,fuel1,temp1);      // Ausgabe der Zeile
                                   wurdegedruckt++;                            // Erhöhung des Zählers fuer REPrint der Kopfzeile
                                   break;
                               
                                   default:
                                   //druckstern();                                   // Ausgabe des Fehlerdrucks
                                   fprintf (error,"%s\n\n",zeile);                 //Schreiben in die Fehlerdatei
                                   wurdegedruckt++;                                // Erhöhung des Zählers fuer REPrint der Kopfzeile
                                   break;
                                   }
*/
                                   
                       }
                               
                               
            

            else                                              // Wenn Trennzeichen DOLLAR IST
            {
                              switch(data){                                      // Datensatz 1 von Trennzeichen Dollar wird bearbeitet
                                  case 1:
                                  //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 
                                  break; 
                               
                                  case 2:                                     // Datensatz 2 von Trennzeichen Dollar wird bearbeitet
                                  //NAME  
                                  richtig1=(richtig1+1);
                                  break;
                                  
                                  case 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 
                                  break;
                               
                                  case 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 
                                  
                                  case 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 
                                  break;                          
                               
                                  case 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 
                                  druck2(drucktime2,rpm2,speed2,fuel2,temp2);    // Drucken der letzten Zeile
                                  wurdegedruckt++;                          // Erhöhung von wurdegedruckt
                                  break;

								  default:
                                           druckstern();                     //Ausgabe der Fehlerzeile falls falsch
                                           fprintf (error,"%s\n\n",zeile);   // Drucken in Fehlerdatei
									       break;
                                  }        
                                   
/*
                                   switch(richtig1){
                                   case 6:
                                   //druck2(drucktime2,rpm2,speed2,fuel2,temp2);    // Drucken der letzten Zeile
                                   wurdegedruckt++;                          // Erhöhung von wurdegedruckt
                                   break;                   
                                   
                                   default:
                                   //druckstern();                     //Ausgabe der Fehlerzeile falls falsch
                                   fprintf (error,"%s\n\n",zeile);   // Drucken in Fehlerdatei
                                   wurdegedruckt++;                  // Erhöhung von wurdegedruckt
                                   }
*/
                                                                    
             }    
                                      
                               
                                    
     
        }                    
                               

       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=(int(((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=int(((trennzahl/60)-drucktime.minuten)*100); //Zahl - vorkomma = nachkomma *100 wegen 0.xxx
    
    }  
    
        else{
            drucktime.minuten=00;
            drucktime.sekunden=int(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");
}  
//------------------------------------------------------------------------------------------------------