C++ Bc. 22 cpp
#include <iostream>
#include <sstream>
#include <vector>
#include <cctype>
typedef std::vector<std::string> Pole;
std::string CSV_zapis(const Pole& pole, char oddelovac=',');
int main()
{
using namespace std;
// vstup: pocet poli; dale nasleduji jednotliva pole, kazde zapsane
// na samostatnem radku
istringstream
data("8\n" // 8 je pocet poli
"1\n101MA1G\n3+3\n8\nz,zk\n*p\nMatematika 1\nDoc. Kocandrlova\n"
"1\n151TGE1\n3+3\n6\nz,zk\np\nTechnicka geodezie 1\nIng. Ratiborsky\n"
"1\n153OSYL\n1+2\n5\nkz\np\nOperacni system Linux\nIng. Pytel\n");
int N;
data >> N;
Pole pole(N);
getline(data, pole[0]); // preskocim zbytek prvniho radku
while (getline(data,pole[0]))
{
for (int k=1; k < N; k++)
{
getline(data, pole[k]);
}
string csv = CSV_zapis(pole);
cout << csv << endl;
}
}
std::string CSV_zapis(const Pole& pole, char oddelovac)
{
std::string csv;
for (int i=0; i<pole.size(); i++)
{
const std::string& p = pole[i];
// druhe a dalsi pole musi byt oddeleno
if (i != 0) csv += oddelovac;
// testuji, jestli pole musi byt uzavreno do uvozovek
bool uvozovky = false;
for (int i=0; !uvozovky && i<p.length(); i++)
if ( p[i] == '"' ||
p[i] == oddelovac ||
std::isspace(p[i]) ) uvozovky = true; // <cctype>
if (uvozovky) csv += '"';
for (int j=0; j<p.length(); j++)
{
csv += p[j];
// uvozovky se zdvojuji
if (p[j] == '"') csv += '"';
}
if (uvozovky) csv += '"';
}
return csv;
}
1,101MA1G,3+3,8,"z,zk",*p,"Matematika 1","Doc. Kocandrlova" 1,151TGE1,3+3,6,"z,zk",p,"Technicka geodezie 1","Ing. Ratiborsky" 1,153OSYL,1+2,5,kz,p,"Operacni system Linux","Ing. Pytel"
[ Zpět ]