1

ここに私の問題があります。次元が変化する 2 次元データがあり、それを double の 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;

}

ここにいくつかのサンプルデータがあります: ここに画像の説明を入力

4

1 に答える 1

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;

double2D配列があることを確認してください

于 2013-09-25T16:32:47.577 に答える