A little problem with filing in C

  • Thread starter Peon666
  • Start date
  • #1
Peon666
108
0
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:
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.
 

Answers and Replies

  • #2
Borek
Mentor
29,003
3,669
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.
 
  • #3
Peon666
108
0
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.
 
  • #4
Borek
Mentor
29,003
3,669
Code:
if (!f)
{
return 1;
}

What is f?
 
  • #5
Peon666
108
0
oh. It was fptr actually. typo error.
 
  • #6
Peon666
108
0
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:
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:
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?
 
  • #7
Borek
Mentor
29,003
3,669
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?
 
  • #8
Peon666
108
0
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.
 
  • #9
Peon666
108
0
Here's a bit modification:

Code:
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.
 
  • #10
Peon666
108
0
Okay. I think using pointers would be a bad idea. Here the new code using only arrays:


Code:
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:
 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)
 
  • #11
Borek
Mentor
29,003
3,669
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.
 

Suggested for: A little problem with filing in C

  • Last Post
Replies
11
Views
3K
  • Last Post
Replies
2
Views
1K
  • Last Post
Replies
4
Views
2K
  • Last Post
Replies
7
Views
3K
  • Last Post
Replies
6
Views
8K
  • Last Post
Replies
4
Views
5K
  • Last Post
Replies
1
Views
2K
  • Last Post
Replies
3
Views
1K
  • Last Post
Replies
4
Views
3K
Replies
1
Views
2K
Top