Pagini recente » Cod sursa (job #972959) | Cod sursa (job #48183) | Cod sursa (job #811767) | Cod sursa (job #2863484) | Cod sursa (job #1340570)
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
// Declaratii
int i, j, k;
ifstream f_in;
ofstream f_out;
char c;
char etichete[32][256];
char valori[128][32][256];
int este_eticheta = 0;// -1-etichetele au fost inregistrate, 0-nu este eticheta, 1-eticheta in desfasurare
int col_eticheta = 0;
int ind_caract_eticheta=0;
int este_valoare = 0;// 0-nu este valoare, 1-prevaloare, 2-valoare in desfasurare (string), 3-valoare numerica
int rand_valoare = 0;
int col_valoare = 0;
int ind_caract_valoare=0;
// Program
f_in.open("convertor.in");
f_out.open("convertor.out");
while (f_in >> noskipws >> c)
{
switch(c)
{
case '"':// incepe eticheta, se termina eticheta, incepe valoare, se termina valoare
if(este_valoare == 1)
{
este_valoare=2;// urmeaza valoare. Executare ulterioara!
}
else if(este_valoare == 2)
{
valori[rand_valoare][col_valoare][ind_caract_valoare] = '\0';// fix string
este_valoare=0;// valoarea s-a terminat
ind_caract_valoare=0;
col_valoare++;
}
else if(este_eticheta == 0)
{
este_eticheta=1;// incepe eticheta. Executare ulterioara!
}
else if(este_eticheta == 1)
{
etichete[col_eticheta][ind_caract_eticheta]='\0';// fix string
este_eticheta=0;// eticheta s-a terminat
ind_caract_eticheta=0;
col_eticheta++;
}
continue;
break;
case ':':// prevaloare
este_valoare=1;
break;
case '}':// rand nou. acesta aduce si terminarea inregistrarii pentru eticheta
rand_valoare++;
col_valoare = 0;
este_eticheta=-1;// etichetele s-au terminat
break;
}
if(este_valoare == 1 && c >= '0' && c <= '9')
{
este_valoare=3;// este valoare numerica. Executare imediata!
}
if(este_valoare == 3 && (c < '0' || c > '9'))// daca numarul s-a terminat
{
valori[rand_valoare][col_valoare][ind_caract_valoare] = '\0';// fix string
este_valoare=0;// valoarea s-a terminat
ind_caract_valoare=0;
col_valoare++;
}
// executa comanda
if(este_valoare == 2 || este_valoare == 3)// inregistram valoare
{
valori[rand_valoare][col_valoare][ind_caract_valoare++] = c;
}
else if(este_eticheta == 1)// inregistram eticheta
{
etichete[col_eticheta][ind_caract_eticheta++] = c;
}
}
f_in.close();
// scriere
for(i=0; i<col_eticheta; i++)
{
j=0;
while(etichete[i][j] != '\0')
{
f_out << etichete[i][j];
j++;
}
f_out << ',';
}
f_out << "\r\n";
for(k=0; k<rand_valoare; k++)
{
for(i=0; i<col_eticheta; i++)
{
j=0;
while(valori[k][i][j] != '\0')
{
f_out << valori[k][i][j];
j++;
}
f_out << ',';
}
f_out << "\r\n";
}
f_out.close();
return 0;
}