Pagini recente » Cod sursa (job #2376228) | Cod sursa (job #1578201) | Cod sursa (job #2436648) | Cod sursa (job #1638126) | Cod sursa (job #1357263)
#include<fstream>
#include<string>
using namespace std;
int main ()
{
// Fisiere Intrare/Iesire
ifstream in("convertor.in");
ofstream out("convertor.out");
string str_linie,obiect;
size_t end_obiect;
// Citire primul Obiect
while(getline(in,str_linie) && str_linie.find('}')==string::npos)
{
obiect.append(str_linie);
}
obiect.append(str_linie);
end_obiect=obiect.find('}');
if(obiect.empty())
{
in.close();
out.close();
return 0;
}
// Extragerea tuturor cheilor
for(size_t it=obiect.find(':'); it<end_obiect && it!=string::npos; it=obiect.find(':',it+1))
{
string cheie;
size_t k,ends=it; // Delimitatori
bool exists=false; // Prima aparitie a ghilimelelor ( de la dreapta )
//Aflarea delimitarii cheii de ghilimele
for(k=it ;; k--)
{
if(!exists && obiect[k]=='"')
{
ends=k;
exists=true;
}
else
if(obiect[k]=='"')
break;
}
cheie=obiect.substr(k+1,ends-k-1);
out<<cheie<<',';
}
out<<'\n';
// Extragerea valorilor ptr toate obiectele ( fiecare iteratie reprezentand urmatorul obiect )
while(true)
{
end_obiect=obiect.find('}');
for(size_t it=obiect.find(':'); it<end_obiect && it!=string::npos; it=obiect.find(':',it+1))
{
string camp;
size_t k=it+1,beg; // Delimitatori
bool exists=false; // Prima aparitie a ghilimelor de la stanga ( daca exista )
while(obiect[k]==' ') // Eliminare Spatii in plus
k++;
beg=k-1; // In cazul in care campul este numar
//Delimitare Camp aflat intre ghilimele pentru sir si intre alte caractere non-numerice pentru numar
while(k)
{
if(!exists && obiect[k]=='"')
{
beg=k;
exists=true;
}
else
if((!exists && (obiect[k]==' ' || obiect[k]==',' || obiect[k]=='}')) || obiect[k]=='"')
break;
k++;
}
camp=obiect.substr(beg+1,k-beg-1);
out<<camp<<',';
}
out<<'\n';
obiect=obiect.substr(end_obiect+1); // Elimina obiectul deja analizat
// Citire urmatorul Obiect daca este cazul
if(obiect.find(']')==string::npos)
{
while(getline(in,str_linie) && str_linie.find('}')==string::npos)
{
obiect.append(str_linie);
}
obiect.append(str_linie);
}
else
if(obiect.find('}')==string::npos) // Daca nu mai exista niciun obiect in linie
break;
}
in.close();
out.close();
return 0;
}