C++ Bc. 23 cpp
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
void CSV_cteni(std::string csv, std::vector<std::string>& pole,
char oddelovac=',');
int main()
{
using namespace std;
istringstream data(
"1,101MA1G,3+3,8,\"z,zk\",*p,\"Matematika 1\",\"Doc. Kocandrlova\"\n"
"1,151TGE1,3+3,6,\"z,zk\",p,\"Technicka geodezie 1\",\"Ing. Ratiborsky\"\n"
"1,153OSYL,1+2,5,kz,p,\"Operacni system Linux\",\"Ing. Pytel\"\n");
vector<string> pole(8);
string radek;
while (getline(data, radek))
{
CSV_cteni(radek, pole);
for (int i=0; i<pole.size(); i++)
cout << i << " " << pole[i] << endl;
cout << endl;
}
}
void CSV_cteni(std::string csv, std::vector<std::string>& pole,
char oddelovac)
{
int n = 0; // index bezneho prvku ve vstupni retezci 'csv'
const int N = csv.size();
for (int i=0; i<pole.size(); i++)
{
bool uvozovky = csv[n] == '"';
if (uvozovky) n++;
std::string s;
for(; n < N; n++)
{
if (csv[n] == '"')
{
// dvojice uvozovek oznacuje jeden znak '"'
if (n+1 < N && csv[n+1] == '"')
{
// ulozim znak '"' a prejdu na dalsi symbol
s += '"';
n++;
continue;
}
// koncove uvozovky
uvozovky = false;
continue;
}
if (!uvozovky && csv[n] == oddelovac)
{
n++;
break;
}
s += csv[n];
}
pole[i] = s;
}
}
0 1 1 101MA1G 2 3+3 3 8 4 z,zk 5 *p 6 Matematika 1 7 Doc. Kocandrlova 0 1 1 151TGE1 2 3+3 3 6 4 z,zk 5 p 6 Technicka geodezie 1 7 Ing. Ratiborsky 0 1 1 153OSYL 2 1+2 3 5 4 kz 5 p 6 Operacni system Linux 7 Ing. Pytel
[ Zpět ]