دستور های ورودی-خروجی بر اساس استفاده از فايل

31
ل ي ا فاسر اس ب ی ج رو خ ورهای ت س د ور ت س ا ب ع1 اس ر اس ب ی ج رو خ-ر های ورودی و ت س د ل ي ا ف ده ار ا ف ت س اFile-based Input and Output

Upload: macaulay-velazquez

Post on 03-Jan-2016

76 views

Category:

Documents


0 download

DESCRIPTION

دستور های ورودی-خروجی بر اساس استفاده از فايل. File-based Input and Output. مقدمه. تاکنون در تمام دستورهای ورودی و خروجی از “*” استفاده می شد استفاده از “*” به معنی ورودی و خروجی اطلاعات از و يا به تجهيزات پيش فزض است در بسياری از موارد اينکار مناسب، پسنديده و يا امکان پذير نيست - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

1

دستور های ورودی-خروجی بر اساس استفاده از فايل

File-based Input and Output

Page 2: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

2

مقدمهتاکنون در تمام دستورهای ورودی و خروجی •

استفاده می شد“*”از به معنی ورودی و خروجی “*”استفاده از •

اطالعات از و يا به تجهيزات پيش فزض استدر بسياری از موارد اينکار مناسب، پسنديده •

و يا امکان پذير نيست (intermediate results)ذخيره موقتی اطالعات 1.ذخيره مقدار متنابهی از اطالعات2.موقعی که خروجی يک برنامه موردنياز برای برنامه 3.

ديگر باشدموقعی که اطالعات خاصی به صورت تکراری مورد 4.

نياز باشد

Page 3: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

3

جهت ذخيره سازی اطالعات از فايل هايي شبيه •source fileمی توان استفاده کرد

می توان به شکل FORMATبا استفاده از دستور •دلخواهی اطالعات را وارد نمود

انتخاب تا extension نام فايل را می توان با هر •توسط نرم افزار ديگری قابل باز خوانی باشد.

مثل Editor هستند لذا با هر Textفايلها به صورت • شدن edit و غيره قابل MS Wordکامپايلر فرترن،

هستنددر برنامه هادسترسی به اين فايلها از طريق واحد •

امکان پذير می شودUnitهای ورودی و خروجی می توان Unit Numberبه هر فايل يک شماره •

اختصاص دادلذا هر فايل در برنامه با آن شماره شناخته می •

شود باشد.100 تا 1در فرترن اين شماره می تواند از •

Page 4: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

4

Unit Numberشماره واحد برای دسترسی به يک فايل در داخل برنامه•درواقع هر شماره، کانالی است که برنامه را به •

يک فايل يا يکی از تجهيزات جانبی متصل می کند•UN می تواند يک INTEGER و يا يک عبارت

