Cod sursa(job #1342876)
Utilizator | Data | 14 februarie 2015 17:01:48 | |
---|---|---|---|
Problema | Convertor | Scor | 0 |
Compilator | cpp | Status | done |
Runda | rosedu_cdl_2015 | Marime | 3.09 kb |
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
class Converter
{
private:
ifstream in;
ofstream out;
public:
Converter(string inputFile, string outputFile)
{
in.open(inputFile, ifstream::in);
out.open(outputFile, ofstream::out);
}
void convert()
{
out << "p";
printKeys();
in.clear();
in.seekg(0, ios::beg);
int row = 1;
string field;
char current;
in.get(current);
while (current != ']')
{
if (current == '{')
{
out << '\n';
row++;
}
else if (current == ':')
{
in.get(current);
while (!isalnum(current) && current != '"')
in.get(current);
if (current == '"')
{
in.get(current);
while (current != '"')
{
field.push_back(current);
in.get(current);
}
}
else
{
while (isdigit(current))
{
field.push_back(current);
in.get(current);
}
}
out << field << ",";
field.clear();
}
in.get(current);
}
in.close();
out.close();
}
void printKeys()
{
char current;
in.get(current);
int readKey = 0;
while (current != '}')
{
in.get(current);
if (current == '"')
{
if (readKey == 0)
{
string key;
in.get(current);
while (current != '"')
{
key.push_back(current);
in.get(current);
}
out << key << ",";
in.get(current);
while (current == ':' || current =='\t' || current == ' ' || current == '\n')
{
in.get(current);
}
if (current == '"')
{
readKey = 1;
}
else
{
readKey = 0;
}
}
else
{
readKey--;
}
}
}
}
};
int main()
{
Converter c("convertor.in", "convertor.out");
c.convert();
}