Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   Need help in Parsing of file in C/C++ !! (http://www.go4expert.com/forums/help-parsing-file-c-cpp-t29809/)

maverickjd 11Sep2013 19:28

Need help in Parsing of file in C/C++ !!
 
Hi All,

I have to write a C/C++ code which can read a text file with the following contents :

Device ID no of ALIVE No of SEARCH no of BYEBYE
uuid:22314754-a597-490b-8a93-02cfae01036b ALIVE 16
uuid:22314754-a597-490b-8a93-02cfae01036b SEARCH 8
uuid:2ad9982a-c1ee-4037-8029-90b00c89a368 ALIVE 13
uuid:50e65653-7525-485d-83bf-d293558c4264 ALIVE 32
uuid:50e65653-7525-485d-83bf-d293558c4264 BYEBYE 8
uuid:55076f6e-6b79-4d65-6497-180373763bc1 ALIVE 113
uuid:55076f6e-6b79-4d65-6497-180373763bc1 SEARCH 111
uuid:55076f6e-6b79-4d65-6497-180373763bc1 BYEBYE 112


And format it such that the output file will be printed like below :

Device ID no of ALIVE No of SEARCH no of BYEBYE
uuid:22314754-a597-490b-8a93-02cfae01036b 16 8 0
uuid:2ad9982a-c1ee-4037-8029-90b00c89a368 13 0 0
uuid:50e65653-7525-485d-83bf-d293558c4264 32 0 8
uuid:55076f6e-6b79-4d65-6497-180373763bc1 113 111 112

The above is just an example ,basically the Device id will be getting populated dynamically, so each time,the "uuid:" string name and their occurrences(ALIVE/SEARCH/BYEBYE) might be different,so how to format it in such a way that I can track reading from any input file (with different uuid string name and different occurences) and print to an output file format,Any ideas?

Regards
Debasis

shabbir 11Sep2013 19:32

Re: Need help in Parsing of file in C/C++ !!
 
Didn't you like this http://social.msdn.microsoft.com/For...of-file-in-cc-

maverickjd 12Sep2013 17:27

Re: Need help in Parsing of file in C/C++ !!
 
Thanks Shabbir.I was just having a look.I have not checked it.Its not in c++

shabbir 12Sep2013 19:06

Re: Need help in Parsing of file in C/C++ !!
 
Ohh then what is that?

maverickjd 12Sep2013 19:22

Re: Need help in Parsing of file in C/C++ !!
 
Quote:

Originally Posted by shabbir (Post 100025)
Ohh then what is that?

My compiler is g++ (ubuntu ver 10.04) .Does not support window libraries.

shabbir 12Sep2013 19:41

Re: Need help in Parsing of file in C/C++ !!
 
So show some effort of what you have done and will be more than happy to help you solve the issue you have in your code.

maverickjd 13Sep2013 10:41

Re: Need help in Parsing of file in C/C++ !!
 
So I am now to print all 3 combinations, but not in combination of 1 or 2 e.g.

If my input.txt is like this :
uuid:22314754-a597-490b-8a93-02cfae01036b ALIVE 16
uuid:22314754-a597-490b-8a93-02cfae01036b BYEBYE 8
uuid:22314754-a597-490b-8a93-02cfae01036b SEARCH 8
uuid:50e65653-7525-485d-83bf-d293558c4264 ALIVE 32
uuid:50e65653-7525-485d-83bf-d293558c4264 BYEBYE 8
uuid:50e65653-7525-485d-83bf-d293558c4264 SEARCH 132
uuid:55076f6e-6b79-4d65-6497-180373763bc1 ALIVE 113
uuid:55076f6e-6b79-4d65-6497-180373763bc1 BYEBYE 112
uuid:55076f6e-6b79-4d65-6497-180373763bc1 SEARCH 111
uuid:T0100203354 ALIVE 1
uuid:T0100203354 BYEBYE 2
uuid:T0100203354 SEARCH 3

My code :
HTML Code:

#include<stdio.h>
#include<string.h>
struct uid
{

char uid_val[100];
char state[100];
int temp_count;
int alive_count;
int search_count;
int bye_count;

}UID[100];



int main()
{

char str[100];
int i = 0;

int line = 0;

char temp_val[100] = "waseem";

FILE *fp1 = fopen("input.txt","r");
FILE *fp2=fopen("output.txt","w");


printf("init value is %s \n",temp_val);
while(!feof(fp1))
{

        fscanf(fp1,"%s %s %d",UID[i].uid_val,UID[i].state,&UID[i].temp_count);

        int ret = 0;
        ret=strcmp(UID[i].uid_val,temp_val);
        if (ret!=0)

        {
              printf("new UID_val is %s\n",UID[i].uid_val);
//              i++;
        }
        else
        {

        }

        temp_val[0] = '\0';

        strcpy(temp_val,UID[i].uid_val);
//      printf("value is %s and %s and ret is %d\n",temp_val,UID[i].uid_val,ret);

        if(strcmp(UID[i].state,"ALIVE")==0)
        {
                UID[i].alive_count = UID[i].temp_count;
        }
        else if(strcmp(UID[i].state,"BYEBYE")==0)
        {
                UID[i].search_count = UID[i].temp_count;
        }
        else
        {
                UID[i].bye_count = UID[i].temp_count;
        }

        //printf("UID is %s  State is %s  Count is %d\n",UID[i].uid_val,UID[i].state,UID[i].alive_count);
        line++;

        if(line%3 == 0)
        {
                i++;
        }
}

//printf("value of is %d and lines is %d\n",i,line);
int n = 0;
//fp2=fopen("output.txt","w");

if (fp2==NULL)
  {
printf("cant output to file\n");
}
else

{
fprintf(fp2,"Device ID\t\t\t\t\tALIVE\tBYEBYE\tSEARCH\n");
  for(n = 0;n < i;n++)
        {
fprintf(fp2,"%s\t%d\t%d\t%d\n",UID[n].uid_val,UID[n].alive_count,UID[n].search_count,UID[n].bye_count);
}


}

//      for(n = 0;n < i;n++)
        {
//              printf("%s    %d %d  %d\n",UID[n].uid_val,UID[n].alive_count,UID[n].search_count,UID[n].bye_count);

//      }

        fclose(fp1);
        fclose (fp2);

        return 0;
}}


Gives the following output . (output.txt)

Device ID ALIVE BYEBYE SEARCH
uuid:22314754-a597-490b-8a93-02cfae01036b 16 8 8
uuid:50e65653-7525-485d-83bf-d293558c4264 32 8 132
uuid:55076f6e-6b79-4d65-6497-180373763bc1 113 112 111
uuid:T0100203354 1 2 3

I want to generalize the code such that uuid occurrence does not have to be all 3 (ALIVE/SEARCH/BYEBYE), the occurrences can be any combination and code should work. e.g my code crashes when input.txt contains the following:

uuid:22314754-a597-490b-8a93-02cfae01036b BYEBYE 8
uuid:22314754-a597-490b-8a93-02cfae01036b SEARCH 8
uuid:50e65653-7525-485d-83bf-d293558c4264 ALIVE 32
uuid:50e65653-7525-485d-83bf-d293558c4264 BYEBYE 8
uuid:55076f6e-6b79-4d65-6497-180373763bc1 ALIVE 113
uuid:55076f6e-6b79-4d65-6497-180373763bc1 BYEBYE 112
uuid:55076f6e-6b79-4d65-6497-180373763bc1 SEARCH 111
uuid:T0100203354 BYEBYE 2

I am using ubuntu for gcc/g+ compiler.PL let me know what to do.

shabbir 13Sep2013 11:02

Re: Need help in Parsing of file in C/C++ !!
 
Your code is not C++ either. It is all plain C BTW and instead of doing the way you are doing why don't you read the complete line of text aka

uuid:55076f6e-6b79-4d65-6497-180373763bc1 ALIVE 113

And then do a split based on space character and then add them to the structure.

Which would give you

uuid:55076f6e-6b79-4d65-6497-180373763bc1
ALIVE
113

And it should also work for all.

maverickjd 13Sep2013 11:29

Re: Need help in Parsing of file in C/C++ !!
 
Thanks.It can be moves in C forum.

There is a mistake..Code does not crash, but gives wrong results.. apologies..Thanks

shabbir 13Sep2013 17:55

Re: Need help in Parsing of file in C/C++ !!
 
What result do you expect and what result does it give.

The process I suggested would make your code general and work for any kind of input


All times are GMT +5.5. The time now is 14:48.