Cod sursa(job #1342876)

Utilizator alexandru.jercaianuJercaianu Alexandru alexandru.jercaianu 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();
}