Hi leute, mein Programm liest von einer srcfile die daten und kopiert sie dann in ein destfile.
Mein Problem ist er sortiert die Sachen(Daten) nicht, heißt ich will eine 1:1 kopie haben der Daten, das der oberste Wert in der srcfile auch in der destfile steht!
Hab es auch schon mit fseek probiert, mit fgetpos aber irgendwie ist nichts raus gekommen.
Beispiel:
So macht er es:
srcfile 30,60,80 bub 19/07/2010, 14:35:45
35,65,85 bub 19/07/2010, 14:34:50
destfile 35,65,85 bub 19/07/2010, 14:34:50
30,60,80 bub 19/07/2010, 14:35:45
-----------------------------------------------------------------------------------------
Und so soll er es machen!
srcfile 30,60,80 bub 19/07/2010, 14:35:45
35,65,85 bub 19/07/2010, 14:34:50
destfile 30,60,80 bub 19/07/2010, 14:35:45
35,65,85 bub 19/07/2010, 14:34:50
Bitte um Hilfe !!
lg sqee
Mein Problem ist er sortiert die Sachen(Daten) nicht, heißt ich will eine 1:1 kopie haben der Daten, das der oberste Wert in der srcfile auch in der destfile steht!
Hab es auch schon mit fseek probiert, mit fgetpos aber irgendwie ist nichts raus gekommen.
Beispiel:
So macht er es:
srcfile 30,60,80 bub 19/07/2010, 14:35:45
35,65,85 bub 19/07/2010, 14:34:50
destfile 35,65,85 bub 19/07/2010, 14:34:50
30,60,80 bub 19/07/2010, 14:35:45
-----------------------------------------------------------------------------------------
Und so soll er es machen!
srcfile 30,60,80 bub 19/07/2010, 14:35:45
35,65,85 bub 19/07/2010, 14:34:50
destfile 30,60,80 bub 19/07/2010, 14:35:45
35,65,85 bub 19/07/2010, 14:34:50
Bitte um Hilfe !!
lg sqee
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#if defined(__WIN32__) || defined(_MSC_VER)
# define stat _stat
#endif
static void usage(void)
{
printf("\nCSVSim " VERSION "\n\n");
printf("Nutzung: CSVSim <Quelldatei.csv> <Zieldatei.csv> <Verzoegerung>\n\n");
printf("CSVSim liest eine Komma separierte (CSV-)Quelldatei ein und gibt\n");
printf("sie Zeile um Zeile beginnend mit der letzten Zeile in eine (CSV-)\n");
printf("Zieldatei mit der Verzoegerung (in s) aus.\n\n");
}
int main(int argc, char* argv[])
{
char srcname[128]; // Quelldateiname
char destname[128]; // Zieldateiname
unsigned int delay; // Verzoegerungszeit in s
FILE* srcfile, * destfile; // Quell- bzw. Zieldatei
struct stat filestat; // Dateiattributstruktur
char sbuffer[128]; // Zeilenpuffer fuer lesen
int linesize; // Zeilenpuffergroesse
char* fbuffer; // Dateipuffer fuer schreiben
// lese Programmparameter ein
if (argc != 4)
{
usage();
return EXIT_FAILURE;
}
else
{
sscanf(argv[1], "%s", srcname);
sscanf(argv[2], "%s", destname);
sscanf(argv[3], "%u", &delay);
}
// oeffne Quelldatei
srcfile = fopen(srcname, "rt");
if (srcfile == NULL)
{
fprintf(stderr, "FEHLER: %s kann nicht geoeffnet werden.\n", srcname);
return EXIT_FAILURE;
}
// Hauptschleife
while (1)
{
// lese Zeile aus der Quelldatei
if (fgets(sbuffer, 128, srcfile) == NULL) break;
// oeffne Zieldatei
if ((destfile = fopen(destname, "rt")) == NULL)
{
fprintf(stderr, "FEHLER: %s kann nicht geoeffnet werden.\n", destname);
return EXIT_FAILURE;
}
// lese Zieldatei in Puffer aus
stat(destname, &filestat); // status abfrage
linesize = strlen(sbuffer); // linesize ist stringlänge von sbuffer
fbuffer =(char*) calloc(filestat.st_size + linesize, 1); // dynamische speicherreservierung an fbuffer
fread(fbuffer + linesize, filestat.st_size, 1, destfile); // liest den speicherblock der destfile
fclose(destfile); // schließe destfile
// schreibe Zeile in den Puffer
memcpy(fbuffer,sbuffer,linesize); // Speicher speicherblock, stringlänge von srcfile und stringlänge von sbuffer
// schreibe Puffer in Zieldatei
destfile = fopen(destname, "wt"); // öffne destfile zum schreiben eines textes
fwrite(fbuffer, strlen(fbuffer), 1, destfile); // schreibe den speicherblock von fbuffer, sie stinglänge von fbuffer in die destfile
free(fbuffer); // speicherbereich von fbuffer wird freigegeben
fclose(destfile); // schließe destfile
sleep(delay); // verzoegere Programmausfuehrung
}
// schliesse Quelldatei
fclose(srcfile);
return EXIT_SUCCESS;
}
Zuletzt bearbeitet: