| distance_world |
19Nov2007 10:33 |
IP to Int and Strtok related
I have two different problems but are part of one problem:
1. I am using strtok to format a CSV file. The problem tha ti am facing is that some of the values in the CSV file are empty... i.e. the CSV file looks something like:
Valeu1,Value2,Value3,,Value4,Value5,,,,Value6
I am using strtok to convert the string into tokens. The problem that i am facing is that it doesn't recognize empty values and take it as the next value... i need a way to make strtok recognize these values.
2. I need to convert dotted IP values present in the CSV file into its equivalent HEX and then into a Int and visa versa..
my code is appended below:
Code:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define bufsize 4096 /*A defined integer for our buffer size*/
int main()
{ /*Program entry point*/
FILE* fp; /*Declare file pointer variable*/
FILE* wr;
char *buf[bufsize], *tok, fname[25], fname1[25];
char *q=",", *c="'", *nl="\n";
//char *qq=""
int cnt=0;
clrscr();
printf("Enter destination filename (with path & extension): ");
scanf("%s",&fname1);
if((wr=fopen(fname1,"w+"))==NULL)
{
fprintf(stderr,"Error creating file: %s\n",fname1);
getch();
return 1;
}
printf("Enter Source filename (with path & extension): ");
scanf("%s",&fname);
/*If file doesn't exist or filetype isn't allowed exit and*/
/*error message & return (1) control to the OS*/
if((fp=fopen(fname,"r")) == NULL)
{
fprintf(stderr,"Error opening file: %s\n",fname);
getch();
return 1;
}
do
{
/*Read into the buffer contents within the file stream*/
while(fgets(buf,sizeof(buf),fp)!=NULL)
{
/*Renew the counter value*/
cnt=1;
/*Get the first value in the line*/
tok=strtok(buf,",");
/*Write the value present in tok to the file*/
fwrite(tok,strlen(tok),1,wr);
/*Insert comma after token*/
fwrite(q,strlen(q),1,wr);
/*Here we tokenize our string and scan for "," characters*/
for(tok=strtok(NULL,",");tok;tok=strtok(0,","))
{
cnt++;
if(cnt==2)
{
//cnt++;
//Call IP convert function1 (dotted IP to Int)
fwrite(tok,strlen(tok),1,wr);
fwrite(q,strlen(q),1,wr);
}
if(cnt==4)
{
//cnt++;
//Call IP Convert Function2 (Int to dotted IP)
fwrite(tok,strlen(tok),1,wr);
fwrite(q,strlen(q),1,wr);
}
if(cnt==7)
{
//cnt++;
fwrite(c,strlen(c),1,wr);
fwrite(tok,strlen(tok),1,wr);
fwrite(c,strlen(c),1,wr);
fwrite(q,strlen(q),1,wr);
}
if(cnt==10)
{
//cnt++;
fwrite(c,strlen(c),1,wr);
fwrite(tok,strlen(tok),1,wr);
fwrite(c,strlen(c),1,wr);
fwrite(q,strlen(q),1,wr);
}
if(cnt==11)
{
//cnt++;
fwrite(c,strlen(c),1,wr);
fwrite(tok,strlen(tok),1,wr);
fwrite(c,strlen(c),1,wr);
fwrite(q,strlen(q),1,wr);
}
if(cnt==17)
{
//cnt++;
fwrite(c,strlen(c),1,wr);
fwrite(tok,strlen(tok),1,wr);
fwrite(c,strlen(c),1,wr);
fwrite(q,strlen(q),1,wr);
}
else
{
if(cnt==22)
{
fwrite(tok,strlen(tok),1,wr);
fwrite(nl,strlen(nl),1,wr);
}
if(cnt==2||cnt==4||cnt==7||cnt==8||cnt==10||cnt==11||cnt==13||cnt==14||cnt==16||cnt==17||cnt==22||cnt==23)
{
//cnt++;
}
else
{
fwrite(tok,strlen(tok),1,wr);
fwrite(q,strlen(q),1,wr);
}
}
}
}
}while(fp==NULL);
fclose(fp); /*Close file*/
fclose(wr);
printf("\nThe output has been written to the file %s",fname1);
getch();
return 0; /*Executed without errors*/
}/*End main*/
|