Возьмите значения непосредственно из файла CSV и передайте в качестве входных данных - PullRequest
0 голосов
/ 01 марта 2020

Ниже приводится основная часть кода, который принимает тестовые значения (x и y) и дает некоторые выходные данные

int main(void) {
    const std::vector<Tile> tiles{ Tile(0),Tile(1),Tile(2),Tile(3) };

    // Test values
    const std::vector<std::pair<double, double>> 

    test_values = {

    { 3542, 9966     },
    { 354, 11261    },
    { 354, 6932     },
    { 2354, 2432    },
    { 4354, 10002   },
    { 7354, 4932    },
    {6739, 8600     }

    };
    std::cout << "x\t"  << "y"  "\n";

    // Check cell number
    for (const Tile& tile : tiles)
    {
        for (const auto [x, y] : test_values)
        {
            if (const auto [isInTile, cellNumber] = tile.getCellNumber(x, y); isInTile) 
            {
                std::cout << x << "|\t|" << y << "\t|" << cellNumber << "\n";
            }
        }
    }

    return 0;
}

Выход:

enter image description here

я хочу изменить код, чтобы тестовые значения (x и y) можно было взять непосредственно из файла csv, а не вводить их все здесь.

Что у меня есть пробовал:

//Parses through csv file line by line and returns the data in vector of vector of strings.

std::vector<std::vector<std::string> > CSVReader::getData()
{
    std::ifstream file(fileName);

    std::vector<std::vector<std::string> > dataList;

    std::string line = "";
    // Iterate through each line and split the content using delimeter
    while (getline(file, line))
    {
        std::vector<std::string> vec;
        boost::algorithm::split(vec, line, boost::is_any_of(delimeter));
        dataList.push_back(vec);
    }
    // Close the File
    file.close();

    return dataList;
}


int main(void) {
    const std::vector<Tile> tiles{ Tile(0),Tile(1),Tile(2),Tile(3) };

    // Test values
    const std::vector<std::pair<double, double>>

        test_values = {




    };

    // Creating an object of CSVWriter
    CSVReader reader("test.csv");

    // Get the data from CSV File
    std::vector<std::vector<std::string> > dataList = reader.getData();

    for (std::vector<std::string> vec : dataList)
    {
        for (std::string data : vec)
        {
            std::pair<std::string, std::string> p = ;

            std::cout << data << " ";
        }
        std::cout << std::endl;
    }


    std::cout << "x\t"  << "y"  "\n";

    // Check cell number
    for (const Tile& tile : tiles)
    {
        for (const auto [x, y] : test_values)
        {
            if (const auto [isInTile, cellNumber] = tile.getCellNumber(x, y); isInTile)
            {
                std::cout << x << "|\t|" << y << "\t|" << cellNumber << "\n";
            }

        }
    }


    return 0;
}

Я не мог передать прочитанные значения из файла CSV в тестовые значения

1 Ответ

1 голос
/ 01 марта 2020

Вы идете далеко на шаг, пытаясь преобразовать вектор dataList.

Перебирайте вектор dataList, как вы делаете сейчас, но затем вместо внутреннего l oop вы просто получите vec[0] и vec[1] и , чтобы преобразовать строки в double, чтобы вы вставили в вектор test_values.

Возможно, что-то вроде

for (auto const& vec : dataList)
{
    test_values.emplace_back(std::stod(vec[0]), std::stod(vec[1]));
}
...