C++ Float Werte aus txt lesen

Pilly

Lt. Commander
Registriert
Juli 2004
Beiträge
1.264
Folgendes Problem: Ich habe eine txt Datei, welche hintereinander float Werte gespeichert hat, die durch ein Leerzeichen getrennt sind. Ich bin noch recht neu in der Programmierung mit C++ und deshalb fällt mir gerade keine Möglichkeit ein, wie ich daraus die einzelnen float Werte in einem float Array speichern könnte.
Hatte überlegt, bei dem Leerzeichen zu teilen in einzelne Strings und diese dann zu float zu konvertieren. Allerdings fehlt mir da gerade das Handwerkszeug zu...
 
Ich hab bislang nur ein bisschen C und kein C++ programmiert, allerdings hatte ich ziemlich genau die gleiche Aufgabe vor einigen Wochen in C.

Code:
#include <stdio.h>

int main()
{
    /* Variable fuer FILE deklarieren und
    mit test.dat im reading-mode belegen */
    FILE* f;
    f = fopen("test.dat", "r");
    
    /* Variable fuer den ersten Summenwert deklarieren und initialisieren,
    erste Zeile in Datei als integer in Variable speichern */
    int sumValue = 0;
    fscanf(f, "%d", &sumValue);
    
    /* Weiter benoetigte Variablen deklarieren und initialisieren */
    int a = 0;
    int b = 0;
    int sum = 0;
    
    /* Lese Datei aus, bis EOF erreicht. Summere jeweils Produkt aus a und b
    auf. */
    while(fscanf(f, "%d*%d", &a, &b) !=EOF)
    {
        sum += a*b;
    }
    
    
    /* Vergleiche, ob Summe der Produkte mit erstem Wert uebereinstimmt und
    gebe entsprechende Meldung aus */
    if(sumValue == sum)
    {
        printf("Passt!\n");
    }
    else
    {
        printf("Passt nicht!\n");
    }
}

Das Ding liest erst einmal eine Zeile direkt als Integer ein. Die darauf folgenden Zeilen werden auf ihre Form Zahl*Zahl ueberprueft (z.B. stuende da dann 230*70) und eingelesen/verarbeitet bis EOF = End Of File erreicht ist.

Ich denke mir, dass das auch in C++ so problemlos moeglich sein sollte.

Die naechste Problematik liegt bei dir natuerlich darin, das Float Array in passender Groesse anzulegen. Da koenntest du dich mal durch die Dokumentation wuehlen um herauszufinden, wie man flexible/mitwachsende Arrays realisieren kann (etwas unpraktisch fuer die einfache Aufgabe, aber funktioniert: Verkettete Liste), oder aber wie du das File zwei mal durchgehen kannst um einmal die Anzahl der Zeilen zu zaehlen, dann das Array mit Groesse = Anzahl der Zeilen anzulegen und danach von Zeile 1 bis N mit ner Schleife sauber die Zahlen ins Array schreibst.

Sorry, dass ich dir da keine konkreten Codeschnipsel liefern kann.
 
ohne zusätzliche bibliotheken kannst das in einer schleife mithilfe von std::ifstream machen. in google findest dutzende beispiele.

der vorteil ist, dass du nichts casten brauchst, das streamobject macht es automatisch abhängig von dem variablentypen in welches es hineinschreibt.
 
Zuletzt bearbeitet:
Also das einfachste wäre:

Code:
    float array[anzahl];
    char komma_dummy;
    for (int i = 0; i < anzahl; ++i) {
        cin >> array[i];  // liest den float-wert ein
        cin >> komma_dummy;  // liest das Komma ein
    }

Musst halt noch auf deinen File-Stream anpassen; oder du pipest die datei rein.
 
Zurück
Oben