text format vs binary format in C++ in hindi

file handling हमें सुविधा देता है की हम एक file में user input को store करा सकें जिससे program terminate होने के बाद भी user द्वारा input किया गया data, remove या erase नहीं होता जैसे कि एक साधारण program में होता है, ऐसे में हम उस data को program को दोबारा execute करके access करते हैं। यह एक real world application की तरह व्यवहार करता है।

यहाँ पर user input को आप किसी file में दो प्रकार से store करा सकते हैं आप इसे data format कह सकते हैं।

हम इन दोनों को कुछ उदाहरणों से समझेंगे –

यहां हम दो तरीकों से data को file में store कर सकते हैं,

  • Text format/character form
  • Binary format

इसमें text format by default होता है।

यहाँ हम C ++ में text format और binary format को उनके अंतर से समझेंगे-

  • Data can be stored in character-form in two ways-
  • सामान्यत: किसी data को text format में store करने के लिए यहाँ दो तरीके दिए गए हैं –
  1. insertion operator (<<) to write, extraction operator (>>) to read
  2. put() for write, get() for read

यहाँ नीचे text format का उदाहरण दिया गया है-

#include<iostream.h>
#include<conio.h>
#include<stdio.h>   //  gets()
#include<fstream.h>

  void main()
  {
      clrscr();
      char *name;

      ofstream fout;
      cout<<"Enter Your Name :";
      gets(name);

      cout<<"Name: "<<name;// displaying on monitor

      fout.open("text.txt");
      fout<<name;//writing in file
      fout.close();

      getch();
   }

OUTPUT

Enter Your Name : rahul singh
Name: rahul singh

The write() and read() functions are used for binary-form.

binary format के लिए write() और read (), जो कि predefined function होते हैं , का उपयोग किया जाता है-

here is the program ,

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<fstream.h>

  void main()
  {
      clrscr();
      char *name;
      ofstream fout;

      cout<<"Enter Your Name :";
      gets(name);

      cout<<"Name: "<<name; //displaying on monitor

      fout.open("binary.txt",ios::binary);
      fout.write((char*)&name,sizeof(name));//writing in file
      fout.close();

      getch();
   }

OUTPUT

Enter Your Name : rahul singh
Name: rahul singh

यहाँ पर ध्यान दें दोनों program में txt एक file extension हैं मतलब file एक text document प्रकार का होगा जबकि उसमे stored data का format different (text /binary ) होगा।

अगर << के साथ ios :: bin के प्रयोग करते हैं जैसे –

fout.open("text.txt",ios::bin); 
fout<<name;

तब भी यह data को text format में store करेगा।

और अगर write() के साथ ios :: binary का प्रयोग नहीं करते हैं जैसे –

fout.open("binary.txt"); 
fout.write((char*)&name,sizeof(name));

तो यह केवल एक सीमा तक ही record को binary format में store करेगा इसलिए binary format के लिए ios::binary के साथ write() function अनिवार्य है इसका उदाहरण पेज के अंतिम में दिया गया है।

    • text format में data जो type होगा वह उसी रूप में file में store होगा-

stored in text mode-cpp

  • जबकि binary format में data कुछ इस प्रकार स्टोर होगा-
  • binary format in file handling
  • text format binary format की तुलना में अधिक memory size लेता है जैसे – कोई नाम “rahul singh ” किसी file में इस प्रकार size लेगा-store in text-formatin-cpp

 

क्योंकि हम जानते हैं कि char का मेमोरी साइज़ 1 byte होता है, इसलिए प्रत्येक character के लिए 1 byte (blank string भी 1 byte लेगा) जैसे की ऊपर Diagram से पता चलता है। इसलिए इस file का size 11 byte होगा –

cpp-binary-format

 

  • और अब binary format में उसी value को store करने पर ,

store-value-binary-format

क्योंकि int का memory size 2 byte होता है, इसलिए इसका file size 2 bytes होगा –

cpp-binary-format

अब आप देख सकते हैं कि जब हम एक ही data को पहले character format में यह 11 बाइट ले रहा है जबकि binary format में store करने में केवल 2 बाइट लेता है।

  • text format में store data का size binary format में store से ज्यादा होता है इसलिए binary format को text format की अपेक्षा ज्यादा जल्दी access किया जा सकता है।

क्योंकि data text format में store किया जाता है इसलिए इसे आसानी से पढ़ा जा सकता है मान लीजिए कि user ने कोई नाम “rahul singh ” store किया तो ,
binary format में stored data file कुछ special character में convert हो जाता है जिसे आसानी इंसान नहीं पढ़ सकता-

 

binary file in cpp

साथ ही इसे binary format को केवल उसी program से access किया जा सकता है जिससे इसे write /store किया गया हो जबकि text format stored data को बिना program के भी read किया जा सकता है जिसे की backside से access किया जाता है ऐसे में security कम हो जाती है-

text format in file handling

अब हम जानते हैं कि binary format में stored data सुरक्षित और fast accessing provide कराता है।

