Pagini recente » Cod sursa (job #395584) | Cod sursa (job #20498) | Cod sursa (job #1824101) | Cod sursa (job #1633146) | Cod sursa (job #1346123)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define APPEND 0
#define IGNORE 1
/* Patch and go style code, it's late, just wanted to try it out. */
int main() {
freopen("convertor.in", "r", stdin);
freopen("convertor.out", "w", stdout);
char *whitespace = "{[] \t\n";
int curr;
char buff[10000];
int i = 0, first = 1;
int state = IGNORE;
int quote_count = 0;
int printed = 0;
while (curr != EOF) {
curr = getchar();
/*printf("%c: %d, %d, %d\n", curr, state, first, quote_count);*/
if (state == IGNORE && strchr(whitespace, curr)) {
continue;
}
if (state == APPEND && quote_count == 2 && strchr(whitespace, curr)) {
buff[i] = '\0';
printf("%s,", buff);
printed = 1;
state = IGNORE;
i = 0;
}
if (curr == '}' && state == IGNORE) {
if (first) {
first = 0;
rewind(stdin);
}
quote_count = 0;
if (printed) {
printf("\n");
}
continue;
}
if (curr == '"') {
++quote_count;
}
if (quote_count == 4) {
quote_count = 0;
}
if ((curr == '"' || curr == ',') && state == APPEND) {
/* Word end. */
buff[i] = '\0';
printf("%s,", buff);
printed = 1;
state = IGNORE;
i = 0;
if (curr == ',') {
quote_count = 0;
}
continue;
}
if (curr == '"' && state == IGNORE) {
/* Word begin. */
if ((first && quote_count == 1) ||
(!first && quote_count == 3)) {
state = APPEND;
}
continue;
}
if (isdigit(curr) && state == IGNORE && quote_count % 2 == 0) {
/* Number begin. */
if (!first) {
state = APPEND;
}
}
if (curr == ',' && state == IGNORE) {
quote_count = 0;
}
if (state == APPEND) {
buff[i] = curr;
++i;
}
}
return 0;
}