ورودی و خروجی کاراکترها


برای نوشتن یک کاراکتر در فایل ,از توابع ()putc و ()fputc استفاده می شود. عملکردهای این دو تابع یکسان است .تابع ()putc در گونه های جدید c و ()fputc در گونه های قدیمی c وجود داشته است .سرعت تابع ()putc از تابع ()fputc بیشتر است . الگوی تابع ()putc به صورت زیر است :

;(اشاره گر فایل , کاراکتر )putc

برای خواندن کاراکترها از فایل ,می توان از دو تابع ()getc و ()fgetc استفاده نمود. این دو تابع نیز یکسان اند . تابع ()fgetc در گونه های قدیمی c و ()getc در گونه های جدید c وجود دارد . سرعت اجرای تابع ()getc از تابع ()fgetc بیشتر است .لذا از تابع ()getc استفاده می شود . الگوی این تابع به صورت زیر است :

char ch ;

ch = getc (اشاره گر فایل);

نکته :

وقتی کاراکترهایی بر روی فایل نوشته می شوند, باید مکان بعدی ,که کاراکتر آتی در آنجا قرار می گیرد مشخص باشد. همچنین وقتی که کاراکترهایی از فایل خوانده می شوند باید مشخص باشد که تاکنون تا کجای فایل خوانده شده است و کارکتر بعدی از کجا باید خوانده شود . برای این منظور ,سیستم از یک متغیر به نام موقعیت سنج فایل استفاده می کند که با هر دستور خواندن و یا نوشتن بر روی فایل ,مقدار این متغیر به طور اتوماتیک تغییر می کند, تا موقعیت فعلی فایل را مشخص نماید. در هنگام خواندن داده ها از فایل باید بتوان انتهای فایل را تست نمود ,یعنی در برنامه باید بتوان این تست را انجام داد که اگر در حین خواندن داده ها از فایل, موقعیت سنج فایل به لنتهای فایل رسید دستور خواندن بعدی صادر نگردد.دو روش برای این کار وجود دارد:

روش اول : در حین خواندن داده ها از فایل متنی ,پس از رسیدن به انتهای فایل ,تابع ()getc یا ()fgetc علامت EOF را برمی گرداند .لذا در هنگام خواندن داده ها از فایل متنی می توان آنقدر به عمل خواندن ادامه داد تا اینکه کاراکتر خوانده شده برابر با EOF شود.

while  ( (ch = getc(fp) ) ) != EOF {…}

روش دوم: تابع ()feof برای تشخیص انتهای فایل های باینری و متنی استفاده می شود. اگر اشاره گر فایلی که ()feof به آن اشاره می کند به انتهای فایل رسیده باشد ,این تابع ارزش درستی وگرنه ارزش نادرستی را برمی گرداند.

;(اشاره گر فایل)feof

ورودی و خروجی رشته ها


برای نوشتن رشته ها در فایل از تابع ()fputs و برای خواندن رشته ها از فایل از تابع ()fgets استفاده می شود:

 ;( اشاره گر فایل , رشته کاراکتری)fputs

;(اشاره گرفایل , متغیر رشته ای)fgets

نحوه عمل تابع ()fgets به این صورت است که ,از ابتدای فایل شروع به خواندن می کند تا به انتهای یک خط برسد و  یا رشته ای با طول مشخص شده را از فایل بخواند. بر خلاف تابع ()gets در تابع ()fgets کاراکتری که انتهای خط را مشخص می کند جز رشته ای خواهد بود که این تابع از فایل می خواند .یعنی تابع ()gets خود ENTER را در رشته قرار نمی دهد اما تابع ()fgets خود ENTER را نیز در رشته قرار خواهد داد.

ورودی و خروجی همراه با فرمت


برای نوشتن داده ها در فایل یا خواندن داده ها در فایل با فرمت خاص از دو تابع ()fprintf و ()fscanf  استفاده می شود .این دو تابع دقیقا کار توابع  ()printf و ()scanf را در ورودی و خروجی معمولی صفحه نمایش انجام می دهند. این توابع در سرفایل stdio.h قرار دارند و به صورت زیر به کار می روند :

;(پارامترها,”رشته کنترلی”,اشاره گر فایل)fprintf

;(پارامترها,”رشته کنترلی”,اشاره گر فایل)fscanf

اشاره گرفایل ,اشاره گری است که مشخص می کند اعمال این توابع باید بر وری چه فایلی انجام شود.

رشته کنترلی مشخص می کند که داده ها (پارامترها) باید با چه فرمتی نوشته یا خوانده شوند.

بازگشت به ابتدای فایل


در حین کار با فایل ها (نوشتن اطلاعات بر روس آن ها و یا خواندن اطلاعات از آن ها) برای برگشت به ابتدای فایل (تغییر “موقعیت سنج فایل”, به طوری که به ابتدای فایل اشاره کند) باید فایل را بسته و مجددا آن ار باز کرد .شاید در فایل هایی که فقط به عنوان خروجی و یا فقط به عنوان ورودی باز می شوند ,نیاز به برگشت به ابتدای فایل احساس نشود. ولی این امر در مورد فایل های ورودی و خروجی یک نیاز ضروری است .برای این منظور , از تابعی به نام ()rewind استفاده می گردد.

الگوی تابع ()rewind که در فایل stdio.h قرار دارد به صورت زیر است:

;(اشاره گرفایل)rewind

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *