Dateiverarbeitung Messwerte Mittelwert
-
Hallo,
ich versuche gerade eine Uni Übungsaufgabe zu lösen und komme nicht weiter.
Ich soll Messwerte aus einer .txt Datei formatiert einlesen und jeden Datensatz in einem Array vom Typ tData speichern. Dann soll ich die Mittelwerte für jeden Sensor berechnen und in eine Ausgabedatei schreiben.
Auszug aus der Datei:
(jeder Sensor kommt mehr als 1x vor)1;sensor#22;100;700;1481677564 2;sensor#1;101;699;1481677564 3;sensor#17;102;698;1481677565 4;sensor#11;103;697;1481677565 5;sensor#13;104;696;1481677566 6;sensor#11;105;695;1481677566 7;sensor#6;106;694;1481677567 ... 299;...;...;....
Wie die neue Datei aussehen soll:
(auf 3 Nachkommastellen genau)z.B.: sensor#1;367.017;857,182;3958136,948 sensor#2;977.487;481,182;5815636,044 sensor#3;274.984;918,182;8471551,756 ...
Mein jetziger Stand:
#include <stdio.h> #include <stdlib.h> #include <Windows.h> #define MAX 299 // Anzahl Datensätze 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() { FILE *eingabeDatei = fopen("ProtDat1.txt", "r"); FILE *ausgabeDatei = fopen("Mittelwerte.txt", "w"); tData data[MAX]; // struct array if (eingabeDatei == NULL) { printf("\"ProDat1.txt\" konnte nicht geoeffnet werden!\n"); system("PAUSE"); exit(-1); } else { int i; for (i = 0; i < MAX && !feof(eingabeDatei); i++) { //Einlesen der Datensätze fscanf(eingabeDatei, "%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); } // Ausgabe des 11. Messwertes/Datensatzes (test ob in Datei geschrieben wird) if (i = 10) fprintf(ausgabeDatei, "%d;%s;%d;%d;%d\n", data[i].nr, data[i].sensorName, data[i].measurement.vk, data[i].measurement.nk, data[i].timeStamp); /////// kann ich hier den 11. Datensatz irgendwie nur mit data[11] ausgeben? } fclose(eingabeDatei); fclose(ausgabeDatei); system("PAUSE"); return 0; }
Die Funktion für die Mittelwert Berechnungen soll so aussehen:
float calcAverage(char *sensorname, tData *data, int numData)
und als Argumente einen Sensornamen, das Array mit allen Datensätzen und die Anzahl der Datensätze übergeben bekommen.
Ich soll auf folgendes achten:
- Namen der Dateien (Ein- und Ausgabe) als Kommandozeilenargumente übergeben - Array für die Datensätze bei Bedarf mit realloc() sinnvoll vergrößern
Dafür, dass ich erst seit etwa 2 Monaten überhaupt irgendwas mit programmieren zu tun habe, ist das schon ein krasser Sprung im Vergleich zu den Aufgaben davor, wie ich finde. Und es ist nicht mal ein Informatik Studium.
Bitte ein paar Tipps wie ich vorgehen soll. Danke!
-
wilkaro205 schrieb:
Bitte ein paar Tipps wie ich vorgehen soll. Danke!
Zerlege das Gesamtproblem so weit in Teilprobleme, bis jedes Teilproblem trivial zu lösen ist.
Außerdem solltest du dir unbedingt erst einmal noch ein gutes(!) Lehrbuch für C holen und durcharbeiten. Dein jetziger Lehrer/Buch scheint dir viele Dinge falsch beigebracht zu haben. Da sind viele ziemlich krasse Fehler in deinem jetzigem Quelltext, und zwar solche von der Art, dass man sieht, dass da das tiefere Verständnis fehlt oder gar falsch ist.
-
- Namen der Dateien (Ein- und Ausgabe) als Kommandozeilenargumente übergeben
suchmaschine -> "kommandozeilenparameter c". das beispiel im buch von jürgen wolf (wird bei mir als erstes angezeigt) kannst du ausnahmsweise verwenden, ansonsten solltest du von dem buch abstand nehmen.
- Array für die Datensätze bei Bedarf mit realloc() sinnvoll vergrößern
ich bin jetzt grad irgendwie der meinung, dass man arrays nicht vergrößern kann und daher zeiger verwenden muss, aber ich kann mich auch irren. jedenfalls suchmaschine -> malloc bzw. realloc
Dafür, dass ich erst seit etwa 2 Monaten überhaupt irgendwas mit programmieren zu tun habe, ist das schon ein krasser Sprung im Vergleich zu den Aufgaben davor, wie ich finde. Und es ist nicht mal ein Informatik Studium.
in einem informatikstudium an sich macht man sowas auch nicht, außer vielleicht in "programmieren mit c"
Bitte ein paar Tipps wie ich vorgehen soll. Danke!
datei mit messwerten öffnen -> wenn fehler beim öffnen: programm abbrechen -> solange dateiende nicht erreicht: daten einlesen und in array / an speicherposition abspeichern, wenn fehler beim einlesen: programm abbrechen, wenn maximaler speicher aufgebraucht: weiteren speicher anfordern, wenn fehler beim anfordern: programm abbrechen -> datei mit messwerten schließen -> funktion zur berechnung der mittelwerte aufrufen -> datei für mittelwerte öffnen -> wenn fehler beim öffnen: programm abbrechen -> solange anzahl der mittelwerte nicht erreicht: mittelwerte in datei schreiben, wenn fehler beim schreiben: programm abbrechen -> datei für mittelwerte schließen