Dynamically Read All Text in a File in C

C programming language supports 4 pre-divers functions to read contents from a file, defined in stdio.h header file:

  1. fgetc() This part is used to read a single character from the file.
  2. fgets() This role is used to read strings from files.
  3. fscanf() This function is used to read the block of raw bytes from files. This is used to read binary files.
  4. fread() This office is used to read formatted input from a file.

Steps To Read A File:

  • Open a file using the function fopen() and shop the reference of the file in a FILE pointer.
  • Read contents of the file using any of these functions fgetc(), fgets(), fscanf(), or fread().
  • File close the file using the function fclose().

Let's brainstorm discussing each of these functions in detail.

fgetc()

fgetc() reads characters pointed by the function arrow at that time. On each successful read, information technology returns the graphic symbol (ASCII value) read from the stream and advances the read position to the adjacent character. This function returns a constant EOF (-1) when there is no content to read or an unsuccessful read.

Syntax:

int fgetc(FILE *ptr);

Approach:

  • This program reads the whole content of the file, using this function by reading characters one by 1.
  • Do-While loop will be used which will read character until it reaches and of file.
  • When it reaches stop information technology returns  EOF character (-1).

Using EOF:
Below is the C programme to implement the above approach-

C

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main()

{

FILE * ptr;

char ch;

ptr = fopen ( "examination.txt" , "r" );

if (NULL == ptr) {

printf ( "file can't be opened \northward" );

}

printf ( "content of this file are \due north" );

do {

ch = fgetc (ptr);

printf ( "%c" , ch);

} while (ch != EOF);

fclose (ptr);

return 0;

}

Input File:

GeeksforGeeks | A calculator science portal for geeks

Output:

output fgetc

In the above code, the approach is to read one character from the file and check if it is not EOF, if it is not then impress it and if it is and then stop reading.

Using feof():
feof() part takes file arrow every bit argument and returns truthful if pointer reaches the end of the file.

Syntax:

int feof(FILE *ptr);

Approach:

  • In this arroyo, a character is read using fgetc().
  • Using feof() function check for end of file. since feof() returns true after it reaches the end.
  • Use logical Non operator(!) so that when it reaches end status go simulated and loop finish.

Below is the C programme to implement the to a higher place arroyo:

C

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main()

{

FILE * ptr;

char ch;

ptr = fopen ( "test.txt" , "r" );

if (NULL == ptr) {

printf ( "file can't be opened \due north" );

}

printf ( "content of this file are \n" );

while (! feof (ptr)) {

ch = fgetc (ptr);

printf ( "%c" , ch);

}

fclose (ptr);

render 0;

}

Input File:

GeeksforGeeks | A informatics portal for geeks

Output:

output feof

fgets()

fgets() reads one string at a time from the file. fgets() returns a cord if it is successfully read by function or returns Naught if can not read.

Syntax:

char * fgets(char *str, int size, FILE * ptr);

Here,
str: It is string in which fgets() store string after reading it from file.
size: It is maximum characters to read from stream.
ptr: Information technology is file pointer.

Approach:

  • In this approach, the contents of the file are read ane grapheme at a time until nosotros reach the end of the file.
  • When we attain the end of the file fgets() tin can't read and returns Naught and the program will cease reading.

Beneath is the C program to implement the in a higher place approach:

C

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main()

{

FILE * ptr;

char str[50];

ptr = fopen ( "test.txt" , "a+" );

if (NULL == ptr) {

printf ( "file tin't exist opened \n" );

}

printf ( "content of this file are \n" );

while ( fgets (str, 50, ptr) != NULL) {

printf ( "%s" , str);

}

fclose (ptr);

return 0;

}

Input File:

GeeksforGeeks | A calculator science portal for geeks

Output:

Output fgets

fscanf()

fscanf() reads formatted input from a stream.

Syntax:

int fscanf(FILE *ptr, const char *format, …)

Approach:

  • fscanf reads formatted data from the files and stores it in variables.
  • The information in the buffer is printed on the console till the end of the file is reached.

C++

#include <stdio.h>

int main()

{

FILE * ptr = fopen ( "abc.txt" , "r" );

if (ptr == Nada) {

printf ( "no such file." );

return 0;

}

char buf[100];

while ( fscanf (ptr, "%*southward %*s %s " ,

buf)

== 1)

printf ( "%s\north" , buf);

return 0;

}

Output:

fread()

fread() makes it easier to read blocks of data from a file. For instance, in the case of reading a structure from the file, it becomes an easy job to read using fread.

Syntax:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

ptr: This is the pointer to a cake of memory with a minimum size of size*nmemb bytes.
size: This is the size in bytes of each chemical element to be read.
nmemb: This is the number of elements, each ane with a size of size bytes.
stream: This is the arrow to a FILE object that specifies an input stream.

Approach:

  • It first, reads the count number of objects, each one with a size of size bytes from the given input stream.
  • The total corporeality of bytes reads if successful is (size*count).
  • Co-ordinate to the no. of characters read, the indicator file position is incremented.
  • If the objects read are not trivially re-create-able, then the behavior is undefined and if the value of size or count is equal to zero, then this plan will simply return 0.

C++

#include <stdio.h>

#include <stdlib.h>

#include <cord.h>

struct Class {

char cname[30];

char sdate[30];

};

int principal()

{

FILE * of;

of = fopen ( "exam.txt" , "due west" );

if (of == NULL) {

fprintf (stderr,

"\nError to open the file\northward" );

leave (ane);

}

struct Course inp1 = { "Algorithms" ,

"30OCT" };

struct Course inp2 = { "DataStructures" ,

"28SEPT" };

struct Course inp3 = { "Programming" ,

"1NOV" };

fwrite (&inp1, sizeof ( struct Course),

1, of);

fwrite (&inp2, sizeof ( struct Course),

ane, of);

fwrite (&inp3, sizeof ( struct Course),

1, of);

if ( fwrite != 0)

printf ( "Contents to file written successfully !\n" );

else

printf ( "Error writing file !\n" );

fclose (of);

FILE * inf;

struct Course inp;

inf = fopen ( "test.txt" , "r" );

if (inf == Aught) {

fprintf (stderr,

"\nError to open the file\north" );

go out (i);

}

while ( fread (&inp, sizeof ( struct Class),

i, inf))

printf ( "Course Name = %s Started = %due south\n" ,

inp.cname, inp.sdate);

fclose (inf);

}

Output:

output fread


scottwimen1986.blogspot.com

Source: https://www.geeksforgeeks.org/c-program-to-read-contents-of-whole-file/

0 Response to "Dynamically Read All Text in a File in C"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel