Datei einlesen, schreiben, speichern

hallo, ich muss gerade in C etwas programmieren und weiß nicht mehr weiter :frowning:

C Code:
#include //für printf
#include //für getch();
#include //für fprintf

// crt_fopen.c
/* This program opens two files. It uses
* fclose to close the first file and
* _fcloseall to close all remaining files.
*/

#include

FILE *stream, *stream2;

main()
{
char cDateiAuswahl;

printf("********** Datei-Auswahl **********\n\n");
printf(„1. Airplus\n“);
printf(„2. Vodafone\n“);
printf(„3. Beenden\n\n“);

printf(„Bitte waehlen Sie nun, welche Datei sie verarbeiten wollen.\n\n“);
printf(„Ihre Eingabe: „);
scanf(“%i“,&cDateiAuswahl);
printf("\n\n\n");

switch(cDateiAuswahl)
{
case 1: printf("********** Airplus **********\n");

int numclosed;
char line[100];

/* Open for read (will fail if file „Air_Plus_Beispiel.xls“ does not exist) */
if( (stream = fopen( „Air_Plus_Beispiel.csv“, „r“ )) != NULL )
{
printf( „The file ‚Air_Plus_Beispiel.csv‘ was opened\n“ );

if( fgets( line, 100, stream ) == NULL)
printf( „fgets error\n“ );
else
printf( „%s“, line);
fclose( stream );
}
else
printf( „The file ‚cAir_Plus_Beispiel.csv‘ was not opened\n“ );

/* Open for write */
if( (stream2 = fopen( „test.csv“, „w+“ )) == NULL )
printf( „The file ‚test.csv‘ was not opened\n“ );
else
printf( „The file ‚test.csv‘ was opened\n“ );

/* Close stream */
if( fclose( stream ) )
printf( „The file ‚Air_Plus_Beispiel.csv‘ was not closed\n“ );

/* All other files are closed: */
numclosed = _fcloseall( );
printf( „Number of files closed by _fcloseall: %u\n“, numclosed );

break;
case 2: printf("********** Vodafone **********\n");
break;
case 3: printf("********** Programm wird beendet **********\n");
break;
default : printf("********** Falsche Eingabe! **********\n");
break;
}
system(„pause“);

}

so, nun hab ich das soweit und es läuft auch, worauf ich super stolz bin
aus Air_Plus_Beispiel.csv sollen nur bestimmte werte eingelesen werden, die sich aber zeile für zeile wiederholen. diese werte sollen wiederrum in test.csv geschrieben werden. die werte sind in der ersten datei durch ; getrennt.
wie bekomm ich die nun in meine andere datei?

bitteeeeeeeeeeee helft mir :frowning:

Hallo,

wie wäre es z.B. mit fread und fwrite? Oder fscanf und fprintf?

Mfg,
Pürsti

hab nun einmal fast komplett neu gemacht:

#include

#include

#define INPUTFILE „Air_Plus_Beispiel.csv“ //inputfile wird definiert
#define OUTPUTFILE „test.csv“ //outputfile wird definiert
#define DELIM „;“ //ab ; neu

int main (void) {
FILE * input_stream, *output_stream; //Dateizeiger, zeigt auf Informationen über eine geöffnete Datei (nach fopen())
char line[BUFSIZ]; //Speicherbereich für eingelesene Zeile
char *tokens[BUFSIZ]; //Zeigerarray zum Speichern der Zeiger auf die einzelnen Tokens
int i;
char * temptok; //Hilfszeiger für strtok()
char file;

printf("********** Datei-Auswahl **********\n\n");
printf(„1. Airplus\n“);
printf(„2. Vodafone\n“);
printf(„3. Beenden\n\n“);

printf(„Bitte waehlen Sie nun, welche Datei sie verarbeiten wollen.\n\n“);
printf(„Ihre Eingabe: „);
scanf(“%i“,&file);
printf("\n\n\n");

switch(file)
{
case 1: printf("********** Airplus **********\n");

input_stream = fopen( INPUTFILE, „r“); // Eingabe oeffnen (lesen)
if (input_stream == NULL) //bei nicht vorhandener datei…
{
printf( „\nThe file ‚%s‘ was not opened\n“, INPUTFILE );//fehlermeldung
exit(2);
};

output_stream = fopen( OUTPUTFILE, „a“); //Ausgabe oeffnen (anhängen)
if (output_stream == NULL) //bei nicht vorhandener datei…
{
printf( „\nThe file ‚%s‘ was not opened\n“, OUTPUTFILE );//fehlermeldung
exit(2);
};

while (!feof(input_stream)) //Solange kein End-Of-File in der Eingabe…
{
fgets (line, BUFSIZ, input_stream); //liest eine Zeile von einer Datei ein

i = 0;
temptok = line; //weißt die gespeicherte Adresse in line auf temptok zu; temptok zeigt somit auf die gleiche Adresse wie line
while ( (tokens[i] = strtok(temptok, DELIM)) != NULL) //strtok erwartet folgende Parameter:
//temptok ist die zu splittende Zeile beim 1. Aufruf und NULL bei nachfolgenden Aufrufen;
//der zweite Parameter sind die Grenzen der Tokens
// Konstante DELIM oben auf „;“ definiert
//strtok gibt einen Zeiger auf den nächsten Token zurück oder NULL, wenn kein Token mehr da ist
//(String zu Ende tokenisiert)

//weise tokens[i] die Adresse des nächstens Tokens zu; wenn die Adresse nicht NULL ist, mache Folgendes: …
{
temptok = NULL;
i++;
};

//schreiben in datei
fprintf (output_stream, „\n%s;“,tokens[3]);
fprintf (output_stream, „%s;“,tokens[4]);
fprintf (output_stream, „%s;“,tokens[5]);
fprintf (output_stream, „%s;“,tokens[13]);
fprintf (output_stream, „%s;“,tokens[17]);
fprintf (output_stream, „%s;“,tokens[18]);
fprintf (output_stream, „%s;“,tokens[19]);
fprintf (output_stream, „%s;“,tokens[25]);
fprintf (output_stream, „%s;“,tokens[27]);
fprintf (output_stream, „%s;“,tokens[31]);
fprintf (output_stream, „%s;“,tokens[38]);
};
//schließen der beiden datein
fclose (output_stream);
fclose (input_stream);

break;
case 2: printf("********** Vodafone **********\n");
break;
case 3: printf("********** Programm wird beendet **********\n");
break;
default : printf("********** Falsche Eingabe! **********\n");
break;
}
system(„pause“);

}

irgendwio ist da noch ein fehler versteckt. das mit dem einschreiben in die neue datei klappt, aber irgendwie ist es nicht wirklich gut geordnet…

der anfang sieht klasse aus…am ende kommt er beim schreiben durcheinander. kann jemand den fehler sehen?