Pagini recente » Istoria paginii utilizator/zangetsu2201 | Cod sursa (job #851839) | Cod sursa (job #361276) | Cod sursa (job #273491) | Cod sursa (job #1359566)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STRING 2
#define INT 1
int main()
{
FILE* IN = fopen("convertor.in", "rb");
FILE* OUT = fopen("convertor.out", "wb");
char *file_content;
int file_length, crtObj = 0, second_line_length = 1;
int i;
short isReading = 0, isValue = 0, type = 0;
fseek (IN , 0 , SEEK_END);
file_length = ftell(IN);
rewind(IN);
file_content = (char*)malloc( file_length * sizeof(char) );
fread(file_content, 1, file_length, IN);
for( i=0 ; i<file_length ; i++)
{
if(file_content[i] == '}')
break;
if( isReading )
{
if(isValue)
{
if(file_content[i] ==',')
isReading = 0;
continue;
}
//sfarsitul citirii unei chei sau valori
if( file_content[i] == '"' )
{
isReading = 0;
putc(',', OUT);
continue;
}
fwrite( file_content + i * sizeof(char) , 1, 1 , OUT);
}
else
{
switch(file_content[i])
{
case '"':
isReading = 1;
isValue = 0;
break;
case ':':
isReading = 1;
isValue = 1;
break;
default:
continue;
}
}
}
isReading = 0;
putc('\n', OUT);
for( i=0 ; i<file_length ; i++)
{
if( isReading )
{
//get value type, if not done so already
if(!type)
{
if(file_content[i] >= '0' && file_content [i] <= '9')
type = INT; //int
else if(file_content[i] == '"')
{
type = STRING; //string
continue; //string-ul incepe de la urmatorul caracter
}
else
continue;//salt peste caracterele dintre : si value
}
//sfarsitul citirii unei chei sau valori
if( (type == STRING && file_content[i] == '"') ||
(type == INT && !(file_content[i] >= '0' && file_content [i] <= '9') ) )
{
isReading = 0;
type = 0;
putc(',', OUT);
continue;
}
fwrite( file_content + i * sizeof(char) , 1, 1 , OUT);
}
else
{
//daca nu citeste (scrie) o cheie sau o valoare
switch(file_content[i])
{
case ':': //valoare
isReading = 1;
isValue = 1;
break;
case '{': //next object
crtObj++;
break;
case '}':
putc('\n', OUT);
break;
default: //pentru spatii, tab-uri...
continue;
}
}
}
//free
free( file_content );
//close files
fclose( IN );
fclose( OUT );
return 0;
}