Извлечь двойной из файла со словами - PullRequest
0 голосов
/ 02 февраля 2012

Я знаю, что это может быть легкой задачей, и, прочитав ответ на другие вопросы, я обнаружил, что этот код должен помочь

#include<fstream>
#include<iostream>
#include<iomanip>
#include<string>

using namespace std;


int main() {
  const char* filename = "integral_wh.out";
  std::ifstream inFile(filename);

  // Make sure the file stream is good
  if(!inFile) {
    cout << endl << "Failed to open file " << filename;
    return 1;
  }

double n;
string word;

while(inFile >> word >> n){

    cout << word;
    cout << n;
  }

  return 0;
}

Текстовый файл, из которого я читаю,

Integral, Sample: Z/W + jets - ntp_Alpgen_Ztt.root      3.33645 +-    0.31588
Integral, Sample: Z/W + jets1 - ntp_Alpgen_Zmm.root      2.52853 +-    0.34243
Integral, Sample: Z/W + jets2 - ntp_Alpgen_Zee.root      7.97980 +-    0.70667
Integral, Sample: Z/W + jets3 - ntp_Wj_0.root      0.00000 +-    0.00000
Integral, Sample: Z/W + jets4 - ntp_Wj_1.root      0.67329 +-    0.48556
Integral, Sample: Z/W + jets5 - ntp_Wj_2.root      1.44122 +-    0.89388

когда я запускаю программу, она не может прочитать дабл, она ничего не делает cout. Я пробовал также с

   while(inFile >> n){

        cout << n;
      }

и ничего не выводит. То, что я хотел бы получить, это отдельные числа, чтобы использовать их для операций, возможно, сохраняя их в парах, как

pair<double,double> alpgen = make_pair(3.33645,0.31588);

или что-то в этом роде.

Ответы [ 2 ]

0 голосов
/ 02 февраля 2012

Как насчет чтения всей строки, разбиения на вектор в пробеле и получения последнего и третьего до последнего элемента вектора?

0 голосов
/ 02 февраля 2012

Для стандартного потока поток в операторе (operator>>) использует пробел для разграничения токенов - в этом случае ваша операция чтения не будет выполнена, поскольку она будет читать одну строку (Integral,), затем следующий токен Sample:) попытается разобраться в двойник - что не получится.

Вам нужно использовать все строковые токены, затем двойные и т. Д.

...