Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

A little problem with filing in C

  1. Mar 21, 2010 #1
    I'm writing an SJF scheduling algo and I'm having a little problem with filing. I'm to read data from a file. I've read the entire data in a single array/pointer but now I want to read every line in a separate array/pointer/string. I'm not able to do so. Ay help would be highly appreciated.

    Here's the code so far:

    Code (Text):
    int main ()
    {
    FILE *fptr;
    int i;
    printf ("Output from the file");
    char s[500];
    int count = 0;
    fptr = fopen ("file.txt","r");
    if (!f)
    {
    return 1;
    }
    while (fgets(s,1000,fptr) != NULL)
    printf ("%s",s);
    fclose(fptr);
    return 0;
    }
    How can I read each line in a separate array/string/pointer?

    Thanks.
     
  2. jcsd
  3. Mar 21, 2010 #2

    Borek

    User Avatar

    Staff: Mentor

    Many ways to skin that cat.

    Are all lines of the same length? Or different?

    You can declare array of char pointers, read each line separately to a buffer, duplicate it and put the pointer to duplicate in the array.

    Or you can declare two dimensional array (char[][]) large enough to accomodate all lines - that requires you to know maximum length before starting to work and can be very inefficient in tems of memory used.

    Edit: have you tried to compile your program? Doesn't look like something correct.
     
  4. Mar 21, 2010 #3
    yeah I've compiled it. I'm running it on Linux terminal and it's running fine. Thanks for the suggestion.

    I've tried using char arrays for each lines and seems like it's working.
     
  5. Mar 21, 2010 #4

    Borek

    User Avatar

    Staff: Mentor

    Code (Text):
    if (!f)
    {
    return 1;
    }
    What is f?
     
  6. Mar 21, 2010 #5
    oh. It was fptr actually. typo error.
     
  7. Mar 22, 2010 #6
    Alright. I'm still having a few problems. I tried to get each line in a separate pointer but it's getting crazy. Here's the code:

    Code (Text):

    int main ()
    {
    FILE *fptr;
    int i;
    printf ("Output from the file");
    char s[500];
    int count = 0;
    fptr = fopen ("file.txt","r");
    if (!fptr)
    {
    return 1;
    }
    while (fgets(s,1000,fptr) != NULL)
    {
    if (s[i] == 'P' && s[i+1] == '1')
    {
    while (s[i] != '\n')
    {
    count++;
    i++;
    }
    }
    for (for i=0; i<count; i++)
    {
    p1= malloc (sizeof (char)*count);
    //printf ("%d", count);
    p[i] = s[i];
    }
    printf ("%s",s);
    }
    for (i=0 i<count; i++)
    {
    printf ("%c", p1[i]);
    }
    fclose(fptr);
    return 0;
    }

     
    PROBLEM:

    The value of the counter in the loop is 4 (4 elements in the first row), and it indeed gies the value of the counter 4 when I printf the counter. But in the following loop:

    Code (Text):

    for (for i=0; i<count; i++)
    {
    p1= malloc (sizeof (char)*count);
    //printf ("%d", count);
    p[i] = s[i];
    }
     
    It outputs the counter 40 times. What's going on?
     
  8. Mar 22, 2010 #7

    Borek

    User Avatar

    Staff: Mentor

    Use debugger and trace how values of the variables change during execution.

    Code you show here is full of errors. Are you retyping it? Can't you copy and paste?
     
  9. Mar 22, 2010 #8
    Yeah, retyping. I'm compiling it on another PC and internet is having problems there, so I'm using net on another PC.

    Ok, I'll try to debug and see.
     
  10. Mar 22, 2010 #9
    Here's a bit modification:

    Code (Text):

    while (fgets(s,1000,fptr) != NULL)
    {
        if (s[i] == 'P' && s[i+1] == '1')
        {
           while (s[i] != '\n')
           {
                count++;
                p1=malloc (sizeof(char)*count);
                p1[count-1]=s[i];
                //printf ("%c", p1[i]);
                i++;
                }
            }
            for (i=0 i<count; i++)
            {
                 printf ("%c", p1[i]);
            }
            fclose(fptr);
            return 0;
    }
     
    Now the counter is running fine and it's putting values in p1, but problem is in the last loop all p1 outputs in 0 four times.
     
  11. Mar 22, 2010 #10
    Okay. I think using pointers would be a bad idea. Here the new code using only arrays:


    Code (Text):

    int main ()
    {
        FILE *fptr;
        arr[20];
        int i;
        printf ("Output from the file");
        char s[500];
        int count = 0;
        fptr = fopen ("file.txt","r");
        if (!fptr)
        {
            return 1;
        }
        while (fgets(s,1000,fptr) != NULL)
        {
            if (s[i] == 'P' && s[i+1] == '1')
            {
                while (s[i] != '\n')
                {
                     count++;
                     arr[count]=s[i];
                     i++;
                }
            }
        }
        for (i=0 i<count; i++)
        {
            printf ("%c", arr[i]);
        }
    fclose(fptr);
    return 0;
    }
     
    PROBLEM:

    Only question: Why is the counter only 4 in the following loop?

    Code (Text):

     while (s[i] != '\n')
                {
                     count++;
                     arr[count]=s[i];
                     i++;
                }
     
    File format is:

    P1 0 (this is the first line. As the counter increments to only first, the array outputs in the final loop only P1 and not 0)
     
  12. Mar 22, 2010 #11

    Borek

    User Avatar

    Staff: Mentor

    Your code doesn't make sense - it contains errors, so it is impossible to analyse. i is used before being initialized, there is no such thing as arr[20] as it doesn't follow array declaration syntax and so on. Posting again and again and repeating the same invalid code you are only wasting time and it will get you nothing. I told you - trace all variables and see if they change as you think they do.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: A little problem with filing in C
  1. C++ File problem (Replies: 6)

  2. A little C# help. (Replies: 7)

Loading...