Pagini recente » Cod sursa (job #473287) | Cod sursa (job #1872187) | Cod sursa (job #1349258) | Cod sursa (job #80350) | Cod sursa (job #1338248)
#include "stdio.h"
#include "stdlib.h"
#define STATE_NEW 0
#define STATE_KEY 1
#define STATE_COLON 2
#define STATE_VALUE_INT 3
#define STATE_VALUE_STR 4
int main() {
FILE *in = fopen("convertor.in", "r");
FILE *out = fopen("convertor.out", "w");
int state = STATE_NEW;
int header = 1;
char ch;
int linebuffersize = 1 * sizeof(char);
char *line = malloc(linebuffersize);
int linesize = 0;
void put(char ch) {
if(linesize == linebuffersize) {
line = realloc(line, (linebuffersize += 1 * sizeof(char)));
}
line[linesize++] = ch;
}
void flush() {
put('\0');
fputs(line, out);
linesize = 0;
}
while((ch = fgetc(in)) != EOF) {
switch(state) {
case STATE_NEW: {
switch(ch) {
case '[': break;
case ']': break;
case ',': break;
case '{': break;
case '}':
if(header) {
fputc('\n', out);
}
put('\n');
flush();
header = 0;
break;
case '"':
state = STATE_KEY;
break;
}
continue;
}
case STATE_KEY: {
switch(ch) {
case '"':
if(header) {
fputc(',', out);
}
state = STATE_COLON;
break;
default:
if(header) {
fputc(ch, out);
}
}
continue;
}
case STATE_COLON: {
switch(ch) {
case ':': break;
case '"':
state = STATE_VALUE_STR;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
state = STATE_VALUE_INT;
break;
}
if(state != STATE_VALUE_INT) continue;
}
case STATE_VALUE_INT: {
switch(ch) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
put(ch);
break;
default:
state = STATE_NEW;
put(',');
break;
}
continue;
}
case STATE_VALUE_STR: {
switch(ch) {
case '"':
state = STATE_NEW;
put(',');
break;
default:
put(ch);
}
continue;
}
}
}
fclose(out);
fclose(in);
return 0;
}