Статьи по c++

Чтение CSV с помощью C++

В этой статье о Python вы узнаете как работать с дробями.

В этой статье по программированию на C++ (также известном как CPP) я покажу вам, как прочитать и обработать файл CSV (значения, разделенные запятыми). Без использования внешних библиотек.

Для этого нам нужно прочитать файл построчно, а затем разбить каждую строку в соответствии с разделителем. Все это мы будем делать с помощью C++ и встроенных функций.

Алгоритм

Давайте сначала проанализируем, что нам нужно сделать. Мы будем читать CSV с помощью C++, поэтому сначала нам нужно открыть файл и прочитать его построчно, поскольку в каждой строке содержится новый набор значений.

В данном случае мы пропустим первую строку, так как она обычно содержит заголовок, но, прочитав ее, мы продолжим читать остальные до конца файла в цикле.

В этом цикле мы будем разбивать строку (линию) в соответствии с разделителем, которым в данном случае является запятая. После чего мы можем извлечь каждое значение в отдельную переменную и сделать с ним все, что угодно, например, распечатать или записать в другой файл.

CSV файл

Для этого примера я буду использовать CSV, который выглядит следующим образом:

Как видите, у нас есть 4 строки и в каждой из них 7 столбцов.

Важно, чтобы CSV имел определенную и последовательную структуру.

Примечание: мы собираемся прочитать файл и рассматривать все данные как строку. Затем вы можете преобразовать их в double, int и так далее.

Чтение CSV с помощью C++

Теперь давайте посмотрим на код. Сначала мы открываем файл и читаем его:

ifstream work_file(filename); string line; char delimiter = ','; //Читаем первую строку, чтобы отбросить ее, так как она является заголовком getline(work_file, line); // Прочитали все строчки while (getline(work_file, line)) { // Здесь магия... } work_file.close();
Code language: JavaScript (javascript)

Внутри цикла у нас появится строка. Пришло время разделить ее для хранения ее значений. Как сказано выше, разделителем является запятая. Далее мы делаем следующее:

stringstream stream(line); // Преобразование строки в поток string idProduct, artikul, nameProduct, priceZak, priceProd, inShop, inStock; // Извлечение всех значений в этой строке getline(stream, idProduct, delimiter); getline(stream, artikul, delimiter); getline(stream, nameProduct, delimiter); getline(stream, priceZak, delimiter); getline(stream, priceProd, delimiter); getline(stream, inShop, delimiter); getline(stream, inStock, delimiter); cout << "==================" << endl; cout << "id продукта: " << idProduct << endl; cout << "Артикул: " << artikul << endl; cout << "Название: " << nameProduct << endl; cout << "Цена закупки: " << priceZak << endl; cout << "Цена продажи: " << priceProd<< endl; cout << "Кол-во в магазине: " << inShop << endl; cout << "Кол-во на складе: " << inStock << endl;
Code language: JavaScript (javascript)

Как вы можете видеть, извлечение значений происходит со строки 4 по строку 10, мы читаем из строчки и помещаем каждое значение внутрь каждой переменной. Помните, что они должны располагаться в том же порядке, что и столбцы в CSV-файле.

Полный код выглядит следующим образом:

#include <iostream> #include <sstream> #include <fstream> #define filename "Products.csv" using namespace std; int main() { ifstream work_file(filename); string line; char delimiter = ','; //Читаем первую строку, чтобы отбросить ее, так как она является заголовком getline(work_file, line); // Прочитали все строчки while (getline(work_file, line)) { stringstream stream(line); // Преобразование строки в поток string idProduct, artikul, nameProduct, priceZak, priceProd, inShop, inStock; // Извлечение всех значений в этой строке getline(stream, idProduct, delimiter); getline(stream, artikul, delimiter); getline(stream, nameProduct, delimiter); getline(stream, priceZak, delimiter); getline(stream, priceProd, delimiter); getline(stream, inShop, delimiter); getline(stream, inStock, delimiter); cout << "==================" << endl; cout << "id продукта: " << idProduct << endl; cout << "Артикул: " << artikul << endl; cout << "Название: " << nameProduct << endl; cout << "Цена закупки: " << priceZak << endl; cout << "Цена продажи: " << priceProd<< endl; cout << "Кол-во в магазине: " << inShop << endl; cout << "Кол-во на складе: " << inStock << endl; } work_file.close(); }
Code language: PHP (php)

Вот как использовать C++ для чтения CSV.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *