Чтение в файле CSV для целых чисел - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть тестовый файл, настроенный здесь, пытающийся прочитать в CSV-файле

ifstream file;

    file.open("New Microsoft Excel Worksheet.csv");
    string temp;
    string arr[15];
    int size = 0;
    int index = 0;

    while (getline(file, temp, ','))
    {
        if (!temp.empty())
        {
            arr[index] = temp;
            std::cout << arr[index];
            size++;
            index++;
        }
    }

Вывод

34568
29774
18421

он успешно захватывает каждый индекс и даже выстраивает их в виде row (я предполагаю, что он также захватывает \ n?)

однако мне нужно, чтобы они были целыми числами, я бы сделал это в том же l oop с функцией stoi (), но мне нужно размер массива должен быть динамическим c (я не хочу использовать векторы здесь, потому что это вписывается в другую часть кода, которая нуждается в массиве)

Вот как я превращаю их в целые числа и помещаю они в новом массиве

    int *intArr = new int[size];

        for (index = 0; index < size; index++)
        {
                intArr[index] = stoi(arr[index]);
                std::cout << intArr[index];

        }

и вот вывод для этого

3456897748421

Кажется, что пропускает каждое число после переключения на следующую строку в CSV Если я структурирую его правильно, вот что происходит

34568
 9774 
 8421

Я предполагаю, что это как-то связано с CSV-файлами, дающими \n в конце строки в файле Excel. Как я могу это исправить? Мне нужно, чтобы все значения были целыми числами, спасибо!

1 Ответ

1 голос
/ 26 апреля 2020

Я понял, вам нужно два цикла while, как это:

while (getline(file, temp))
    {
        istringstream ss(temp);

        while (getline(ss, data, ','))
        {
             arr[index] = data;

            std::cout << arr[index];
            size++;
            index++;
        }
    }

Я не совсем уверен, почему вам нужно два, потому что это кажется излишним, но получая строку ТОГДА, помещая это в потоке строк, кажется, избавиться от этой новой строки

Спасибо @ br c -dd за помощь!

...