Read Write File in C

C Programming Language in Hindi - BccFalna.com ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook  C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C Programming Language in Hindi | Page: 477 + 265 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE

Read Write File in C: पिछले Post में हमने C Language Code द्वारा एक नई Operating System Based File Open करने के विषय में विस्‍तार से जाना। इस Post में हम File में Data लिखने के लिए एक साधारण सा Program बना रहे हैं, जिसमें हम एक data.nam नाम की File को Writing Mode में Open करेंगे और इसमें एक नाम Store करेंगे। Program निम्नानुसार है:

// Program
#include<stdio.h>
main()
{
	FILE *fp;
	char ch;
	clrscr();
	
	printf("\n Input Name :");
	
	fp = fopen("Data.nam", "w" );
	
	while((ch = getc (stdin)) != EOF )
		putc (ch, fp);

	fclose (fp);
}

आइये पहले इस Program में Use हुए Functions को समझें। इस प्रोग्राम में दो नए  Functions को Use किया गया है, जो कि निम्नानुसार हैं:

Read Write File in C – getc() Function

यह Function किसी Stream से Input प्राप्त करने का काम करता है। ये Stream FILE Pointer या फिर stdin (Keyboard) ही हो सकता है। इसका Syntax निम्नानुसार होता है:

        ch = getc( FILE pointer or Stream );

Read Write File in C – putc() Function

यह Function getc() Function से प्राप्त characters को किसी FILE pointer द्वारा] किसी File में Store करता है या किसी stream ( stdout or stdprn ) पर show करता है। इसका Syntax निम्नानुसार होता है:

        putc( ch, FILE pointer or Stream );

इस प्रोग्राम में FILE प्रकार का एक Pointer Variable Declare किया गया है। पूरे Program में इसी Pointer द्वारा FILE Structure को Access किया जाता है। इस प्रोग्राम में हम एक-एक Character को stdin ( Key Board ) से Accept करते हैं।

हर Character को Accept करने के लिए हमने char प्रकार का ch नाम का एक Variable Define किया है। फिर हर character को क्रम से Accept करके उसे fp FILE Pointer द्वारा File में Write कर दिया गया हैं। जब इस Program को Execute किया जाता है, तो सभी Definition व Declaration के बाद Program Control printf() Function का निम्न Message Screen पर Print करता है।

        “Input Name :”

ये Message Screen पर Print करने के बाद Program Control निम्न Statement  को Execute करता है।

        “fp = fopen(“Data.nam”, “w” );

fopen() Function, Data.nam नाम की एक File Writing Mode में Open करता है और fp Pointer को इस File के पहले Character का Address दे देता है। ये सवाल दिमाग में आ सकता है कि जब कोई नई File Create होती है, तब उसमें कुछ भी लिखा हुआ नहीं होता। उस समय fp कैसे File के प्रथम Character को Point कर सकता है।

इस सवाल का जवाब ये है कि किसी भी File में कुछ लिखा हो या ना लिखा हो, ये हमेंशा निश्चित होता है, कि यदि कोई Character लिखा जाएगा तो, File में वह सबसे पहला Character किस Location पर जा कर Store होगा।

File Pointer fp में उसी Location का Address Stored होता है ना कि File का पहला Character क्योंकि fp एक Pointer है और किसी भी Pointer में किसी अन्‍य Variable का Address ही Store हो सकता है। इस प्रकार से File Pointer में File के प्रथम Character के Store होने की Location का Address Stored होता है।

हम जानते हैं कि getc() Function द्वारा हम एक बार में केवल एक ही Character को Input कर सकते हैं लेकिन हमें तो तब तक Characters Input करने है जब तक कि EOF प्राप्त ना हो जाए।

इसलिए हमने एक while Loop का प्रयोग किया है। हमने Loop Chapter के अंतर्गत बताया था कि जब हमें ये पता नहीं होता है कि Loop को कितनी बार चलाना है, तब while Loop को Use करना अधिक अच्छा रहता है। इसीलिए यहां हमने while Loop द्वारा Characters Input करवाए हैं। आइये निम्न Statement को समझते हैं:

        while((ch = getc (stdin)) != EOF )

इस Statement में ch = getc (stdin) Statement  का Use किया गया है। ये Statement, Standard Input Device ( Key Board ) से एक character Accept करता है और उस Character को ch नाम के char प्रकार के Variable में Store कर देता है।

चूंकि while Loop तभी Terminate हो सकता है जब Program Control को EOF प्राप्त हो और Program Control को EOF तभी प्राप्त होगा जब User Key Board से ^z या Function Key F6 को Press करे। यदि User Key Board से ^z या Function Key F6 को Press नही करता है, तो while Loop की Condition सत्‍य होती है और Program Control while के Statement Block में प्रवेश करता है।

