Öffnen und Erzeugung einer Textdatei in C
-
Guten Abend liebe Community,
ich bin momentan an einem Programm dran, das eine Textdatei mit Zahlenwerten einließt und dann eine neue Textdatei erzeugen soll in tabellarischer Form mit den einzelnen Werten und deren Mittelwerten aus der vorher eingelesenen Textdatei.Ich bin schon die ganze Zeit im Netz am suchen, jedoch habe ich Schwierigkeiten zum einen mit dem Erstellen der Textdatei.
Würde mich freuen wenn man mir hier Tipps geben könnte.
-
Was genau ist dein Problem?
Du schreibste "habe ich Schwierigkeiten zum einen mit dem Erstellen der Textdatei.", aber darum geht es in deinem Programm gar nicht.
Du öffnest eine Datei zum lesen und schließt sie wieder.
Ach ja, nur eine Meldung ist im Fehlerfall nicht genug.
-
hi cobain
bevor du die datei erzeugst und reinschreibst, brauchst du eine funktion, die deine zahlenwerte einliest. zur probe würde ich die werte in der konsole ausgeben.
eine funktionen zum einlesen ist z.b. fscanf und brauchbar, wenn deine zahlenwerte im textformat vorliegen.
eine datei zum schreiben erzeugen geht mit fopen so:
FILE *fp_out; fp_out = fopen("werte_ausgabe.txt", "w"); if(fp_out) { // Werte schreiben ... flose(fp_out); }
die verlinkten inhalte zeigen auch code mit beispielen zur benutzung der funktionen.
ansonsten empfehle ich tutorials die codebeispiele zeigen, davon gibt es auch einige in deutsch - oder einfach warten, bis dein prof die c-funktionen erklärt, geduld geduld...
-
danke für die seite, aber hätte da noch eine frage. die textdatei die eingelesen wird beinhaltet zahlenwerte die untereinander mit einem komma getrennt sind. wie kriege ich es am besten hin, dass die zahlenwerte korrekt ohne dem komma eingelesen und abgespeichert werden in einem array ??
-
Lass dir nicht alles aus der Nase ziehen.
Wie sieht dein Format konkret aus?
- sind Leerzeichen vorhanden, wenn ja wo (vor,nach dem Komma...)?
- hat jede Zeile die gleiche Zahl von Werten, d.h. ist das Newline '\n' relevant?
- gibt es Leerzeilen?Ich denke du hast Schwierigkeiten mit dem Erstellen einer Textdatei, was denn nun?
Du scheinst Schwierigkeiten schon mit dem Lesen (und Interpretieren) von Textdateiinhalten zu haben.
-
Es gibt da verschiedene Möglichkeiten:
- Indem du das Komma im Formatstring vonfscanf
angibst.
- Ganze Zeile (mitfgets
) einlesen und mitsscanf
auswerten (wie oben)
- Ganze Zeile (mitfgets
) einlesen und mitstrtod
auswerten, dabei denendptr
nutzen.Werte bei scanf den Rückgabewert aus.
Vor dem Komma im Formatstring kannst du noch ein Leerzeichen einfügen.Wenn du mal eine Beispielzeile aus deiner Datei zeigst, können wir auch sagen, ob dein Formatstring richtig ist.
-
eine Zeile wäre zb. eine solche: 86,13,1,14,20,2,128
was ich mir halt gedacht habe ist das alles in einer schleife einzubauen und dann die werte in einem array abzuspeichern
-
Cobain schrieb:
eine Zeile wäre zb. eine solche: 86,13,1,14,20,2,128
Sind es immer 7 Werte?
Cobain schrieb:
was ich mir halt gedacht habe ist das alles in einer schleife einzubauen und dann die werte in einem array abzuspeichern
Geht auch.
-
nein sind mehrere alle in einer zeile habe eben nur die ersten sieben kopiert.
wollte alle werte abzählen und dementsprechend eine for-schleife mit der anzahl der werte in einem array abspeichern aber verstehe wirklich immer noch nicht wie ich nur die werte in den array abspeicher. wäre nett wenn man mir ein beispielcode zeigen könnte
-
wieso wird meine textausgabe nicht abgespeichert ?
int main () { int x; printf("\t> Willkommen zur Messwerterfassung <\n\n\n"); printf("Bitte waehlen Sie einen Modus aus.\n"); printf("(1) Lesen der Textdatei.\n"); printf("(2) Beenden des Programms.\n\n"); printf("Eingabe: "); scanf("%d",&x); while(x!=1&&x!=2) { printf("\n\nIhre Eingabe ist nicht gueltig, deswegen wiederholen Sie die Eingabe.\n\n"); printf("Eingabe: "); scanf("%d",&x); } if(x==2) { printf("\n\nDas Programm wurde beendet.\n\n"); return 0; } char NameAusgabedatei[] = "mittelwerte_0_00.txt"; char Ausgabezeile[81]; FILE *fp; // Datei oeffnen fp = fopen("werte.txt", "r"); if(fp == NULL) { printf("\n\nDie Datei konnte NICHT geoeffnet werden.\n"); }else { printf("\n\nDie Datei konnte geoeffnet werden.\n\n\n"); } fp=fopen(NameAusgabedatei,"w+"); if(fp!=NULL){ sprintf ("Messzeitpunkt","\tMesswert","\tMittelwert","\tStatus\n\n"); fwrite(Ausgabezeile,strlen(Ausgabezeile),1,fp); fclose(fp); } printf ("Messzeitpunkt\tMesswert\tMittelwert\tStatus\n\n"); // Datei schliessen fclose(fp); printf("\n\nDie Tabelle mit den erzeugten Dateien wurde erfolgreich erstellt.\n\n"); return 0; }
-
Bei deinem
sprintf
sind die Parameter falsch.Aber da kannst du auch gleich
fprintf
oderfputs
nehmen.
Das ist da sinnvoller alsfwrite
.
-
ii
-
Cobain schrieb:
..., jedoch weiss ich grad nicht so richtig wie ich nun die zahlenwerte meiner vorgabedatei korrekt abspeichern kann.
Bisher habe ich es so verstanden, dass du schon eine Datei hast, in der die Daten stehen.
Die ganze Datei besteht nur aus einer Zeile, in der die Werte durch Komma getrennt sind.
Als Beispiel hast du 86,13,1,14,20,2,128 gegeben.Was willst du damit machen?
Wie soll daraus Messzeitpunkt, Messwert, Mittelwert und Status werden?
-
messzeitpunkt wird einfach mit i pro zeile um 1 erhöht bis alle werte durchlaufen sind. es sind in einer datei 37 werte gegeben und darauf bezieht sich i. mein problem ist es grad nur die dateien in der vorgabedatei mit den zahlen abzuspeichern um sie in der neuen textdatei einzubinden. dabei wird auch der mittelwert ausgegeben der immer mit dem vorherigen wert addiert wird und dann durch 2 geteilt wird.
-
Wenn du die Werte einzeln verarbeitest, brauchst du kein Array.
Du kannst einen Wert einlesen, verarbeiten und ausgeben.
Das in einer Schleife, bis alle Daten gelesen sind.Du kannst deine Vorgabedatei erstmal ohne Komma (nur Leerzeichen als Trenner) abspeichern.
Das macht das am Anfang leichter.
-
das problem ist, dass es die bedingung der aufgabe ist die werte genau so auszulesen
-
Schritt für Schritt.
Die Erweiterung um das Komma zu überlesen, kannst du dann immer noch einbauen, wenn du weißt, dass der Rest funktioniert.
-
ich versuche mich ganze zeit dran aber schaffe es nicht. ich bekomme die werte die ich lese nicht in einem array. ich wollte es mit einem array machen da es direkt übersichtlicher ist meiner meinung nach für die ausgabe und fürs rechnen
-
Aha. Wir sollen dir deine Hausaufgaben machen.
Du weißt nicht, wie du ein Array befüllst?
Dann musst du im Unterricht besser aufpassen, das sind absolute Grundlagen.
-
das habe ich nicht gesagt bzw geschrieben! wäre es so wie du es darstellst dann würde ich ja demnach alle aufgabenstellungen einfach hier runter schreiben, jedoch ist das nicht der fall! ich habe nur ein problem und das habe ich oben bereits oben aufgeschrieben.
-
Wenn du uns nicht zeigst was du probierst, können wir dir nicht sagen, wo der Fehler ist.
In deinem bisher geposteteter Code kommt davon nichts vor.