A little problem with filing in C

  • Thread starter Peon666
  • Start date
In summary, the programmer is having trouble reading data from a file. He has tried different ways to solve the problem, but they have all had errors. He is requesting help from the community.
  • #1
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.
 
Technology news on Phys.org
  • #2
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 accommodate 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
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
Code:
if (!f)
{
return 1;
}

What is f?
 
  • #5
oh. It was fptr actually. typo error.
 
  • #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:
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
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
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
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
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
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.
 

1. What is "A little problem with filing in C"?

"A little problem with filing in C" refers to an issue that can arise while using the C programming language's file input/output (I/O) functions. This can include difficulties with reading or writing files, managing file pointers, or handling errors.

2. What causes problems with filing in C?

Problems with filing in C can be caused by a variety of factors, including incorrect file paths, insufficient permissions, improper use of file pointers, and programming errors such as not checking for errors or closing files properly.

3. How can I fix filing problems in C?

To fix filing problems in C, it's important to first identify the specific issue causing the problem. This can be done by carefully reviewing the code and checking for any common mistakes. It's also helpful to consult the C language documentation for guidance on proper file I/O techniques. Additionally, using debuggers and error handling techniques can help pinpoint and resolve any issues.

4. Are there any best practices for filing in C?

Yes, there are several best practices for filing in C to help avoid common problems. These include always checking for errors when using file I/O functions, properly closing files after use, using relative file paths instead of absolute paths, and using descriptive file names and extensions.

5. Can filing problems in C cause data loss?

Yes, if file I/O functions are not used correctly or if errors are not properly handled, it is possible for filing problems in C to result in data loss. This is why it's important to carefully review and test code when working with file operations in C.

Suggested for: A little problem with filing in C

Replies
4
Views
916
Replies
1
Views
954
Replies
12
Views
2K
Replies
2
Views
455
Replies
34
Views
2K
Replies
5
Views
1K
Back
Top