Cod sursa(job #1338461)

Utilizator Tzappy90Mihalache Constantin Tzappy90 Data 10 februarie 2015 02:24:46
Problema Convertor Scor 100
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 2.06 kb
#include <string>
#include <fstream>
#include <vector>
#include <iostream>

using namespace std;

ifstream in("convertor.in");
ofstream out("convertor.out");
vector<string> keys;
string *raw_json;

int getHeaders()
{
	int key=0;
	string *temp = new string;
	bool read=false;
	size_t start=0,end=0;
	for(size_t i=0; i<raw_json->length(); i++)
	{
		switch(raw_json->at(i))
		{
			case '{':
			case ',':
				while(raw_json->at(i+1)==' ' || raw_json->at(i+1)=='\n') i++;
				start = i+1;
				break;
			case '}':
				return 1;
			case ':':
				end = i;
				*temp=raw_json->substr(start,end-start);
				while(temp->at(temp->length()-1)==' ' || temp->at(temp->length()-1)=='\n' || temp->at(temp->length()-1)=='"') 
					temp->erase(temp->length()-1,1);
				if(temp->at(0)=='"')
					temp->erase(0,1);
				keys.push_back(*temp);
				start=0;
				end=0;
			case ' ':
			case '\n':
			case '\r':
				break;
		}
	}
	return 0;
}
int getCSV()
{
	for(size_t i=0; i< raw_json->length(); i++)
	{
		switch(raw_json->at(i))
		{
			case ':':
				i++;
				while(raw_json->at(i)==' ' || raw_json->at(i)=='\r' || raw_json->at(i)=='\n') i++;
				if(raw_json->at(i)=='"')
				{
					i++;
					while(raw_json->at(i)!='"')
					{
						out << raw_json->at(i++);
					}
					out << ',';
				}
				else
				{
					while(raw_json->at(i)!=',' && raw_json->at(i)!='}' && raw_json->at(i)!=' ' && raw_json->at(i)!='\n'
						&& raw_json->at(i)!='\r')
					{
						out << raw_json->at(i++);
					}
					out << ',';
					if(raw_json->at(i)=='}')
						out << '\n';
				}
				break;
			case '}':
				out << '\n';
				break;
			case '[':
			case ']':
			case ' ':
			case '{':
				break;
		}
	}
	return 0;
}
void readRaw() //read file;
{
	ifstream raw("convertor.in");
	raw.seekg (0, raw.end);
    int file_length = raw.tellg();
    raw.seekg (0, raw.beg);

    char *buffer = new char [file_length];

	raw.read(buffer,file_length);
	raw_json = new string(buffer);
	
	delete[] buffer;
	raw.close();
}
int main()
{	
	readRaw();
	getHeaders();
	for(size_t i=0; i<keys.size(); i++)
		out<<keys[i]<<',';
	out << '\n';
	getCSV();
	out.close();
	return 0;
}