Wt examples  4.10.4
Namespaces | Functions
CsvUtil.h File Reference
#include <iostream>

Go to the source code of this file.

Namespaces

 Wt
 

Functions

void readFromCsv (std::istream &f, std::shared_ptr< WAbstractItemModel > model, int numRows=-1, bool firstLineIsHeaders=true)
 
std::shared_ptr< WStandardItemModelcsvToModel (const std::string &csvFile, bool firstLineIsHeader=true)
 

Function Documentation

◆ csvToModel()

std::shared_ptr<WStandardItemModel> csvToModel ( const std::string &  csvFile,
bool  firstLineIsHeader = true 
)

Definition at line 40 of file CsvUtil.C.

42 {
43  std::ifstream f(csvFile.c_str());
44 
45  if (f) {
46  std::shared_ptr<WStandardItemModel> result = std::make_shared<WStandardItemModel>(0, 0);
47  result->setItemPrototype(std::make_unique<NumericItem>());
48  readFromCsv(f, result, -1, firstLineIsHeaders);
49  return result;
50  } else
51  return nullptr;
52 }
void readFromCsv(std::istream &f, std::shared_ptr< WAbstractItemModel > model, int numRows, bool firstLineIsHeaders)
Definition: CsvUtil.C:54

◆ readFromCsv()

void readFromCsv ( std::istream &  f,
std::shared_ptr< WAbstractItemModel model,
int  numRows = -1,
bool  firstLineIsHeaders = true 
)

Definition at line 54 of file CsvUtil.C.

56 {
57  int csvRow = 0;
58 
59  while (f) {
60  std::string line;
61  getline(f, line);
62 
63  if (f) {
64  typedef boost::tokenizer<boost::escaped_list_separator<char> >
65  CsvTokenizer;
66  CsvTokenizer tok(line);
67 
68  int col = 0;
69  for (CsvTokenizer::iterator i = tok.begin();
70  i != tok.end(); ++i, ++col) {
71 
72  if (col >= model->columnCount())
73  model->insertColumns(model->columnCount(),
74  col + 1 - model->columnCount());
75 
76  if (firstLineIsHeaders && csvRow == 0)
77  model->setHeaderData(col, cpp17::any{WString{*i}});
78  else {
79  int dataRow = firstLineIsHeaders ? csvRow - 1 : csvRow;
80 
81  if (numRows != -1 && dataRow >= numRows)
82  return;
83 
84  if (dataRow >= model->rowCount())
85  model->insertRows(model->rowCount(),
86  dataRow + 1 - model->rowCount());
87 
88  cpp17::any data{WString{*i}};
89  model->setData(dataRow, col, data);
90  }
91  }
92  }
93 
94  ++csvRow;
95  }
96 }