string nach double (datei einlesen)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • string nach double (datei einlesen)

    hi
    ich habe folgendes problem. ich möchte eine datei zeile um zeile einlesen und jede zeile in ein feld eines double arrays speichern.
    das auslesen funktioniert auch, aber nur als string. ich schaff es einfach nicht den string in ein double zu quetschen.


    hier mal den source der das file ausliesst.

    Quellcode

    1. #include <iostream>
    2. #include <fstream>
    3. #include <string>
    4. using namespace std;
    5. int main () {
    6. string line;
    7. ifstream myfile ("test.txt");
    8. if (myfile.is_open())
    9. {
    10. while (! myfile.eof() )
    11. {
    12. getline (myfile,line);
    13. cout << line << endl;
    14. }
    15. myfile.close();
    16. }
    17. else cout << "Unable to open file";
    18. return 0;
    19. }
    Alles anzeigen


    schon mal danke
  • Hi,
    entweder benutzt du nen istringstream um die strings in doubles zu konvertieren,oder sofern deine Datei nur aus double besteht kannst du auch nen istream_iterator<double> nehmen.
    Also entweder

    Quellcode

    1. #include <iostream>
    2. #include <fstream>
    3. #include <string>
    4. #include <vector>
    5. #include <sstream>
    6. #include <iterator>
    7. using namespace std;
    8. int main () {
    9. string line;
    10. vector<double> db_vec;
    11. ifstream myfile ("test.txt");
    12. if (myfile)
    13. {
    14. istream_iterator<double>iit(myfile);
    15. copy(iit,istream_iterator<double>(),back_inserter(db_vec));
    16. myfile.close();
    17. copy(db_vec.begin(),db_vec.end(),ostream_iterator<double>(cout," "));
    18. cout<<endl;
    19. }
    20. else cout << "Unable to open file";
    21. return 0;
    22. }
    Alles anzeigen

    oder

    Quellcode

    1. #include <iostream>
    2. #include <fstream>
    3. #include <string>
    4. #include <vector>
    5. #include <sstream>
    6. #include <iterator>
    7. using namespace std;
    8. int main () {
    9. string line;
    10. vector<double> db_vec;
    11. ifstream myfile ("test.txt");
    12. if (myfile)
    13. {
    14. while (getline (myfile,line) )
    15. {
    16. istringstream isstr(line);
    17. double temp;
    18. isstr>>temp;
    19. db_vec.push_back(temp);
    20. }
    21. myfile.close();
    22. copy(db_vec.begin(),db_vec.end(),ostream_iterator<double>(cout," "));
    23. cout<<endl;
    24. }
    25. else cout << "Unable to open file";
    26. return 0;
    27. }
    Alles anzeigen


    Edit: atof ist C. Wenn schon C++ dann solltest du imho auch die sichereren C++ Mittel nutzen.

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • "d0nUt" schrieb:

    Immer wenn ich mir denke "Der void macht hier so gute Arbeit, nimm ihm doch wenigstens die einfachen Fragen ab", mach ich dir die Arbeit am Ende noch schwerer :?

    Ach was,wir tun doch alle unser bestes :wink:

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)