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,788
    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