вот моя проблема. У меня есть некоторые двумерные данные с изменяющейся размерностью, которые я хочу прочитать в 2d-массиве двойников. Кроме того, в некоторых местах есть не число в файле, а «NaN», которые я хочу заменить на ноль. До сих пор мой код работал, но мне удалось прочитать только целые числа. Может быть, вы могли бы помочь мне прочитать это как двойники?
Вот что я получил до сих пор:
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;
}
здесь вы найдете несколько примеров данных:
«Именно, это то, что я думал о том, чтобы делать с линией 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
2D массив
Других решений пока нет …