Cod sursa(job #1343168)

Utilizator relu.draganDragan Relu relu.dragan Data 14 februarie 2015 23:08:34
Problema Convertor Scor 90
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.28 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int isDigit(char c)
{
  if ((int)c >= 48 && (int)c <= 57)
    return 1;
  else 
    return 0;
}

void print_value(FILE* f, FILE* g)
{
  //presupunem ca suntem pe pozitia caracterului :
  char c;
  //fseek(f, dotpos + 1, SEEK_SET);
  while (1)
  {
    c = getc(f);
 
    if (c == '"')
    {
      //string
      c = getc(f);
      do
      {
        fprintf(g, "%c", c);
        c = getc(f);
      }
      while (c != '"');
      fprintf(g, ",");
      break;
    }
    else
      if (isDigit(c))
      {
        //number
        while (isDigit(c))
        {
           
          fprintf(g, "%c", c);
          c = getc(f);
        }
        fprintf(g, ",");
        break;
      }
  }
}  

int afisare_chei(FILE* f, FILE* g)
{
  long int nrkeys = 0;
  fseek(f, 0, SEEK_SET);
  //afisare prima cheie
  char c;
  int flag = 0;
  c = getc(f);
  while (c!='"')
    c = getc(f);
 
  c = getc(f);
  while (c != '"')
  {
    fprintf(g, "%c", c);
    c = getc(f);
  }
  nrkeys++;
  fprintf(g, ",");
 
  //afisare urmatoarele chei
  do
  {
    c = getc(f);
 
    while (c != ',')
    {
      c = getc(f);
      if (c == '}')
      {
        flag = 1;
        break;
      }
    }
    if (flag)
      break;
    else
      nrkeys++;
    c = getc(f);
    while (c != '"')
      c = getc(f);
    c = getc(f);
    while (c != '"')
    {
      fprintf(g, "%c", c);
      c = getc(f);
    }
    fprintf(g, ",");
  }
  while (c != '}');
  return nrkeys;
}
void get_values(FILE* f, FILE* g, long int nrkeys)
{
  long int valuenr = 0;
 
  char c;
   
  fseek(f, 0, SEEK_SET);
  c = getc(f);
  while (c != ']')
  {
    if (c == ':')
    {
      valuenr++;
      print_value(f,g);
      /*if (valuenr % nrkeys == 0)
        fprintf(g, "\n");*/

    }
    if (c == '{') 
      fprintf(g, "\n");    
    c = getc(f);
  }
   
}
int main(void)
{
    FILE *f, *g;
    long int nrkeys;
        
   // start = clock();
     
    f = fopen("convertor.in", "rt");
    g = fopen("convertor.out", "wt");
    //printf("%d\n", get_nrkeys(f));
    nrkeys = afisare_chei(f,g);
    fprintf(g, "\n");
    get_values(f,g, nrkeys);
    //get_dots_positions(f,g,0);
     
    fclose(f);
    fclose(g);
    //stop = clock();
    //printf("%.6f\n", (double)(stop - start) / CLOCKS_PER_SEC);
    return 0;
     
}