Pagini recente » Cod sursa (job #1582369) | Cod sursa (job #2263412) | Cod sursa (job #1120603) | Cod sursa (job #1883765) | Cod sursa (job #1347112)
#include <iostream>
#include <fstream>
#include <vector>
#include <cctype>
/*
Switchul true false in functie de contor.
*/
bool state (int num) {
if (num % 2 == 0)
return false;
return true;
}
int main() {
std::ofstream out;
std::ifstream in;
std::string str = "";
char c;
std::vector<std::string> vect;
bool ok = false;
in.open ("convertor.in");
int count = 0;
int gcount = 0;
if (in.is_open()) {
out.open ("convertor.out");
while (in.get (c)) {
if (c == '"') {
++gcount;
ok = state (gcount);
continue;
}
if (ok) {
str.push_back (c);
if (in.peek() == '"') {
vect.push_back (str);
str = "";
}
continue;
}
if (isalnum (c) && ok == false) {
str.push_back (c);
if (!isalnum(in.peek())) {
vect.push_back (str);
str = "";
}
}
}
}
in.close();
/*
Ce-am facut pana acum a fost sa extrag cuvintele care ma
interesau, adica cele pe care le voi folosi in fisierul de
tip CVS. Am citit caracter cu caracter, tot ce era intre
ghilimele si tot ce era alfanumeric.
*/
std::string comp = vect[0];
int no_obj = 1; // nr de campuri ale obiectului
out << vect[0] << ',';
for (int i = 2; i < vect.size(); i += 2) {
if (vect[i] == comp) {
break;
}
no_obj++;
out << vect[i] << ',';
}
out << '\n';
/*
Eu practic am salvat la rand, campurile obiectului urmate
imediat de valorile lor. In bucla de mai sus, bag in fisierul
de output toate campurile (pana la intalnirea primului inca
o data), mergand pe pozitiile pare ale vectorului (buffer).
*/
count = 0;
for (int i = 1; i < vect.size(); i += 2) {
++count;
out << vect[i] << ',';
if (count == no_obj) {
count = 0;
if (i == vect.size() - 1)
break; // ca sa nu puna new line dupa ultimul
out << "\n";
}
}
/*
Aici am luat tot ce e pe pozitie impara, adica valori, si le-am
adaugat pe rand nou, tinand cont de cate campuri are obiectul
(variabila no_obj).
*/
out.close();
return 0;
}