चूंकि यहां while Condition के सत्‍य होने पर केवल एक ही Statement को Execute करना है, इसलिए यहां Statement Block का प्रयोग नहीं किया गया है। जब while Condition सत्‍य होती है, तब Program Control निम्न Statement को Execute करता है:

        putc (ch, fp);

putc() Function getc() Function से प्राप्त character, जो कि ch नाम के char प्रकार के Variable में Stored है, File pointer द्वारा File में Store कर देता है, साथ ही File Pointer fp को File की Next Location का Address प्रदान कर देता है, जिससे File Pointer fp File के दूसरे Character की Location को Point करने लगता है।

ये Statement Execute होने के बाद पुन: while Loop Execute होता है और keyboard से Character Accept करता है। putc() Function पुन: getc() Function से प्राप्त Character को File में Store कर देता है और File pointer fp को Next Location का Address प्रदान कर देता है। ये क्रम तब तक चलता रहता है जब तक कि User Key Board से Function Key F6 या ^z Press नही कर देता।

इस प्रकार से हम getc() व putc() Function द्वारा एक-एक characters को किसी File में Store कर सकते हैं। यदि हमें ये देखना हो कि हमारे द्वारा Create की गई Data.nam नाम की File Disc पर बनी या नहीं और यदि बनी तो उसमें Inputted Data Store हुए या नहीं, तो इसके लिए हम निम्नानुसार हमारी File के Data को देख सकते हैं:

  • File को Dos Prompt पर Type या Edit Command के बाद Data File nam नाम देकर और
  • एक और “C” Program बना कर जिसमें nam नाम की File को Reading Mode में Open करके

यहां हम दोनों तरीकों से File को Read करना बता रहे है। पहले तरीके में DOS Prompt पर जाने के लिए Turbo C के File menu में जाएं और वहां Dos Shell नाम का Option Choose करें। इस Option को Choose करते ही हम Temporarily Dos Prompt पर चले जाते हैं। यहां निम्न Command देकर File के Data को देखा जा सकता है:

        C:\TC\BIN> Type Data.nam      

इस  Command से Data File में Stored सभी Data Screen पर Print हो जाते हैं।

अब हम दूसरे तरीके से Data File के Data को Read करते हैं। इस तरीके में एक Program लिखना होगा। उस प्रोग्राम में Data File को Reading Mode में Open करके] उसके Data को Character By Character Screen पर Print करना होगा। यानी जो काम हमने Data Input के लिए किया है ठीक उसका उल्टा अब हमें वापस Data प्राप्त करने के लिए करना होगा।

इसके लिए सर्वप्रथम हमें Data.nam नाम की Data File को Reading Mode में Open करना होगा। फिर उस File के प्रथम Character को Read करके उस Character को Screen पर Print करना होगा। फिर यही क्रम दूसरे character के साथ अपना कर उसे Screen पर Print करना होगा और ये क्रम तब तक अपनाना होगा, जब तक कि Program Control को EOF प्राप्त ना हो जाए। चलिए, अब हम इसी क्रम में Program लिखने की कोशिश करते हैं।

सर्वप्रथम I/O Operations के लिए stdio.h नाम की header file को प्रोग्राम में Include करते हैं। यानी #include<stdio.h> फिर main() लिख कर Statement Block में एक FILE Structure का Pointer Variable *fp Declare करते हैं और Character को Accept करने के लिए एक char प्रकार का Variable ch Declare करते हैं। यानी

        FILE *fp;

        char ch;

Screen पर पहले से यदि कोई Matter लिखा हो, तो उसे साफ करने के लिए clrscr(); लिखते हैं। अब Data.nam नाम की Data File जिसे Read करना है, Reading Mode में Open करते हैं और इस File का Base Address FILE Structure के Pointer Variable fp को देते है। यानी

        fp=fopen(“Data.nam”, “r” );

अब while Loop लेते हैं और इसी Loop में एक getc() Function द्वारा Data.nam File के Characters को Read करके Read किये गए Character को ch नाम के Variable में Store करते हैं और Loop को तब तक चलाते हैं, जब तक कि ch में EOF ना आ जाए। यानी

        while((ch = getc(fp)) != EOF );

अब getc() Function द्वारा File Structure से प्राप्त Character जो कि Variable ch में Stored हैं, को Standard Output VDU या Screen पर Print कर देते हैं। यानी

        putc( ch, stdout );

अंत में Open की गई File को Close करते हैं। यानी

        close(fp);

