C++ Bc. 23 cpp: Porovnání verzí
Bez shrnutí editace |
m +kategorie programovani, c++ |
||
(Nejsou zobrazeny 3 mezilehlé verze od 2 dalších uživatelů.) | |||
Řádek 1: | Řádek 1: | ||
[ [[C | #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 | |||
[ [[C++ Bc. 23 | Zpět]] ] | |||
[[Kategorie:Programování]] | |||
[[Kategorie:C++]] |
Aktuální verze z 2. 9. 2006, 10:59
#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 ]