Pagini recente » Cod sursa (job #918031) | Cod sursa (job #1723651) | Cod sursa (job #2615659) | Cod sursa (job #362649) | Cod sursa (job #1347428)
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
class Converter
{
private:
ifstream in;
ofstream out;
/*
* Afiseaza cheile
*/
void printKeys()
{
char current;
in.get(current);
//readKey = 1 daca dupa o anumita cheie avem
//valoare sub forma de text intre ghilimele
//
//readKey = 0 daca la urmatoarea aparitie a ghilimelelor
//avem certitudinea ca urmeaza cheie
int readKey = 0;
while (current != '}')
{
in.get(current);
if (current == '"')
{
if (readKey == 0)
{
string key;
readTextValue(key);
out << key << ",";
in.get(current);
while (!isalnum(current) && current != '"')
in.get(current);
if (current == '"')
readKey = 1;
else
readKey = 0;
}
else
readKey--;
}
}
}
/*
* Citeste de la pozitia curenta
* textul dintre ghilimele care reprezinta o valoare
*/
void readTextValue(string& field)
{
char current;
in.get(current);
while (current != '"')
{
field.push_back(current);
in.get(current);
}
}
/*
* Citeste de la pozitia curenta
* numarul care reprezinta o valoare
*/
void readNumberValue(char c, string& field)
{
char current = c;
while (isdigit(current))
{
field.push_back(current);
in.get(current);
}
}
public:
Converter(string inputFile, string outputFile)
{
in.open(inputFile, ifstream::in);
out.open(outputFile, ofstream::out);
}
~Converter()
{
in.close();
out.close();
}
/*
* Afiseaza JSON convertit in CSV
*/
void convert()
{
//afisez mai intai cheile
printKeys();
//ma intorc la inceputul fisierului
in.clear();
in.seekg(0, ios::beg);
//variabila auxiliara ce retine un string ce trebuie tiparit
string field;
//caracterul curent
char current;
in.get(current);
while (current != ']')
{
if (current == '{')
{
out << '\n';
}
else if (current == ':')
{
in.get(current);
//ignoram caracterele diferite de ghilimere sau alfanumerice
while (!isalnum(current) && current != '"')
in.get(current);
//verificam daca valoarea este text intre ghilimele sau numar
if (current == '"')
readTextValue(field);
else
readNumberValue(current, field);
out << field << ",";
field.clear();
}
in.get(current);
}
}
};
int main()
{
Converter c("convertor.in", "convertor.out");
c.convert();
}