Leitwolf22
Lt. Junior Grade
- Registriert
- Juni 2008
- Beiträge
- 268
Hallo
Ich versuche da gerade ein paar wenige Daten von diversen Wetterstationen zu analysieren. Das ganze lauft dann in Excel unter ein paar VBA Skripts. Der Teil funktioniert und ist ok.
Die eigentlichen Quelldateien sind aber gigantisch und in "Monatspakete" (a ca. 500mb) zusammengefasst. Den ersten Datensatz habe ich noch manuell extrahiert, was aber so 3-4h dauert. Da dieser Ansatz wenig zukunftsträchtig schien, habe ich mich meiner rudimentären C Kenntnisse erinnert um das Problem so zu lösen.
Nun habe ich schon die für mich relevanten Stationen raus extrahiert und in Jahrespakete umgepackt, von denen ich nun zwei habe. Aus diesen will ich nun Files erstellen, die die gesuchten Daten pro Wetterstation über den gesamten Zeitraum von 2 Jahren enthalten. Auch das funktioniert nun prinzipiell bzw. lauft das Programm gerade, allerdings halt nicht sehr performant. Der schreckliche Code dazu folgt unten (relevant ist eigentlich nur der 2. Teil)...
Meine Frage ist nun. Das Programm lauft unter Codeblocks "build and run". Bringt es was, wenn man eine .exe compiliert und es dann in DOS laufen lässt? Mir ist aufgefallen, dass der Task Manager eine völlig unausgelastete CPU anzeigt während das Programm lauft. Von daher sollte also viel Luft nach oben sein. So wie es jetzt läuft, werden etwa 24h vergehen..
https://pastebin.com/embed_js/Gtbf9WFg
Ich versuche da gerade ein paar wenige Daten von diversen Wetterstationen zu analysieren. Das ganze lauft dann in Excel unter ein paar VBA Skripts. Der Teil funktioniert und ist ok.
Die eigentlichen Quelldateien sind aber gigantisch und in "Monatspakete" (a ca. 500mb) zusammengefasst. Den ersten Datensatz habe ich noch manuell extrahiert, was aber so 3-4h dauert. Da dieser Ansatz wenig zukunftsträchtig schien, habe ich mich meiner rudimentären C Kenntnisse erinnert um das Problem so zu lösen.
Nun habe ich schon die für mich relevanten Stationen raus extrahiert und in Jahrespakete umgepackt, von denen ich nun zwei habe. Aus diesen will ich nun Files erstellen, die die gesuchten Daten pro Wetterstation über den gesamten Zeitraum von 2 Jahren enthalten. Auch das funktioniert nun prinzipiell bzw. lauft das Programm gerade, allerdings halt nicht sehr performant. Der schreckliche Code dazu folgt unten (relevant ist eigentlich nur der 2. Teil)...
Meine Frage ist nun. Das Programm lauft unter Codeblocks "build and run". Bringt es was, wenn man eine .exe compiliert und es dann in DOS laufen lässt? Mir ist aufgefallen, dass der Task Manager eine völlig unausgelastete CPU anzeigt während das Programm lauft. Von daher sollte also viel Luft nach oben sein. So wie es jetzt läuft, werden etwa 24h vergehen..
https://pastebin.com/embed_js/Gtbf9WFg
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
int main ()
{
FILE *fp;
FILE *fpout;
FILE *fpinpt;
char line[255];
char temp[6];
char filedir[30] = "C:\\klima\\";
char filebase[30] = "C:\\klima\\exctracth";
char fileopen[30];
int vflag;
int i;
int a;
int x;
char locks[473][6];
//char filenames [12][20] = {"201601hourly.txt","201602hourly.txt","201603hourly.txt","201604hourly.txt","201605hourly.txt","201606hourly.txt","201607hourly.txt","201608hourly.txt","201609hourly.txt","201610hourly.txt","201611hourly.txt","201612hourly.txt"};
//char filenames [12][20] = {"201601daily.txt","201602daily.txt","201603daily.txt","201604daily.txt","201605daily.txt","201606daily.txt","201607daily.txt","201608daily.txt","201609daily.txt","201610daily.txt","201611daily.txt","201612daily.txt"};
char filenames [2][30] = {"C:\\klima\\extract 2015h.txt", "C:\\klima\\extract 2016h.txt"};
fpinpt = fopen("C:\\klima\\statcode.txt", "r");
for (i= 0; i < 472; i++) {
fgets (locks[i],6, fpinpt);
fgets (temp,2, fpinpt);
}
fclose (fpinpt);
/* End of part 1, start or part 2 */
for (a=0; a<472;a++) {
strcpy (fileopen, filebase);
strcat (fileopen, locks[a]);
strcat (fileopen, ".txt");
printf ("%d und dateiname %s\n", a, fileopen);
fpout = fopen(fileopen, "w"); // Write open
for (x = 0; x<2; x++) {
fp = fopen(filenames[x], "r");
if (fp != NULL) {
while (!feof(fp)) {
fgets(line,255, fp);
if (strstr(line, locks[a])) {
fputs (line, fpout);
}
}
}
fclose (fp);
}
fclose (fpout); // Write close
}
return 0;
}
Zuletzt bearbeitet: