#include <iostream>
#include <strstream>
#include <vector>
#include "dataio.h"
#include <fstream>
class stock
{
public:
string product;
unsigned unit;
double price;
};
class stockio : public dataio {
vector <stock> *data;
bool status;
public:
void startinblock(unsigned i)
{
#ifdef _DEBUG2_
cout << "startinblock: i = " << i << endl;
#endif
if(!data)
return;
if(i==0)
status = true;
clear();
data->push_back(stock());
add("product", &(*data)[i].product);
add("unit", &(*data)[i].unit);
add("price", &(*data)[i].price);
}
bool startoutblock(unsigned i)
{
#ifdef _DEBUG2_
cout << "startoutblock: i = " << i << endl;
#endif
if(!data || (i >= data->size()) )
return false;
clear();
add("product", &(*data)[i].product );
add("unit", &(*data)[i].unit);
add("price", &(*data)[i].price);
ostrstream ostr;
ostr << i << "-th item" << ends;
addcomment(ostr.str());
return true;
}
void validate(unsigned i)
{
#ifdef _DEBUG2_
cout << "validate: i = " << i << endl;
putline(cout, this->referednames());
#endif
if(!data || (i >= data->size()) ) {
cout << "error: stockio::validate: dataio internal problem\n";
return;
}
if(!refered("product")) {
cout << "error: stockio::validate: " << i << "-th the product name missing...\n";
status = false;
} else if(!setted("product") || (*data)[i].product.empty()) {
cout << "error: stockio::validate: " << i << "-th the product name is invalid...\n";
status = false;
}
if(!refered("unit")) {
(*data)[i].unit = 0;
} else if(!setted("unit")) {
cout << "error: stockio::validate: " << i << "-th the unit value is invalid...\n";
status = false;
}
if(!refered("price")) {
cout << "warn: stockio: " << i << "-th price missing...\n";
(*data)[i].price = 0;
status = false;
} else if(!setted("price")) {
cout << "error: stockio: " << i << "-th the price is invalid...\n";
status = false;
}
}
stockio():dataio() {
data=0; status = false;}
stockio(vector <stock> &stocklist) : dataio()
{data = &stocklist; }
void set(vector <stock> &stocklist)
{data = &stocklist;}
};
int main()
{
vector <stock> stocklist;
stockio stockbase(stocklist);
dataio io;
ifstream f("sampreclist.txt");
if(!f) {
cout << "main:error: can't open input files"<< endl;
return 1;
}
io.add("item", (dataio *)&stockbase);
io.ignorecase(true);
io.decimal(',');
#ifdef _DEBUG_
cout << "main: readding data" << endl;
#endif
f >> io;
cout << "main: data loaded...\n";
#ifdef _DEBUG_
cout << "main: writting data" << endl;
#endif
cout << "loaded data...\n";
cout << "stocklist.size() = " << stocklist.size() << endl;
io.decimal('.');
cout << io;
cout << "now, stock as column oriented table\n";
stockbase.clearcomment();
stockbase.addcomment("table of product stock");
stockbase.istable = true;
stockbase.columnoriented = true;
stockbase.decimal('.');
cout << stockbase;
}