लेकिन character format में stored data का भी एक फायदा है, जैसे कि किसी project में कुछ advance task जैसे student marksheet, bill receipt आदि को प्रिंट करने में। हम इस तरह के task को करने के लिए text format का इस्तेमाल कर सकते हैं।

यह आवश्यक नहीं है कि हम केवल student मार्कशीट को प्रिंट करने के लिए text format का उपयोग कर सकते हैं। यह उन सभी के लिए एक बेहतर विकल्प है, जहाँ पर हमें physical record की आवश्यकता पड़ती है। परन्तु जहाँ पर केवल बात storage की है तो वहां पर binary format बेहतर विकल्प होगा।

Extra

binary-format में data को स्टोर करने के लिए हम नीचे दिए गए syntax का प्रयोग करते हैं –

परन्तु यहाँ पर हमने ios :: binary इस्तेमाल नहीं किया है फिर भी यह data को binary format में store करता है

इसका मतलब हम दो तरीके से data को binary format में store कर रहे हैं

First case

fout.open("binary.txt") // without ios:: binary
fout.write((char*)&name,sizeof(name));

Second case

fout.open("binary.txt",ios::binary) // 
fout.write((char*)&name,sizeof(name));

दोनों data को binary format में store करेंगे। लेकिन अब सवाल यह उठता है कि क्या ios :: binary optional है?

नहीं। ऐसा इसलिए है क्योंकि एक large volume data को store करने के लिए ios :: binary अनिवार्य हो जाता है।

चलिए इसे एक उदाहरण से समझते हैं-

यहाँ नीचे program 15 बार execute किया गया है (इसका मतलब है कि हम एक ही file को 15 बार write करते हैं )

  • बिना ios :: binary के
#include<iostream.h>
#include<conio.h>
#include<fstream.h>

 class example
  {
   public:
     int number;
     void write();
     void read();
  };
 example obj;   // object created

   void example:: write(void)
    {
       clrscr();
       ofstream fout;
       cout<<"Press any key to write file:";

	fout.open("myfile.txt",ios::app);
	fout.write((char*)&obj,sizeof(example));
	fout.close();
     }

    void example::read(void)
     {
	ifstream fin;
	fin.open("myfile.txt");

	while(fin.read((char*)&obj,sizeof(example)))
	 {
	    cout<<number<<endl;
	 }
	fin.close();
      }

//main program start here
  void main()
   {
     clrscr();
  //write a file 15th time
     obj.number=1; obj.write();
     obj.number=2; obj.write();
     obj.number=3; obj.write();
     obj.number=4; obj.write();
     obj.number=5; obj.write();
     obj.number=6; obj.write();
     obj.number=7; obj.write();
     obj.number=8; obj.write();
     obj.number=9; obj.write();
     obj.number=10; obj.write();
     obj.number=11; obj.write();
     obj.number=12; obj.write();
     obj.number=13; obj.write();
     obj.number=14; obj.write();
     obj.number=15; obj.write();

     getch();    //hold the screen

    clrscr();
    obj.read(); //displaying file content

    getch();
  }

OUTPUT

Press any key to continue

1
2
3
4
5
6
7
8
9
10
11
12
13
9083
5432
32159

अब हम उपरोक्त आउटपुट देख सकते हैं हम नंबर 1-15 को store करते हैं, लेकिन ऐसा नहीं होता है और नंबर 13 के बाद garbage value प्रिंट होता है।

    • with ios::binary mode
#include<iostream.h>
#include<conio.h>
#include<fstream.h>

 class example
  {
   public:
     int number;
     void write();
     void read();
  };
 example obj;   // object created

   void example:: write(void)
    {
       clrscr();
       ofstream fout;
       cout<<"Press any key to write file:";

	fout.open("myfile.txt",ios::binary|ios::app);
	fout.write((char*)&obj,sizeof(example));
	fout.close();
     }

    void example::read(void)
     {
	ifstream fin;
	fin.open("myfile.txt",ios::binary);

	while(fin.read((char*)&obj,sizeof(example)))
	 {
	    cout<<number<<endl;
	 }
	fin.close();
      }

//main program start here
  void main()
   {
     clrscr();
  //write a file 15th time
     obj.number=1; obj.write();
     obj.number=2; obj.write();
     obj.number=3; obj.write();
     obj.number=4; obj.write();
     obj.number=5; obj.write();
     obj.number=6; obj.write();
     obj.number=7; obj.write();
     obj.number=8; obj.write();
     obj.number=9; obj.write();
     obj.number=10; obj.write();
     obj.number=11; obj.write();
     obj.number=12; obj.write();
     obj.number=13; obj.write();
     obj.number=14; obj.write();
     obj.number=15; obj.write();

     getch();    //hold the screen

    clrscr();
    obj.read(); //displaying file content

    getch();
  }

OUTPUT

Press any key to continue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

अगर कोई large volume data , numeric types का है तो ios::binary अनिवार्य होगा जबकि characters types के data के लिए यह optional होगा।

⚠️: The programs given in this article are based on Windows 10, 64-bit OS, x64 based pro and executed on Turbo C++ 64bit version.

Related exercise

Leave a Reply

Your email address will not be published. Required fields are marked *