Как загрузить данные Excel в массив в C ++ - PullRequest
0 голосов
/ 13 мая 2019

В рамках домашней работы меня просят загрузить данные из файла Excel

Кто-нибудь знает, как это сделать?

Я не могу найти ничего подобного в Интернете ..

(файл Excel находится в этой форме:

name1; ID1 
name2; ID2
name3; ID3

)

1 Ответ

1 голос
/ 13 мая 2019

Вы, кажется, не сделали никаких усилий.Просто посещение курса C ++ «Как читать файл в C ++» даст вам ответ.

И я не могу поверить, что вы ничего не нашли в Интернете, кроме случаев, когда вы ничего не искали.

Ниже вы увидите пример того, как читать файл в указанном вами формате (думаю, .csv).Но он не обрабатывает случаи, когда ваш файл данных поврежден.И ... я не буду объяснять код, я думаю, что вы должны приложить все усилия, чтобы самостоятельно найти в Интернете курс C ++ или документацию по C ++, которая объяснит вам инструкции, которые я использовал, чтобы полностью понять, что делает код.

#include <fstream>
#include <iostream>
#include <vector>

std::vector<std::string> split(const std::string & s, char c);

int main()
{
    std::string file_path("data.csv"); // I assumed you have that kind of file
    std::ifstream in_s(file_path);

    std::vector <std::pair<std::string, std::string>> content;

    if(in_s)
    {
        std::string line;
        while(getline(in_s, line))
        {
            std::vector<std::string> splitted(split(line, ';'));
            while(splitted[1][0] == ' ')
                splitted[1].erase(0, 1); // remove the white(s) space(s)

            content.push_back(std::make_pair(splitted[0], splitted[1]));
        }

        in_s.close();
    }
    else
        std::cout << "Could not open: " + file_path << std::endl;

    for(std::pair<std::string, std::string> line : content)
        std::cout << line.first << "; " << line.second << std::endl;

    return 0;
}

std::vector<std::string> split(const std::string & s, char c)
{
    std::vector<std::string> splitted;

    std::string word;
    for(char ch : s)
    {
        if((ch == c) && (!word.empty()))
        {
            splitted.push_back(word);
            word.clear();
        }
        else
            word += ch;
    }
    if(!word.empty())
        splitted.push_back(word);

    return splitted;
}

Удачи!

...