और Output दिखाते समय Screen तब तक :की रहे] जब तक कि हम कोई Key press ना करें, इसके लिए getch(); Statement लिखते हैं। अब main() Function के Statement Block को बंद करते हैं। इन सभी Statements को जिस क्रम में बताया गया है उसी क्रम में लिख लेने पर Program निम्नानुसार होता है:

// Program
#include<stdio.h>

main()
{
	FILE *fp;
	char ch;
	clrscr();

	fp = fopen ("Data.nam", "r" );

	while((ch = getc(fp)) != EOF )
		putc( ch, stdout );

	fclose(fp);
	getch();
}

यदि हम दो Program ना लिख कर ये चाहें कि पहले प्रोग्राम में ही Data Inputting के बाद Data किस प्रकार Input हुए हैं, ये पता चल जाए तो हम दोनों Programs को मिलाकर निम्नानुसार लिख सकते हैं:

// Program
#include<stdio.h>

main()
{
	FILE *fp;
	char ch;
	clrscr();

	fp = fopen ("Data.nam", "w" );
	while((ch = getc(stdin))!= EOF )
		putc( ch, fp );
	fclose(fp);

	fp = fopen ("Data.nam", "r" );
	while((ch = getc(fp)) != EOF )
		putc( ch, stdout );
	fclose(fp);

	getch();
}

हम जितनी बार भी इस File को Execute करते हैं तो पुराना Data नए  Data पर Overwrite हो जाता है। यदि हम ये चाहें कि हमारा पुराना Data ज्यों का त्यों रहे और नया Data पुराने Data के बाद में File में Store हो, तो हमें हमारे Program में File को Writing Mode में Open ना करके Appending Mode में Open करना होगा। इसी Program में ये Change किया गया है और नया प्रोग्राम निम्नानुसार है। इस Program में पुराना Data ज्यों का त्यों रहता है और नया Data पुराने Data के बाद जुड जाता है:

// Program
#include<stdio.h>

main()
{
	FILE *fp;
	char ch;
	clrscr();

	fp = fopen ("Data.nam", "a+" );

	while((ch = getc(stdin))!= EOF )
		putc( ch, fp );

	fclose(fp);

	fp = fopen ("Data.nam", "r" );

	while((ch = getc(fp)) != EOF )
		putc( ch, stdout );

	fclose(fp);
	getch();
}

ध्‍यान दें कि यहां हमने Data.nam File को “a+” Mode में Open किया है। यदि हम चाहें तो “a+” को “+a” भी लिख सकते हैं। इससे Program में कोई Error नहीं आती है।

हमने हमारे Program में getc() Function का प्रयोग किया है। यदि हम चाहें तो इसके स्थान पर getchar() Function को भी प्रयोग किया जा सकता है। getchar() Function का कोष्‍ठक हमेंशा खाली ही रखा जाता है, क्योंकि ये Function getc(stdin) का ही एक Macro है यानी हम getc(stdin) का प्रयोग करें या getchar() का दोनों का काम एक ही है।

इसी प्रकार से putchar() Function को putc(stdout) के स्थान पर प्रयोग किया जा सकता है, क्योंकि ये putc(stdout) का Macro है। हम putc() Function या putchar() Function के स्थान पर printf() Function का प्रयोग करके भी Characters को Output में Print कर सकते हैं और scan() Function का प्रयोग Character को Accept करने के लिए भी कर सकते हैं। Read Write File in C – Wiki )

हम getc() के स्थान पर हम fgetc() Function का भी प्रयोग कर सकते हैं और putc() Function के स्थान पर fputc() Function का, getc() व putc() Function क्रमश: fgetc() Function व fputc() Function के Macro हैं। इस प्रकार से हमने हमारे प्रोग्राम में जहां भी getc() व putc() Function का प्रयोग किया है, वहां पर  क्रमश: fgetc() व fputc() Function को Replace कर दें, तो Program पर कोई फर्क नहीं पडेगा और Output वही प्राप्त होगा जो पहले प्राप्त हुआ था।

File Handling in C - fopen In C
Read Write Integer in File

C Programming Language in Hindi - BccFalna.com ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook  C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C Programming Language in Hindi | Page: 477 + 265 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE

Download All Hindi EBooks

सभी हिन्दी EBooks C, C++, Java, C#, ASP.NET, Oracle, Data Structure, VB6, PHP, HTML5, JavaScript, jQuery, WordPress, etc... के DOWNLOAD LINKS प्राप्‍त करें, अपने EMail पर।

Register करके Login करें। इस Popup से छुटकारा पाएें।