Как извлечь определенные числа из текстового файла, который также содержит буквы в C ++? - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь выяснить, как извлечь значения из текстового файла как тип double, чтобы их можно было использовать в вычислениях.

У меня есть текстовый файл, отформатированный как:

parameter1        parameter2         parameter3
50                0                  0.1

И я хочу извлечь только цифры.Это одна из моих попыток (я часами пытался понять, как это сделать).

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

using namespace std;

int main()
{
    const int MAX = 80;
    char buffer[MAX];
    string input;
    double j;

    ifstream param0;
    param0.open("param0.txt");
    char ch;
    while (param0)
    {
        param0.get(ch);
        cout << ch;
    }

    getline(param0, input);
    param0 >> j;
    while (param0)
    {
        cout << j << endl;
        getline(param0, input);
        param0 >> j;
    }


    return 0;
}

Ответы [ 3 ]

0 голосов
/ 16 октября 2018

Основная идея кода должна быть такой:

std::string line;
double p1, p2, p3;
std::string more;

while (std::getline(in, line)) {
    std::istringstream iss{line};
    if (iss >> p1 >> p2 >> p3 && !(iss >> more)) {
        std::printf("p1=%f, p2=%f, p3=%f\n", p1, p2, p3);
    } else {
        std::printf("invalid line: %s\n", line.c_str());
    }
}

В простых словах код говорит: строка допустима, если она содержит три числа и ничего более.

C ++ puristsскажет, что я не должен использовать printf в C ++, но мне нравится разделение между форматированием и фактическими данными.

0 голосов
/ 16 октября 2018

предложение:

  • лучше всего проверить, правильно ли вы открываете файл.
  • закройте файл, как только закончите с ним.

вы можете просто использовать оператор >>, если вы читаете все в одной строке.Не имеет значения, является ли его строка или удвоенная, если вы передаете правильную переменную хранения;

string param1;
string param2;
string param3;
double j,k,l;

ifstream file("test.txt",std::ios::in);
if (!file.is_open())
    std::cout << "failed to open " << endl;

while (file)
{
    file >> param1 >> param2 >>param3; // getting as strings
    cout << param1 <<", "<< param2<<", "<< param3<<endl; 
    file >> j >> k >> l;               //getting as doubles
    cout << j <<", " << k <<", "  << l<<endl;
}

file.close();
return 0;

output

параметр1, параметр2, параметр3
50,0, 0,1

0 голосов
/ 16 октября 2018

этот код

   char ch;
    while (param0)
    {
        param0.get(ch);
        cout << ch;
    }

работает до конца файла.Все читает после того, как ничего не вернется.Либо удалите этот цикл, либо перемотайте файл param0.rewind()

...