В этой статье о 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.