2013-09-25 82 views
1

這是我的問題。我有一些維度變化的二維數據,我想讀入一個二維數組。此外,文件中有一些不是數字,而是「NaN」,我想用零代替。我讓我的代碼工作到目前爲止,但我只設法讀取整數。也許你可以幫我把它看作雙打?用C++將數據讀入雙數組

這是我走到這一步:

void READER(char filepath [], int target [129][128]) 
{ 

    //----------------------------  header double & int 

    int rowA = 0; 
    int colA = 0; 

    std::string line; 
    std::string x; 


    std::cout << "reading file: " << filepath << "\n"; 
    std::cout << std::endl; 

    std::ifstream fileIN; 
    fileIN.open(filepath); 

    if (!fileIN.good()) 
    std::cerr << "READING ERROR IN FILE: " << filepath << std::endl; 



    while (fileIN.good()) 
    { 
     while (getline(fileIN, line)) 
     { 
      std::istringstream streamA(line); 
      colA = 0; 
      while (streamA >> x) 
      { 

       boost::algorithm::replace_all(x, "NaN", "0"); 

       boost::algorithm::replace_all(x, ",", "");   //. rein 


       // std::cout << string_to_int(x) << std::endl; 

       target [rowA][colA] = string_to_int(x); 
       colA++; 

      } 
      rowA++; 
      if(rowA%5 ==0) 
      { 
       std::cout << "*"; 
      } 
     } 
    } 



    std::cout << " done." <<std::endl; 


} 

此寫入文件到「目標」。該函數的字符串INT看起來如下:

int string_to_int (const std::string& s) 
{ 
    std::istringstream i(s); 
    int x; 
    if(!(i >> x)) 
     return 0; 
    return x; 

} 

在這裏你能找到一些示例數據: enter image description here

+0

能告訴你從文件中的一些樣本數據? – P0W

+0

您不能通過讀取「int」來讀取「double」。它們是不同的數據類型,具有非常不同的大小和位模式。 –

+0

你想如何讀取那些雙倍的數據,比如0.153,0.153? – P0W

回答

1

「確切地說,我是這麼想過通過更換線boost::algorithm::replace_all(x, ",", "");做,通過

使用下面的函數轉換成任何類型的,說double: -

template <typename T> 
    T StringToNumber (const std::string &Text) 
    { 
    std::istringstream ss(Text); 
    T result; 
    return ss >> result ? result : 0; 
    } 

呼叫使用:

boost::algorithm::replace_all(x, ",", ".");   // Change , to . 
std::cout << StringToNumber<double>(x) << std::endl; 

或者

,你可以簡單地使用boost::lexical_cast

std::cout<<boost::lexical_cast<double>(x)<<std::endl;

確保你有一個double二維數組

+0

非常感謝,解決了我的問題!順便說一句,我使用boost :: lexical_cast – user2003965