C++ Textdatei in Programm einlesen, verarbeiten und ausgeben

Accy

Ensign
Registriert
Feb. 2014
Beiträge
244
Hallo,

ich habe in C++ eine Funktion geschrieben, die mir den gleitenden Mittelwert einer beliebigen Anzahl von Zahlen und beliebigen Datenpunktdichte berechnet.
Sprich, wenn ich angebe, dass ich den gleitenden Mittelwert von 10 Zahlen berechnen möchte, kann ich 10 Zahlen und die Berechnungsdichte von z.B. 5 eingeben und dann wir mir der Mittelwert der ersten 3, dann der ersten 4, dann der ersten 5, dann von der 2. bis zur 6. Zahl ausgegeben usw.

Das funktioniert auch alles wie gewollt, aber jetzt komm ich an ein simples Problem.
Ich habe in einer *.txt Datei in 293 Zeilen Daten über die Corona-Infektionszahlen im Format jeder Zeile "TAG MONAT JAHR NEUINFEKTIONEN" stehen. Diese Liste möchte ich nun gerne in meine Funktion einlesen und den gleitenden Mittelwert von 7 Tagen der Neuinfektionen berechnen lassen.

Ich finde leider keinen passenden Ansatz, wie ich diese Liste in mein Programm einlesen, den gleitenden Mittelwert der Infektionszahlen berechnen und das ganze in einer neuen Textdatei ausgeben kann.

Vielen Dank für eure Hilfe.
 
Und wo genau hakt es?

1. Datei öffnen
2. Zeilenweise einlesen
2a. pro Zeile die 4 Werte (mit Leerzeichen getrennt?) extrahieren
2b. in gewünschter Datenstruktur ablegen
3. Datei schließen
4. Über Datenstruktur iterieren und berechnen

Je nach Algorithmus kannst du die Datenstruktur natürlich auch überspringen und alles on-the-fly berechnen, während du die Zeilen einliest.
 
Zum Einlesen: std::ifstream, die Frage ist, wie viel Validierung willst du machen? Hier mal ein Sample ohne Validierung.
C++:
struct dataset{
int tag,monat,jahr,neuinfektion;
};
int main(){
std::ifstream f("datei.txt");
std::vector<dataset>data;
while(f){
dataset d;
f>>d.tag>>d.monat>>d.jahr>>d.neuinfektion;
data.push_back(d);
}
}

Zum Rausschreiben: std:: ofstream
 
benneq schrieb:
Und wo genau hakt es?

1. Datei öffnen
2. Zeilenweise einlesen
Naja, allein schon daran, dass ich nicht genau weiß wie ich eine Datei Zeilenweise einlese. Bzw. benötige ich ja auch nur den Teil der Neuinfektionen, nicht das Datum.

Hancock schrieb:
Das probier ich mal. Danke.
 
Hancock schrieb:
Zum Einlesen: std::ifstream, die Frage ist, wie viel Validierung willst du machen? Hier mal ein Sample ohne Validierung.
C++:
struct dataset{
int tag,monat,jahr,neuinfektion;
};
int main(){
std::ifstream f("datei.txt");
std::vector<dataset>data;
while(f){
dataset d;
f>>d.tag>>d.monat>>d.jahr>>d.neuinfektion;
data.push_back(d);
}
}

Zum Rausschreiben: std:: ofstream

So, funktioniert es. Vielen vielen Dank. :)
 
Accy schrieb:
So, funktioniert es. Vielen vielen Dank. :)
Aber "zeilenweise" ist das nicht :confused_alt: und das scheitert auch, wenn die Datei nicht durchgehend ein exakt definiertes Format hat.
 
Genau. Hab alles schon etwas abgeändert und mittlerweile hab ich es auch Zeilenweise, so wie es mir passt. Ich möchte einfach nur alle Punkte für die Aufgabe abgrasen.
Bin ja froh, wenn ich auch selbstständig was gelernt bekomme. :)
 
Zurück
Oben