2012-10-15 1 views
2

나는 수천 개의 float 값으로 구성된 데이터 파일을 가지고 있으며,이를 2D 벡터 배열로 읽어 들이고 그 벡터를 다른 루틴으로 전달하기를 원한다. 파일. 이 코드를 실행하면 출력됩니다.C++에서 플로트의 텍스트 파일을 2D 벡터로 읽기

[0] [0] = 0 [0] [1] 등

데이터 파일이 원하는 값이 포함 = 0;

0.000579, 27.560021 등

파일을 열 수 없습니다처럼 내게 보이는
int rows = 1000; 
int cols = 2; 
vector<vector<float>> dataVec(rows,vector<float>(cols)); 
ifstream in; 
in.open("Data.txt"); 

for(int i = 0; i < rows; i++){ 
    for(int j = 0; j < 2; j++){ 
     in >> dataVec[i][j];  
     cout << "[ " << i << "][ " << j << "] = " << dataVec[i][j] << endl; 
    } 
} 
in.close(); 
+2

파일이 실제로 쉼표가 포함되어 있습니까, 아니면 순전히 공백으로 구분된다? 쉼표가 포함되어 있으면 해당 쉼표도 추출해야합니다. – ildjarn

+0

그 이유는 값이'cout'의 기본 정밀도에 비해 너무 작을 수 있기 때문입니다. ''의 include를 추가하고, 다음과 같이 출력 라인을 변경하십시오 :''<< "<< i <<"] [ "<< j <<"] = "<< setprecision (10) << dataVec [i] [j] << endl; – dasblinkenlight

+0

공백으로 구분 된 데이터 파일에는 쉼표가 없습니다. setprecision은 작동하지 않았지만 좋은 생각이었습니다. – bunduru

답변

6

. 당신은 성공을 시험하지 않았기 때문에, 그것은 상관없이 쟁기질을 할 것입니다. 모든 값은 0으로 초기화되고 모든 읽기가 실패하기 때문에 그대로 유지됩니다. 이것은 추측이지만, 나는 그것에 돈을 넣을 것이라고 인정한다. =)

+0

네, 맞습니다. , 나는 그것이 왜 열려 있지 않은지 모르지만. – bunduru

+0

매우 가능한 이미지입니다. 특히 "Data.txt"의 상대 경로가 있다고 생각하고 열린 파일 기능이 항상 그렇게 작동한다고 가정하면 더욱 그렇습니다. 또한 일반적으로 디버그 모드에서 초기화되지 않은 값은 대부분 IDE에서 0으로 초기화됩니다. – ksming

+0

@OP : 상대 경로 대신 Data.txt의 전체 경로를 입력하고 작동하는지 확인하십시오. 예 : "C : /Users/User/Documents/Data.txt"예 : – ksming

-1
#include <vector> 
#include <fstream> 
#include <iostream> 

using namespace std; 

void write(int m, int n) 
{ 
    ofstream ofs("data.txt"); 
    if (!ofs) { 
     cerr << "write error" << endl; 
     return; 
    } 

    for (int i = 0; i < m; i++) 
     for (int j = 0; j < n; j++) 
      ofs << i+j << " "; 
} 

void read(int m, int n) 
{ 
    ifstream ifs("data.txt"); 
    if (!ifs) { 
     cerr << "read error" << endl; 
     return; 
    } 

    vector<float> v; 
    float a; 
    while (ifs >> a) v.push_back(a); 

    for (int i = 0; i < m; i++) 
     for (int j = 0; j < n; j++) 
      cout << "[" << i << "][" << j << "] = " 
       << v[i*n+j] << ", "; 
} 

int main() 
{ 
    write(2,2); 
    read(2,2); 

    return 0; 
} 
1

이 솔루션을 시도, 그것은 당신의 사양에 따라 작동합니다 : 당신이 보여처럼

#include <fstream> 
#include <iostream> 
#include <sstream> 
#include <string> 
#include <vector> 
using namespace std; 

int main(void) 
{ 

    ifstream infile; 
    char cNum[10] ; 
    int rows = 1; 
    int cols = 2; 
    vector<vector<float > > dataVec(rows,vector<float>(cols)); 

    infile.open ("test2.txt", ifstream::in); 
    if (infile.is_open()) 
    { 
      while (infile.good()) 
      { 

       for(int i = 0; i < rows; i++) 
       { 
        for(int j = 0; j < 2; j++) 
        { 

         infile.getline(cNum, 256, ','); 

         dataVec[i][j]= atof(cNum) ; 

         cout <<dataVec[i][j]<<" , "; 

        } 
       } 



      } 
      infile.close(); 
    } 
    else 
    { 
      cout << "Error opening file"; 
    } 

    cout<<" \nPress any key to continue\n"; 
    cin.ignore(); 
    cin.get(); 


    return 0; 
}