باشدINTEGER محاسباتی با خروجی که مربوط به واحد های پيش فرض “*عالمت “ •

) صفحه کليد و مونيتور( استبعضی از شماره ها به صورت پيش فرض به •

Yبرای 6 و 5تجهيزات خاص اختصاص می يابد مثال در سيستم 10صفحه کليد و مونيتور ويا شماره

اختصاص می fort10 برای فايلی به نام UNIX های يابد

Page 5: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

5

برای نوشتن در يک فايل و خواندن از يک فايل بايد • استفاده نمودREAD وWRITEاز دستور

هر فايلی که در برنامه مورد استفاده واقع می شود • باز و در اختيار برنامه قرار OPENبايد توسط دستور

گيرد برای فايل:READفرم کلی •

READ (clist) [I/O list] Clist :عبارت از

[UNIT=] unit-number, [FMT=] format-spec [,REC= record-number] [,IOSTAT=ios] [,ADVANCE=adv] [,SIZE=integer-variable] [,EOR=label] [,END=label] [,ERR=label]

Page 6: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

6

مثال

READ *,I,J از صفحه کليدREAD *,LINE از صفحه کليدREAD (*,*) A,B,C از صفحه کليدREAD (5,*) LINE از صفحه کليدREAD (5,100) X, Y, Z 100از صفحه کليد با فورمت READ (UNIT=10,FMT=100,ERR=10,IOSTAT=ios)

در اخر اگر خطايي در خواندن 100 با فورمت 10از فايل ios می رود و متغير 10باشد کنترل به دستور شماره

يک مقدار مثبت )بسته به سيستم( می گيرد، اگر خواندن با مقدار صفر می گيردiosموفقيت انجام شود

آورده می شود. FMT و سپس UNITدر اين دستور حتما اول بقيه موارد اختياری هستند

Page 7: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

7

دستور خروجی

WRITE (clist) [I/O list]

 where clist is defined as    

[UNIT=] unit-number,

[FMT=] format-spec

[,REC= record-number]

[,IOSTAT=ios]

[ADVANCE=adv]

[,SIZE=integer-variable]

[,EOR=label]

[,ERR=label]

Page 8: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

8

مثال

PRINT*, I,J بر روی مونيتورWRITE (*,*) I,J بر روی مونيتورWRITE (6,*) I,J بر روی مونيتورWRITE (6,100) I بر روی مونيتوربا فورمت

100WRITE (6,*,ERR=10) LINE

WRITE (UNIT=file1,FMT=100,REC=recordnumber, ERR=10) newline

Page 9: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

9

OPENدستور برای باز کردن و در اختيار برنامه گرفتن فايل •

هافرم کلی:•

OPEN (u, [olist] )u شماره اختصاص داده شده به فايل در دستور :

های ورودی و خروجی استفاده می شودWRITE (u,*) variables list

Olist تعدادی لغات کليدی که وضعيت فايل را: مشخص می کنند

OPEN(10) OPEN (UNIT=10) OPEN (UNIT=IFILE)OPEN (15, FILE=“output.test”)

Page 10: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

10

Olistلغات کليدی در 1- STATUS= st

St: می تواند يکی از حالت های زير را به خودبگيرد

Old: برای فايل هايي که قبال ايجاد شده اند• Input file برای فايل های ورودی • موجود نباشند openاگر در لحظه اجرای دستور •

پيام خطا صادر می شودNEW:

برای فايل هايي که قبالY وجود ندارند•با اجرای اين دستور يک فايل جديد ايجاد می گردد•اگر در لحظه اجرا فايلی با اين نام باشد پيام خطا •

صادر می شود

Page 11: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

11

REPLACE: آن را اگر فايلی از قبل با اين نام موجود باشد•

Delete و فايل جديدی با همان نام ايجاد می کند

اطالعات قبلی بر روی اين فايل از بين می •رود

hُSCRATCH: اجرا شود Close در اين حالت وقتی دستور •

فايل حذف می شودبرای استفاده موقتی از اطالعات در داخل •

برنامهUNKNOWN:

برای فايل های خروجی بکار می رود•اگر از قبل موجود باشد آنرا باز کرده و اگر •

موجود نباشد آنرا ايجاد و باز خواهد کرد

Page 12: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

12

2- ERR= Label همانطور که قبالYY اشاره شد اگر در هنگام •

باز کردن فايل خطايي بروز کند کنترل به می رود Labelدستور با شماره

3- IOSTAT=ivar می باشد. ERR=Label در ارتباط با دستور •

اگر در موقع باز کردن فايل خطايي بروز کند ivarبه صورت زير مقدار می گيرد اگر خطا بروز کند مقدار مثبت می گيرد–وقتی به انتهای فايل يا آخرين رکورد برسد –

مقداری منفی می گيرداگر دستور موفقيت آميز اجرا شود مقدار صفر –

Page 13: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

13

OPENمثال هايي از دستور OPEN (UNIT=10, FILE=‘data.out')

OPEN (UNIT=11, FILE=‘data1.xls', & STATUS='NEW', ERR=10)

.......10 CONTINUEWRITE(6,*) 'Error opening file: data1.xls'OPEN (UNIT=12, FILE='student.records',

STATUS='OLD', &ERR=20)........20 CONTINUEIF (ERR >= 0) THENWRITE (6,*) 'Error opening file: student.records.'ENDIFSTOP

Page 14: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

14

Closeدستور بستن فايل ها با اين دستور اتصال برنامه با فايل مورد نظر در حين •

اجرای برنامه و يا در انتهای برنامه قطع می گردد. ارتباط برنامه را با فايل Openمی توان با دستور •

های ديگر بر Optionديگر و يا با همين فايل ولی با قرار کرد

بسته شود و برنامه به هر Closeاگر فايلی با دستور •دليلی قطع گردد اطالعات موجود در فايل حفظ می

شودفرم کلی:•

Close ([Unit=Unit_number], [ERR=label], &[STATUS=st])

St می تواند :Keep و يا Delete باشد. فايلی که به باز شده است نمی تواند مقدار SCRATCHصورت

keep بگيرد

Page 15: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

15

Closeمثال دستور

CLOSE (10)

CLOSE (UNIT=10, ERR=10)

CLOSE (UNIT=NUNIT, STATUS='DELETE', & ERR=10)

Page 16: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

16

دستور های•• REWIND

برگشت به اول رکورد در يک فايل•• BACKSPACE

برگشت به يک رکورد قبل•• INCLUDE filename

برای فايل هايي که حالت ورودی و •خروجی ندارند

YY دستورات اعالن و ديگر • حاوی عمدتادستورات غير اجرايي هستند

Page 17: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

17

مثالOPEN (UNIT=7, FILE=“test”, STATUS=“new”, IOSTAT& =m1, ERR=88)a=12.0; b=13.5 c=14.7WRITE (7,1) a, b, c1 FORMAT (1x, 3f5.1)CLOSE (UNIT=7, STATUS=“keep”, IOSTAT =m2, & ERR=99)WRITE (*,2)2 FORMAT (//, “file written successfully”)STOP88 WRITE (6,3) m13 FORMAT (“Had trouble opening file, error code:”,I12)STOP99 WRITE (6,4) m24 FORMAT (“Had trouble closing file, error code:”,I12)END

Page 18: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

18

ايجاد می شودtest با اجرای برنامه فايل •پس از اجرای برنامه در دايرکتوری اين •

فايل مشاهده خواهد شداگر مجدداY برنامه را اجرا کنيد کنترل به •

وجود test می رود چون فايل 88دستور دارد

از keep به جای CLOSEاگر در دستور •delete استفاده شود برنامه با مشکل

مواجه نمی گردد از NEW به جای OPENاگر در دستور •

Unknown استفاده شود چه تغييری حاصل می شود؟؟؟؟؟؟؟؟

Page 19: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

19

در پردازی C فایل

File based Programming in C

Page 20: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

20

فایل انواع

• ( باینری ( دودویی– باال ) سرعت پرینت ( با مقایسه در– کمتر حجم– تصادفی دسترسی امکان– ها داده امنیت حفظ

• متنی– مختلف متنی ویرایش های برنامه در کردن باز امکان– شوند می مرتب نویس برنامه دلخواه به ها داده– اطالعات چاپ برای

Page 21: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

21

ها فایل به دستیابی نحوه

• زیر مراحل طریق از فایل یک به دستیابی– فایل برای متغیر یک تعریف– فایل کردن باز– فایل در نوشتن یا و خواندن– فایل بستن

Page 22: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

22

فایل تعریف

• نام به ای داده نوع از FILE استفاده– ( است ( برنامه زیر ساختار نوعی– سرآمد فایل stdio.h در

• ساختار در موجود : FILE اطالعات– ( عامل ( سیستم در فایل نام فایل خارجی نام– ( متنی ( دودویی، خروجی، ورودی، فایل نوع– فایل و برنامه بین واسط محل ادرس– فایل فعلی مکان گر اشاره– نوشتن و خواندن در ها خطا وضعیت

Page 23: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

23

برنامه در فایل از استفاده مراحل

1. ساختار به گر اشاره نوع از متغیر یک تعریففایل

– :مثال

FILE *inputFile;

متغیر دستور این گر inputFile با اشاره نوع از کهساختار به کند FILE است می تعریف

ازعملگر: می *توجه استفاده گر اشاره تعریف برایشود

Page 24: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

24

فایل -2 کردن باز– تابع از : fopen استفاده

FILE* fopen (char fileName[ ], char [ ]);

های پارامتر بعنوان ای نویسه رشته دو حاوی تابع این ارگومانباز خروجی بعنوان را فایل به گر اشاره یک و است ورودی

گرداند میfileName را فایل خارجی نام که است ای نویسه رشته

. فایل نام بر عالوه تواند می رشته این کند می مشخصمثال کند مشخص نیز را فایل :مسیر

“C:\\myletters\\letter.txt”

عالمت شود \\ به توجه !!!

Page 25: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

25

تابع mode پارامتر fopen در• نحوه که ای نویسه رشته

می نشان را فایل کردن بازدهد– بخش دو از متشکل

• کننده تعیین اول بخشروی بر اجرا قابل عملیات( نوشتن ( یا و خواندن فایل

• نوع کننده تعیین دوم بخشاست متنی b باینری) فایل و

t ). فرض ) t پیش متنی ( است

توضیحات قابل عملاجرا

رشته

موجود قبل از باید فایلباشد

خواندن r

. شود می ایجاد جدید فایلاز ان اطالعات باشد اگر

رود می بین

نوشتن w

اگر ، ایجاد نباشد فایل اگرکند می اضافه انتها به باشد

به افزودنانتها

a

باشد موجود باید فایل و خواندننوشتن

r+

. شود می ایجاد جدید فایلاز ان اطالعات باشد اگر

رود می بین

و نوشتنخواندن

w+

اگر ، ایجاد نباشد فایل اگرکند می اضافه انتها به باشد

و افزودنخواندن

a+

Page 26: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

26

فایل کردن باز مثال

FILE *inputFile;

inputFile=fopen (“letter.txt”, “rt”);

فایل مثال این برای letter.txt در متنی بصورت . از استفاده با توان می حال شود می باز خواند

inputfile خواند فایل این از را هایی داده:مثال

FILE *itemFile;

itemFile=fopen (“C:\\data\\items”, “w+t”);

Page 27: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

27

فایل -3 بستن

• تابع از fclose استفاده• می صورت آن برای شده تعریف گر اشاره طریق از بستن

گیردFILE *inputFile;……………….fclose (inputFile);

• بسته بخود خود برنامه خاتمه از پس نشود بسته فایل اگرشود .می

• است ممکن آن اطالعات شود قطع دلیلی هر به برنامه اگرشود اشکال دچار یا و ناقص

Page 28: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

28

و ( -4 خواندن فایل از خروجی و ورودینوشتن)

• فایل روی بر نوشتن– تابع از زیر fprintf استفاده کلی فرم باfprintf (<file-pointer>,<control string>,<variable-list>);

:مثال

FILE *outPut;

outPut=fopen (“data.txt”, “wt”);

fprintf(outPut, " %d\n",grade);

Page 29: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

29

نوشتن مثال # include <stdio.h>void main() {FILE *outFile;int i, n,sum;outFile= fopen ("sales.txt","wt");if (!outFile) {printf("can't open file");return;

} printf("enter the upper limit") ; scanf("%d", &n); sum=0; for (i=0;i<=n ; i++){ sum=sum+i fprintf(outFile, " %d\n",sum); } fclose (outFile); }

سال طی در را شرکتی فروش میزان برنامه اینکند می ذخیره فایل یک در و دریافت کلید صفحه طریق از

Page 30: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

30

خواندن

• فایل روی از خواندن– تابع از زیر fscanf استفاده کلی فرم باfscanf (<file-pointer>,<control string>,<variable-addres-list>);

Page 31: دستور های ورودی-خروجی بر اساس استفاده از فايل

فايل اساس بر خروجی دستورهایعباسپور

31

خواندن مثال# include <stdio.h>void main() {FILE *inFile;int sales, counter=0;float average=0.0inFile= fopen ("sales.txt",“rt");if (!inFile) {printf("can't open file"); return;

} printf(“calculation of average sale") ; while (!feof (inFile)) { average+=sales; counter++; fscanf(inFile,"%d", &sales); }

fclose (inFile);average/=counter;printf (“average= %f”, average); }

شود می اجرا نباشد موجود فایل اگر

است feofتابع فایل به گر اشاره نوع از ارگومانی دارایدرست مقدار برسد فایل انتهای به گر اشاره که صورتی در

( ) ( گرداند( می باز را صفر نادرست مقدار اینصورت غیر در و صفر غیر