C Dateiverarbeitung Mittelwert

wilkaro205

Grünschnabel
Hallo zusammen,
ich brauche dringend Hilfe bei einer Uni Übungsaufgabe und bin mit meinen Nerven am Ende.

Aufgabe:
Messwerte aus .txt Datei formatiert in ein Array einlesen, Mittelwerte bestimmen und diese in eine neue .txt Datei schreiben.

Auszug:
Code:
...

4;sensor#11;103;697;1481677565
5;sensor#13;104;696;1481677566
6;sensor#11;105;695;1481677566
7;sensor#6;106;694;1481677567
8;sensor#11;107;693;1481677567
...
Jeder Sensor kommt mehr als 1x vor. Es sind ca. 300 Zeilen und 23 Sensoren.


So soll es später ausschauen:
Code:
sensor#1;mittelwert1;mittelwert2;mittelwert3
sensor#2;mittelwer1;mittelwert2;mittelwert3
...

aktueller Stand der DInge... :
C:
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <string.h>
#define MAX 299

typedef struct
{
    int vk;                // Vorkommawert
    unsigned int nk;    // Nachkommawert
} tMeasurement;

typedef struct
{
    unsigned int nr;    // fortlaufende Nummer    
    char sensorName[20];
    tMeasurement measurement;
    long timeStamp;
} tData;

int main()
{
    int i;
    FILE *protdat1;
    FILE *mittelwert;

    tData data[MAX];    // Array Messwert Daten

    protdat1 = fopen("ProtDat1.txt", "r");        // prodat1 zum lesen öffnen
    mittelwert = fopen("Mittelwert.txt", "w");    // mittelwert zum schreiben öffnen/erstellen

    if (protdat1 == NULL)
    {
        fprintf(stderr, "\"ProtDat1\" konnte nicht geoeffnet werden.\n", protdat1);
        system("PAUSE");
        exit(1);
    }
    else
    {
        printf("\"ProtDat1\" wurde zum Lesen geoeffnet.\n");

        for (i = 0; i < MAX && !feof(protdat1); i++)
        {
            //Formartiertes Einlesen der Datensätze
            fscanf(protdat1, "%d;%20[^;];%d\n;%d;%d;%d\n", &data[i].nr, &data[i].sensorName, &data[i].measurement.vk, &data[i].measurement.nk, &data[i].timeStamp);
            fprintf(stdout, "%d;%s;%d;%d;%d\n", data[i].nr, data[i].sensorName, data[i].measurement.vk, data[i].measurement.nk, data[i].timeStamp);
        }
        if (feof(protdat1) == 0)
        {
            fprintf(stdout, "\"ProtDat1\" wurde erfolgreich gelesen!\n");
        }
        else
        {
            fprintf(stderr, "\"ProtDat1\" konnte nicht gelesen werden!\n");
            system("PAUSE");
            exit(1);
        }
    }

    fclose(protdat1);
    fclose(mittelwert);

    system("PAUSE");
    return 0;
}

Als Hilfestellung ist eine Funktion gegeben mit der die Mittelwerte berechnet werden können.
Jedoch hab ich momentan keine Ahnung, wie sie verwenden soll.
C:
float calcAverage(char *sensorname, tData *data, int numData)
//bekommt als Argumente einen Sensornamen, das Array mit allen Datensätzen 
//und die Anzahl der Datensätze übergeben und bestimmt als Rückgabewert 
//den Mittelwert aller zum Sensornamen zugehörigen Messwerte. 
//Ein Rückgabewert von 0 wird zurückgeliefert, wenn es zum übergegebenen 
//Sensornamen keine Messwerte gab.

Seid bitte nicht zu streng, ich habe erst seit etwas 2 Monaten überhaupt was mit programmieren am Hut und mir ist bewusst, dass ich einige Dinge falsch mache und Verständnislücken habe, aber ich lerne noch.
Vielen Dank!
 

cwriter

Erfahrenes Mitglied
Seid bitte nicht zu streng, ich habe erst seit etwas 2 Monaten überhaupt was mit programmieren am Hut und mir ist bewusst, dass ich einige Dinge falsch mache und Verständnislücken habe, aber ich lerne noch.
Vielen Dank!
Und die Frage ist...?

Kleine Hinweise:
Zeile 34 ist inkorrekt: Du hast einen Parameter angegeben, obwohl der nicht ausgegeben wird.
Warum hast du ein '\n' in deinem fscanf Zeile 45? Du scanst da übrigens 4 Zahlen, nicht 3. => Ein %d zuviel.


Gruss
cwriter