Thread: Need help in printing of a file in different format in C?

  1. #1
    Registered User
    Join Date
    Sep 2013
    Posts
    1

    Need help in printing of a file in different format in C?

    The requirement is to capture statistics of uuid occurrences for ALIVE/SEARCH/BYEBYE (it can be all 3, combinations of 2 each, or one alone) in a dynamically populated file in run time.

    I am able 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
    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);
    
    
            }
            else
            {
            }
    
    
            temp_val[0] = '\0';
            strcpy(temp_val,UID[i].uid_val);
    
    
    
    
            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;
            }
    
    
    
    
            line++;
    
    
            if(line%3 == 0)
            {
                i++;
            }
        }
    
    
    
    
        int n = 0;
    
    
    
        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);
            }
        }
    
    
    
    
    
    
    
    
            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 gives wrong results 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.
    Last edited by maverickjd; 09-13-2013 at 12:39 AM. Reason: typos

  2. #2
    Hurry Slowly vart's Avatar
    Join Date
    Oct 2006
    Location
    Rishon LeZion, Israel
    Posts
    6,794
    do not use feof to control loop - check retrun value of fscanf instead
    Code:
    while(fscanf(fp1,"%s %s %d",UID[i].uid_val,UID[i].state,&UID[i].temp_count) == 3)
    So store the read dev ID string and count
    If same devId is encountered again - increment count
    All problems in computer science can be solved by another level of indirection,
    except for the problem of too many layers of indirection.
    David J. Wheeler

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Printing Integer Value to LCD in ASCII Format
    By JTerry in forum C Programming
    Replies: 5
    Last Post: 01-04-2011, 10:31 AM
  2. Help scanning in numbers and printing format
    By ArcadeEdge in forum C Programming
    Replies: 2
    Last Post: 10-12-2010, 05:13 PM
  3. Printing the data in the right format
    By c_geek in forum C Programming
    Replies: 48
    Last Post: 12-24-2007, 04:19 PM
  4. printing time in HH:MM:SS:MS format
    By msenthil in forum Linux Programming
    Replies: 3
    Last Post: 10-24-2007, 01:03 PM
  5. Printing numbers in hex format
    By miclus in forum C++ Programming
    Replies: 7
    Last Post: 01-29-2005, 07:04 AM