Cod sursa(job #1343121)

Utilizator alexandru.jercaianuJercaianu Alexandru alexandru.jercaianu Data 14 februarie 2015 22:01:30
Problema Convertor Scor 0
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 2.43 kb
#include<iostream>
#include<string>
#include<fstream>
using namespace std;


class Converter
{
private:
    ifstream in;
    ofstream out;

    void printKeys()
    {
        char current;
        in.get(current);
        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--;
            }
        }
    }

    void readTextValue(string& field)
    {
        char current;
        in.get(current);
        while (current != '"')
        {
            field.push_back(current);
            in.get(current);
        }
    }

    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();
    }

    void convert()
    {
        out << "p";
        printKeys();

        in.clear();
        in.seekg(0, ios::beg);

        string field;
        char current;
        in.get(current);
        while (current != ']')
        {
            if (current == '{')
            {
                out << '\n';
            }
            else if (current == ':')
            {
                in.get(current);
                while (!isalnum(current) && current != '"')
                    in.get(current);

                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();
}