Чтение CSV-файла в вектор двойников - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь прочитать этот csv файл, назовем его "file.csv", и я пытаюсь поместить его в вектор double.

Это csv содержит такие числа, как:

755673.8431514322,
684085.6737614165,
76023.8121728658, 
...

Я попытался использовать stringstream, и он успешно ввел эти числа в вектор, но введенные числа не такие, как я хотел. Вместо этого введенные числа

7556373, 684085, 76023.8

Как прочитать целые цифры, не выбрасывая их?

Это мой код

vector<long double> mainVector;

int main() 
{
    ifstream data;
    data.open("file.csv");
    while (data.good()) 
    {
        string line;
        stringstream s;
        long double db;
        getline(data, line, ',');
        s << line;
        s >> db;
        mainVector.push_back(db);
    }
}

1 Ответ

0 голосов
/ 04 ноября 2018

Как читать целые цифры, не бросая их.

Как упомянуто в комментариях @ user4581301, я предполагаю, что вам не хватает std :: setprecision () при выводе.

Тем не менее, вам не нужно std::stringstream, чтобы сделать работу. Преобразуйте line (который является строкой непосредственно в double, используя std :: stold и поместите непосредственно в вектор следующим образом.

При этом использование std::stold позволит избежать неправильного ввода вектора, выдав исключение std :: invalid_argument , если преобразование из строка до double не удалась. (Кредиты @ user4581301)

#include <iostream>
#include <fstream>
#include <vector>  // std::vector
#include <string>  // std:: stold
#include <iomanip> // std::setprecision

int main()
{
    std::vector<long double> mainVector;
    std::ifstream  data("file.csv");
    if(data.is_open())
    {
        std::string line;
        while(std::getline(data, line, ','))
            mainVector.emplace_back(std::stold(line));
    }
    for(const auto ele: mainVector)
        std::cout << std::setprecision(16) << ele << std::endl;
                    // ^^^^^^^^^^^^^^^^^^^^ 
    return 0;
}
...