#include #include #include #include typedef struct{ char name[20]; char surname[30]; char gender[15]; char occupancy[45]; char level_of_education[35]; char email[50]; char bank_account_number[20]; char IBAN[30]; char account_type[20]; char currency_unit[10]; int total_balance_available; char available_for_loan[5]; }Person; void assignStruct(Person *person,char* str){ /*char* keepDelimIndex[13]; int length=strlen(str); int idx=1; for (size_t i = 1; i <= length; i++) { char temp[20]; if(strcmp(str[i],',')==0&&strcmp(str[i-1],',')!=0) { itoa(i, temp, 10); strcat(keepDelimIndex,temp); } } printf(keepDelimIndex);*/ char* token=strtok(str,","); strcpy(person->name,token); token=strtok(NULL,","); strcat(token,""); strcpy(person->surname,token); token=strtok(NULL,","); strcat(token,""); strcpy(person->gender,token); token=strtok(NULL,","); strcat(token,""); strcpy(person->occupancy,token); token=strtok(NULL,","); strcat(token,""); strcpy(person->level_of_education,token); token=strtok(NULL,","); strcat(token,""); strcpy(person->email,token); token=strtok(NULL,","); strcat(token,""); strcpy(person->bank_account_number,token); token=strtok(NULL,","); strcat(token,""); strcpy(person->IBAN,token); token=strtok(NULL,","); strcat(token,""); strcpy(person->account_type,token); token=strtok(NULL,","); strcat(token,""); strcpy(person->currency_unit,token); token=strtok(NULL,","); strcat(token,""); if(token!=NULL){ person->total_balance_available=atoi(token); } token=strtok(NULL,","); strcat(token,""); if(token!=NULL){ strcpy(person->available_for_loan,token); } printf(" %s %s %s %s %s %s %s %s %s %s %d %s\n",person->name,person->surname,person->gender, person->occupancy,person->level_of_education,person->email,person->bank_account_number,person->IBAN,person->account_type,person->currency_unit,person->total_balance_available,person->available_for_loan); } int convertCSVtoBinary() { FILE* csvFile; FILE* binFile; binFile=fopen("/home/arda/Desktop/odev/records.dat","wb"); csvFile=fopen("/home/arda/Desktop/odev/records.csv","r"); if(!csvFile){ printf("couldn't open the file\n"); return 1; } else{ int max_char=1000; int count=100; Person person[count]; char row[max_char]; int i=0; fgets(row,max_char,csvFile); while(!feof(csvFile)){ fgets(row,max_char,csvFile); assignStruct(&person[i],row); i++; } fseek(binFile,0,SEEK_SET); fwrite(person,sizeof(Person),count,binFile); fclose(binFile); fclose(csvFile); } return 0; } int convertBinarytoXML(){ int max_char=1000; char row[max_char]; xmlDocPtr doc = NULL; /* document pointer */ xmlNodePtr root_node = NULL,mainNode=NULL,xmlrow=NULL,customer_info=NULL,bank_account_info=NULL, node = NULL, node1 = NULL; /* node pointers */ char buff[256]; FILE* read_bin; read_bin=fopen("/home/arda/Desktop/odev/records.dat","rb"); if(!read_bin){ printf("couldn't open the file\n"); return 0; } else{ doc = xmlNewDoc(BAD_CAST "1.0"); root_node = xmlNewNode(NULL, BAD_CAST "record"); char row[1000]; fseek(read_bin,0,SEEK_SET); for (int i = 1; i < 51; i++) { Person person; fread(&person,sizeof(Person),1,read_bin); xmlDocSetRootElement(doc, root_node); xmlrow = xmlNewNode(NULL, BAD_CAST "row"); char id[6]; snprintf(id,sizeof(id),"%d",i); const xmlChar* strId = (const xmlChar*) id; xmlNewProp(xmlrow, BAD_CAST "id",BAD_CAST strId); customer_info = xmlNewNode(NULL, BAD_CAST "customer_info"); bank_account_info = xmlNewNode(NULL, BAD_CAST "bank_account_info"); xmlAddChild(root_node,xmlrow); xmlAddChild(xmlrow,customer_info); xmlAddChild(xmlrow,bank_account_info); xmlNewChild(customer_info, NULL, BAD_CAST "name", person.name); xmlNewChild(customer_info, NULL, BAD_CAST "surname", person.surname); xmlNewChild(customer_info, NULL, BAD_CAST "gender", person.gender); xmlNewChild(customer_info, NULL, BAD_CAST "occupancy", person.occupancy); xmlNewChild(customer_info, NULL, BAD_CAST "level_of_education", person.level_of_education); xmlNewChild(customer_info, NULL, BAD_CAST "email", person.email); xmlNewChild(bank_account_info, NULL, BAD_CAST "bank_account_number", person.bank_account_number); xmlNewChild(bank_account_info, NULL, BAD_CAST "IBAN", person.IBAN); xmlNewChild(bank_account_info, NULL, BAD_CAST "account_type", person.account_type); char balance_available[100]; snprintf(balance_available,sizeof(balance_available),"%d",person.total_balance_available); const xmlChar* xmlBalance_available = (const xmlChar*) balance_available; xmlNewChild(bank_account_info, NULL, BAD_CAST "total_balance_available", xmlBalance_available); xmlNewChild(bank_account_info, NULL, BAD_CAST "available_for_loan", person.available_for_loan); //printf(" %s %s %s %s %s %s %s %s %s %s %d %s\n",person.name,person.surname,person.gender, person.occupancy,person.level_of_education,person.email,person.bank_account_number,person.IBAN,person.account_type,person.currency_unit,person.total_balance_available,person.available_for_loan); } } xmlSaveFormatFileEnc("records.xml",doc,"UTF-8",1); xmlSaveFormatFileEnc("-",doc,"UTF-8",1); xmlFreeDoc(doc); xmlCleanupParser(); fclose(read_bin); } int main() { convertCSVtoBinary(); convertBinarytoXML(); printf("arda"); return(0); }