Pagini recente » Clasament cner12a | Cod sursa (job #3186940) | Cod sursa (job #8253) | Borderou de evaluare (job #103485) | Cod sursa (job #1360980)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
void nfprint(char *ptr, int len);
//void parse(char **ptr1, char **ptr2);
//char * otherParse(char **ptr1);
void solveKeys(FILE *pFile);
void solveValues(FILE *pFile);
void fie(){
int i;
for (i = 0; i < 10; ++i)
printf("%d", i);
}
int main(){
/* Open input file */
FILE *pFile = fopen("convertor.in", "rt");
/* Redirect output from stdout to convertor.out */
freopen("convertor.out", "wt", stdout);
assert (pFile != NULL);
solveKeys(pFile);
rewind(pFile);
solveValues(pFile);
fclose(pFile);
return 0;
}
void nfprint(char *ptr, int len){
int i;
for (i = 0; i < len; ++i)
printf("%c", ptr[i]);
printf(",");
}
void solveKeys(FILE *pFile){
char *ptr1, *ptr2, *str, *aux;
register short int i;
short int len, quote;
str = (char*) malloc (1025);
aux = (char*) malloc (512);
do{
fgets(str, 1025, pFile);
len = strlen(str);
quote = 0;
for(i = 0; i < len; ++i){
if(*(str+i) == '"'){
if(quote % 2 != 0){
strncpy(aux, ptr1 + 1, str + i - ptr1 - 1);
aux[str + i - ptr1 - 1] = '\0';
}
else ptr1 = str+i;
quote++;
}
else if(*(str+i) == ':'){
printf("%s,", aux);
quote = 0;
}
else if(*(str+i) == '}'){
quote = -1;
break;
}
}
}
while(quote != -1);
printf("\n");
free(str);
}
void solveValues(FILE *pFile){
char *ptr1, *ptr2, *str;
register short int i;
short int len, quote = 0, dots = 0, nr = 0;
str = (char*) malloc (1025);
do{
fgets(str, 1025, pFile);
len = strlen(str);
for(i = 0; i < len; ++i){
if(*(str+i) == ':'){
dots = 1;
quote = 0;
nr = 0;
}
else if ((*(str+i) == '"') && (dots)){
if(quote % 2 != 0)
ptr2 = str+i;
else ptr1 = str+i+1;
quote++;
}
else if (*(str+i) == '}'){
printf("\n");
dots = 0;
quote = 0;
nr = 0;
}
else if ( (*(str+i) >= 48) && (*(str+i) <= 57) && (!nr) && (dots) && (!quote) ){
ptr1 = str+i;
nr++;
}
else if ((nr == 1) && !( (*(str+i) >= 48) && (*(str+i) <= 57) ) && (dots) && (!quote) ){
ptr2 = str+i;
nr = 2;
}
if ( ( ((quote) && (quote % 2 == 0)) || (nr == 2) ) && (dots == 1) ){
nfprint(ptr1, ptr2 - ptr1);
quote = 0;
nr = 0;
dots = 0;
}
}
}
while( !feof(pFile) );
free(str);
}