Anfänger: C: Datei einlesen, anzeigen, in Großbuschstabeln wandeln, abspeichern
-
naja ich hab bisjetzt noch relativ wenig mit c zu tun gehabt und weis nicht wo ich anfangen soll.
-
Alexander.Moritz.1007 schrieb:
naja ich hab bisjetzt noch relativ wenig mit c zu tun gehabt und weis nicht wo ich anfangen soll.
Dann würde ich vorschlagen, du unterteilst dein Vorhaben in mehrere Teilaufgaben und fängst mit dem ersten an. Probier einfach mal ein wenig rum, und bei konkreten Problemen poste deinen Source, dann helfen wir dir natürlich.
Bis dahin ein paar Stichwörter:
Umgang mit Dateien: fopen, fclose, fread, fwrite, fscanf...
Umwandeln in Großbuchstaben: z.B. toupper
Sortieren: z.B. quicksort
-
Also im Moment klappt das schon mit dem öffnen der Datei
int main(void) { FILE *datei; datei = fopen("Zahlendatei.txt", "r"); if(NULL == datei) { printf("Konnte Datei \"Zahlendatei.txt\" nicht öffnen!\n"); return EXIT_FAILURE; } return EXIT_SUCCESS; }
So könnten ihr mir dann helfen die geöffnete datei in eine andere zu speichern? oder schon in grossbuchstaben wandeln?
Danke Alex
-
Du brauchst noch eine zweite Datei, die du zum Schreiben öffnest. Dann kannst du die Buchstaben mit fgetc einlesen, in Großbuchstaben umwandeln und in die zweite Datei reinschreiben.
Z.B.
-
ok. und wie sieht das quelltechnisch dann aus?
tut mir echt leid nur ich versuch mich da wirklich einzuarbeiten nur irgendwie komm ich einfach nicht voran.
-
Alexander.Moritz.1007 schrieb:
ok. und wie sieht das quelltechnisch dann aus?
tut mir echt leid nur ich versuch mich da wirklich einzuarbeiten nur irgendwie komm ich einfach nicht voran.Momentan wirkt es ehrlich gesagt noch nicht, als ob du dich einarbeiten würdest. Du hättest schon gerne einen fertigen Quellcode, oder?
Ok, pass auf...
Den ersten Schritt hast du schon erledigt: das Öffnen einer Datei. Nun wurde schon erwähnt, dass eine zweite Datei hilfreich sein kann, in die du dein Ergebnis schreibst. Hast du das schon umgesetzt (falls ja => aktuellen Code, bitte)?
Zum Lesen aus der Datei gibt es verschiedene Funktionen: fgetc, fgets, fread, fscanf usw. Hast du damit schon was einlesen können (=> Code, bitte)? Zum Schreiben kannst du die entsprechenden Gegenstücke verwenden (fputc, fputs, fwrite, fprintf...).
Zum Umwandeln in Großbuchstaben kannst du z.B. toupper benutzen. Hast du in der Richtung schon mal was ausprobiert (=> her mit dem Code!)?
Zum Trennen der einzelnen per Sternchen getrennten Elemente könntest du sowas wie strtok benutzen.
-
Hier schau mal
#include <stdio.h> int main(void) { FILE *DateiNRS; char zeichen[1000]; DateiNRS = fopen("NRS_Zahlen.txt", "r"); if (DateiNRS == NULL) { printf("Datei NRS_Zahlen.txt kann nicht geöffent werden bzw ist leer \n"); exit(-1); } printf("Datei geöffnet.\n"); FILE *SchreibdateiNRS; SchreibdateiNRS =fopen("NRS_neu.txt", "w"); if (SchreibdateiNRS == NULL) { printf ("\nBitte die Datei NRS_neu.txt anlegen\n"); exit(-1) } fclose (DateiNRS); fclose (SchreibdateiNRS); system("PAUSE"); return 0;
-
Ok, du hast schon mal die beiden Dateien geöffnet und geschlossen. Jetzt solltest du nur dem Teil dazwischen mal etwaas Leben einhauchen.
Versuch doch mal, zeichenweise aus der Quelldatei zu lesen und in die Zieldatei zu schreiben (also quasi eine Kopie anzulegen). Wenn das klappt, versuche, dabei alle kleinen in große Buchstaben umzuwandeln (toupper). Dann sehen wir weiter.
Btw, du solltest an deiner Einrückung arbeiten. So sieht es viel strukturierter aus:
#include <stdio.h> int main(void) { FILE *DateiNRS; char zeichen[1000]; DateiNRS = fopen("NRS_Zahlen.txt", "r"); if (DateiNRS == NULL) { printf("Datei NRS_Zahlen.txt kann nicht geöffent werden bzw ist leer \n"); exit(-1); } printf("Datei geöffnet.\n"); FILE *SchreibdateiNRS; SchreibdateiNRS =fopen("NRS_neu.txt", "w"); if (SchreibdateiNRS == NULL) { printf ("\nBitte die Datei NRS_neu.txt anlegen\n"); exit(-1) } fclose (DateiNRS); fclose (SchreibdateiNRS); system("PAUSE"); return 0; }
-
/*#include <iostream.h>*/ #include <stdlib.h> #include <stdio.h> #define BUFFERSIZE 15000 int main(void) { FILE *DateiNRS; char nrs[1000]; DateiNRS = fopen("NRS_Zahlen.txt", "r"); if (DateiNRS == NULL) { printf("Datei NRS_Zahlen.txt kann nicht geoeffent werden bzw ist leer \n"); exit(-1); } printf("Datei NRS_Zahlen.txt geoeffnet.\n"); FILE *SchreibdateiNRS; SchreibdateiNRS =fopen("NRS_neu.txt", "w"); if (SchreibdateiNRS == NULL) { printf ("\nBitte die Datei NRS_neu.txt anlegen\n"); /* Legt die Datei automatisch an.*/ exit(-1); } printf("\nDatei NRS_neu.txt geoeffnet.\n"); while(fgets(nrs, BUFFERSIZE, file_stream)) { sort_nrs(nrs); fprintf(SchreibdateiNRS,"%s\n",nrs); } if (SchreibdateiNRS != NULL) { printf ("\n Zahlen wurden erfolgreich geschrieben in Datei NRS_neu.txt"); } fclose (DateiNRS); fclose (SchreibdateiNRS); system("PAUSE"); return 0; }
hab mich etwas duchs internet gekämpft irgendwie so wird dass sicher gehen nur wie
-
Kriegst du das Programm kompiliert (wenn nicht, bitte Fehlermeldungen posten)? Mir ist z.B. sort_nrs unbekannt (und dir vermutlich auch
).
-
Hallo,
Alexander.Moritz.1007 schrieb:
... #define BUFFERSIZE 15000 ... ... char nrs[1000]; ... while(fgets(nrs, BUFFERSIZE, file_stream)) ...
dein BUFFERSIZE passt nicht zur Dimension der Variable nrs. Das kann zu einem Programmabsturz führen, oder es gehen Daten verloren.
Versuche mal rauszufinden, was die Parameter der Funktion fgets bedeuten, z.B. hier http://www.cplusplus.com/reference/clibrary/cstdio/fgets/.Gruß,
B.B.