0

次のような.txtファイルがあります。

(0.781860352, -11.6927013, 7.20992613)  
(0.364501476, -9.41256046, 6.87873077)  
(0.394773483, -7.85253429, 6.90275288)

各行から各doubleに個別にアクセスするためのコードが必要です。私はこの問題を解決するのに苦労しています。何か案は?

ありがとう!

アップデート:

したがって、私が言ったように、Kerrek SBの提案を使用して各行から各doubleにアクセスし、次にこれらの値をベクトルのコンポーネントに格納し、次に各コンポーネントにアクセスして操作を実行します(たとえば、それらを乗算します)。結果を配列に格納します。最後に、配列の内容を追加します。とにかく、ここにコードがあります:

int main() {

    //=============================
    //Initial Declarations
    //=============================

Vector3 r(0,0,0);
int num = 0 , i;
string line;
char c, d1, d2, d3, d4;
double v1, v2, v3 , b[num];

   //=============================
   //Counting Lines in File
   //=============================

ifstream is;
is.open ("data.txt");
while (is.good())
{
c = is.get();
if (c=='\n')num++;
}
is.close();
cout<<"Number of lines in file is "<<num<<endl;

   //=============================
   //Getting Data
   //=============================

ifstream infile("data.txt");

for (line ,i=0 ; getline(infile, line), i<=num-1;i++ )
{

    istringstream iss(line);

    if (!((iss >> d1 >> v1 >> d2 >> v2 >> d3 >> v3 >> d4 >> ws) &&
          iss.get() == EOF                                           &&
          d1 == '(' && d2 == ',' && d3 == ',' && d4 == ')'))
    {

    }

    // Placing data in vector
    r[0] = v1;
    r[1] = v2;
    r[2] = v3;

    //Placing data from vector into array
    b[i] = r[0]*r[1]*r[2];


}

  // Adding contents of array
  valarray <double> bfinal (b,num);
  double b_final = bfinal.sum();


cout<< b[0] << "," << b[1] << ", " << b_final << endl;
return 0;

}

コードは機能しますが(実際には、配列の内容が正しく追加されていません)、少し粗雑に見えます。簡素化や簡潔化が可能だと思います。何か案は?

4

1 に答える 1

9

標準のC++イディオム:

#include <string>
#include <fstream>
#include <sstream>
#include <iostream>

std::ifstream infile("data.txt");

for (std::string line; std::getline(infile, line); )
{
    char d1, d2, d3, d4;
    double v1, v2, v3;
    std::istringstream iss(line);

    if (!((iss >> d1 >> v1 >> d2 >> v2 >> d3 >> v3 >> d4 >> std::ws) &&
          iss.get() == EOF                                           &&
          d1 == '(' && d2 == ',' && d3 == ',' && d4 == ')'))
    {
        // error parsing "line"
        std::cerr << "Sorry, could not parse '" << line << "'. Skipping.\n";
        continue;
    }

    std::cout << "You said: " << v1 << ", " << v2 << ", and " << v3 << "\n";
}
于 2013-01-15T22:36:28.733 に答える