Pagini recente » Borderou de evaluare (job #1330265) | Cod sursa (job #2883692) | Cod sursa (job #752198) | Cod sursa (job #802061) | Cod sursa (job #1358694)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_JSON_VARIABLES 1536
#define MAX_KEY_LEN 1152
#define MAX_VALUE_LEN 1152
typedef struct {
char key[MAX_KEY_LEN], value[MAX_VALUE_LEN];
} json_var_t;
typedef struct {
int len;
json_var_t data[MAX_JSON_VARIABLES];
} json_dictinoary;
json_dictinoary dict;
void dump_dictionary(json_dictinoary *dict)
{
static int isFirst = 1;
if (isFirst) {
for (int i = 0; i < dict->len; ++i) {
printf("%s,", (char *) dict->data[i].key);
}
printf("\n");
isFirst = 0;
}
for (int i = 0; i < dict->len; ++i) {
printf("%s,", (char *) dict->data[i].value);
}
printf("\n");
}
int is_digit(char ch)
{
return ((ch >= '0') && (ch <= '9'));
}
void parse(FILE *file)
{
while (1) {
char ch = fgetc(file);
if (feof(file)) {
break;
}
continue;
if (ch == '"') {
json_var_t *var = &dict.data[dict.len++];
// Reading key.
int key_pos;
var->key[0] = fgetc(file);
for (key_pos = 1; var->key[key_pos - 1] != '"'; ++key_pos) {
var->key[key_pos] = fgetc(file);
}
// Reading ':'.
while (fgetc(file) != ':');
int is_str = 0;
// Determining value type.
while ((ch = fgetc(file))) {
if (ch == '"') {
is_str = 1;
break;
} else if (is_digit(ch)) {
break;
}
}
// Reading value.
int value_pos;
if (is_str) {
var->value[0] = fgetc(file);
for (value_pos = 1; var->value[value_pos - 1] != '"'; ++value_pos) {
var->value[value_pos] = fgetc(file);
}
} else {
var->value[0] = ch;
for (value_pos = 1; is_digit(var->value[value_pos - 1]); ++value_pos) {
var->value[value_pos] = fgetc(file);
}
}
// Finishing the strings.
if (var->value[value_pos - 1] == '}') {
var->key[key_pos - 1] = var->value[value_pos - 1] = 0;
dump_dictionary(&dict);
} else {
var->key[key_pos - 1] = var->value[value_pos - 1] = 0;
}
} else if (ch == '{') {
dict.len = 0;
} else if (ch == '}') {
dump_dictionary(&dict);
} else if (ch == ']') {
break;
}
}
}
int main()
{
FILE *fin = fopen("convertor.in", "r");
freopen("convertor.out", "w", stdout);
parse(fin);
return 0;
}