How to write data in a CSV file in C++

DWQA QuestionsCategory: C++How to write data in a CSV file in C++
Editor Staff asked 2 months ago

How to write data in a CSV file in C++

1 Answers
Editor Staff answered 2 months ago

Creating a CSVWriter Class to store Data to CSV File

Let’s create a class CSVWriter that provides API to store data to CSV File

/*

* A class to create and write data in a csv file.

*/

class CSVWriter

{

std::string fileName;

std::string delimeter;

int linesCount;

public:

CSVWriter(std::string filename, std::string delm = ”,”) :

fileName(filename), delimeter(delm), linesCount(0)

{}

/*

* Member function to store a range as comma seperated value

*/

template<typename T>

void addDatainRow(T first, T last);

};

Its constructor accepts the filename as an argument. It also provide a template member function that accepts a range as an argument and store all of them in last row, separated by comma i.e.

/*

* This Function accepts a range and appends all the elements in the range

* to the last row, seperated by delimeter (Default is comma)

*/

template<typename T>

void CSVWriter::addDatainRow(T first, T last)

{

std::fstream file;

// Open the file in truncate mode if first line else in Append Mode

file.open(fileName, std::ios::out | (linesCount ? std::ios::app : std::ios::trunc));

// Iterate over the range and add each lement to file seperated by delimeter.

for (; first != last; )

{

file << *first;

if (++first != last)

file << delimeter;

}

file << ”\n”;

linesCount++;

// Close the file

file.close();

}

As this function expects a range, we can pass iterator of any container like vector/set or an array.

Let’s create an object of CSVWriter class i.e.

// Creating an object of CSVWriter

CSVWriter writer(”example.csv”);

 

Write a Vector of strings to CSV file using CSVWriter class

 

// Creating a vector of strings

std::vector<std::string> dataList_1 = { ”20″, ”hi”, ”99″ };

// Adding vector to CSV File

writer.addDatainRow(dataList_1.begin(), dataList_1.end());

 

Write a Set to CSV file using CSVWriter class

 

// Create a set of integers

std::set<int> dataList_2 = { 3, 4, 5};

// Adding Set to CSV File

writer.addDatainRow(dataList_2.begin(), dataList_2.end());

 

Write an Array to CSV file using CSVWriter class

 

// An array of int

int arr [] = {3,4,1};

// Wrote an elements in array to csv file.

writer.addDatainRow(arr , arr + sizeof(arr) / sizeof(int));

Check complete example as follows,

#include <iostream>

#include <fstream>

#include <vector>

#include <set>

#include <iterator>

#include <string>

#include <algorithm>

/*

* A class to create and write data in a csv file.

*/

class CSVWriter

{

std::string fileName;

std::string delimeter;

int linesCount;

public:

CSVWriter(std::string filename, std::string delm = ”,”) :

fileName(filename), delimeter(delm), linesCount(0)

{}

/*

* Member function to store a range as comma seperated value

*/

template<typename T>

void addDatainRow(T first, T last);

};

/*

* This Function accepts a range and appends all the elements in the range

* to the last row, seperated by delimeter (Default is comma)

*/

template<typename T>

void CSVWriter::addDatainRow(T first, T last)

{

std::fstream file;

// Open the file in truncate mode if first line else in Append Mode

file.open(fileName, std::ios::out | (linesCount ? std::ios::app : std::ios::trunc));

// Iterate over the range and add each lement to file seperated by delimeter.

for (; first != last; )

{

file << *first;

if (++first != last)

file << delimeter;

}

file << ”\n”;

linesCount++;

// Close the file

file.close();

}

int main()

{

// Creating an object of CSVWriter

CSVWriter writer(”example.csv”);

std::vector<std::string> dataList_1 = { ”20″, ”hi”, ”99″ };

// Adding vector to CSV File

writer.addDatainRow(dataList_1.begin(), dataList_1.end());

// Create a set of integers

std::set<int> dataList_2 = { 3, 4, 5};

// Adding Set to CSV File

writer.addDatainRow(dataList_2.begin(), dataList_2.end());

std::string str = ”abc”;

// Adding characters in a string in csv file.

writer.addDatainRow(str.begin(), str.end());

// An array of int

int arr [] = {3,4,1};

// Wrote an elements in array to csv file.

writer.addDatainRow(arr , arr + sizeof(arr) / sizeof(int));

return 0;

}

It generates a file example.csv with following contents,

20,hi,99

3,4,5

a,b,c

3,4,1