DAtei öffnen --- auslesen
-
Hallo,
so spontan würde ich sagen die Zeile
fprintf (output_stream, "\n%s;",tokens[3]); ist falsch,
das haut zwar bei allen nachfolgenden Zeilen hin,bei der allerersten ist der
Zeilenwechsel aber überflüssig,ich würde ihn eher an die letzte frprintf Anweisung anhängen,bzw. das Zeilenende seperat schreiben.
Ich bin mir auch nicht 100% sicher ob ein \n reicht,vielleicht ist auch ein \n\r notwendig.Peter
-
#include <stdio.h> #include <string.h> #define INPUTFILE "Air_Plus_Beispiel.csv" #define OUTPUTFILE "test.csv" #define DELIM ";" #define ANZ_SPALTEN 45 #define LINE_LENGTH 1024 int main (void) { FILE * input_stream, *output_stream; //Dateizeiger, zeigt auf Informationen über eine geöffnete Datei (nach fopen()) char line[LINE_LENGTH]; //Speicherbereich für eingelesene Zeile //char line [LINE_LENGTH]; //Zeigerarray zum Speichern der Zeiger auf die einzelnen Tokens int i; char * temptok; //Hilfszeiger für strtok() char file; char tokens[ANZ_SPALTEN][LINE_LENGTH]; char *akt_token; //neuer Zeiger, der auf das aktuelle Token zeigt 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) { 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) { printf( "\nThe file '%s' was not opened\n", OUTPUTFILE );//fehlermeldung exit(2); }; while (!feof(input_stream)) //Solange kein End-Of-File in der Eingabe... { if( fgets (line, LINE_LENGTH, input_stream) ) //liest eine Zeile von einer Datei ein { temptok = line; for(i = 0; (akt_token = strtok(temptok, DELIM)) != NULL && i < ANZ_SPALTEN; ++i) { strcpy(tokens[i], akt_token); temptok = 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: ... //schreiben in datei fprintf (output_stream, "%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\n",tokens[38]); } //if( fgets(...) ) } //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; } printf("Drücken Sie ENTER"); getchar(); }
das ist nun die aktuellste version.
nur verhaut der kompiler da einiges...anfang klappt es, danach würfelt er einiges durcheinander
-
Hallo,
ich vermute mal bis Zeile 1 letzer Eintrag stimmts,danach mach er mist?Oder ab welcher stelle genau?
Peter
-
ja genau, erste zeile stimmt, aber danach bringt er einiges durcheinander.
jemand von einen andern board hat es mal unter seinen linux compiler laufen lassen und da ging es wohl ohne probleme.
werde gleich mal mir noch andere compiler runterladen. denn ich find sonst keinen fehler mehr
-
Und mal mit /n/r probiert?
-
auch nicht
frag mich was nun noch daran falsch ist *grrrrrrrrrrrrrrrrrrrr*
ich will das endlich fertig haben
-
Hallo,
du solltest außer dem dieses /n oder /n/r an eine Feste Position in der Ausgabezeile schreiben,führt ansonsten zu Problemen wenn ein Feld mal leer ist.Peter
-
wie meinst du das?
wie umsetzen?
-
Hallo,
probiers mal hiermit:
fprintf (output_stream, "%s\n\r",tokens[38]);Ach übrigens bei diesen fprintf,was ist mit token[0] ???
mfg
Peter
-
ok, dann hab ich es doch richtig verstanden.
so hatte ich es gesetzt, hilft aber nicht. bleibt immernoch alles gleich.was soll mit mit token[0] sein? ich hab es mitgezählt, also ich hab bei 0 angefangen zu zählen. aber 0 soll ja nicht ausgegeben werden .
-
Hallo,
also token[0]=Zeilenüberschrift oder so?
tja was schreibt er den? bzw,was stimmt da genau nicht?Peter
-
lol, fällt mir ja jetzt erst auf.
ich fang mit tokens[3] , dies soll die ersten werte ausgeben. aber nicht die überschrift.
allerdings gibt er die überschrift aus, die eigentlich in token[0] steht.
komisch..irgendwas ist falsch schon am anfang beim einlesen. werd es mir nochmal anschauen
-
vergiss mein letztes posting..war schwachsinn..war net bei der sache