You are not logged in.

  • Login

1

Sunday, November 26th 2006, 6:00pm

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.

C Quellcode

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


schon mal danke

2

Sunday, November 26th 2006, 6:20pm

den Code, in dem du die Zeile in ein String Array packst, hast du leider nicht gepostet.
Ansonsten einfach atof

C Quellcode

1
double x = atof("15");

3

Sunday, November 26th 2006, 6:25pm

danke für die schnelle antwort.
bei atof kommt leider folgende fehlermeldung.

'atof': Konvertierung des Parameters 1 von 'std::string' in 'const char *' nicht möglich

4

Sunday, November 26th 2006, 6:26pm

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

C Quellcode

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

oder

C Quellcode

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


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

Gruß void

5

Sunday, November 26th 2006, 6:37pm

Quoted from ""void""

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

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 :?

6

Sunday, November 26th 2006, 6:50pm

danke leute für die super schnellen antworten.

noch n schönen abend euch

7

Sunday, November 26th 2006, 6:56pm

Quoted from ""d0nUt""

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

Similar threads

Social bookmarks