[C] Hilfe bei CSVsim

sqee

Mitglied
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


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:
Zurück