Download presentation
Presentation is loading. Please wait.
1
دستورهای خروجی بر اساس فايل عباسپور 1 دستور های ورودی-خروجی بر اساس استفاده از فايل File-based Input and Output
2
دستورهای خروجی بر اساس فايل عباسپور 2 مقدمه تاکنون در تمام دستورهای ورودی و خروجی از “*” استفاده می شد استفاده از “*” به معنی ورودی و خروجی اطلاعات از و يا به تجهيزات پيش فزض است در بسياری از موارد اينکار مناسب، پسنديده و يا امکان پذير نيست 1.ذخيره موقتی اطلاعات (intermediate results) 2.ذخيره مقدار متنابهی از اطلاعات 3.موقعی که خروجی يک برنامه موردنياز برای برنامه ديگر باشد 4.موقعی که اطلاعات خاصی به صورت تکراری مورد نياز باشد
3
دستورهای خروجی بر اساس فايل عباسپور 3 جهت ذخيره سازی اطلاعات از فايل هايي شبيه source file می توان استفاده کرد با استفاده از دستور FORMAT می توان به شکل دلخواهی اطلاعات را وارد نمود نام فايل را می توان با هر extension انتخاب تا توسط نرم افزار ديگری قابل باز خوانی باشد. فايلها به صورت Text هستند لذا با هر Editor مثل کامپايلر فرترن، MS Word و غيره قابل edit شدن هستند در برنامه هادسترسی به اين فايلها از طريق واحد های ورودی و خروجی Unit امکان پذير می شود به هر فايل يک شماره Unit Number می توان اختصاص داد لذا هر فايل در برنامه با آن شماره شناخته می شود در فرترن اين شماره می تواند از 1 تا 100 باشد.
4
دستورهای خروجی بر اساس فايل عباسپور 4 شماره واحد Unit Number برای دسترسی به يک فايل در داخل برنامه درواقع هر شماره، کانالی است که برنامه را به يک فايل يا يکی از تجهيزات جانبی متصل می کند UN می تواند يک INTEGER و يا يک عبارت محاسباتی با خروجی INTEGER باشد علامت “ * “ که مربوط به واحد های پيش فرض ( صفحه کليد و مونيتور) است بعضی از شماره ها به صورت پيش فرض به تجهيزات خاص اختصاص می يابد مثلاً 5 و 6 برای صفحه کليد و مونيتور ويا شماره 10 در سيستم های UNIX برای فايلی به نام fort10 اختصاص می يابد
5
دستورهای خروجی بر اساس فايل عباسپور 5 برای نوشتن در يک فايل و خواندن از يک فايل بايد از دستور WRITE و READ استفاده نمود هر فايلی که در برنامه مورد استفاده واقع می شود بايد توسط دستور 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]
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) از فايل 10 با فورمت 100 در اخر اگر خطايي در خواندن باشد کنترل به دستور شماره 10 می رود و متغير ios يک مقدار مثبت (بسته به سيستم) می گيرد، اگر خواندن با موفقيت انجام شود ios مقدار صفر می گيرد در اين دستور حتما اول UNIT و سپس FMT آورده می شود. بقيه موارد اختياری هستند
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]
8
دستورهای خروجی بر اساس فايل عباسپور 8 مثال PRINT*, I,J بر روی مونيتور WRITE (*,*) I,J بر روی مونيتور WRITE (6,*) I,J بر روی مونيتور WRITE (6,100) I بر روی مونيتوربا فورمت 100 WRITE (6,*,ERR=10) LINE WRITE (UNIT=file1,FMT=100,REC=recordnumber, ERR=10) newline
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”)
10
دستورهای خروجی بر اساس فايل عباسپور 10 لغات کليدی در Olist 1- STATUS= st St: می تواند يکی از حالت های زير را به خود بگيرد Old: برای فايل هايي که قبلا ايجاد شده اند برای فايل های ورودی Input file اگر در لحظه اجرای دستور open موجود نباشند پيام خطا صادر می شود NEW: برای فايل هايي که قبلاً وجود ندارند با اجرای اين دستور يک فايل جديد ايجاد می گردد اگر در لحظه اجرا فايلی با اين نام باشد پيام خطا صادر می شود
11
دستورهای خروجی بر اساس فايل عباسپور 11 REPLACE: اگر فايلی از قبل با اين نام موجود باشد آن را Delete و فايل جديدی با همان نام ايجاد می کند اطلاعات قبلی بر روی اين فايل از بين می رود ُSCRATCH: در اين حالت وقتی دستور Close اجرا شود فايل حذف می شود برای استفاده موقتی از اطلاعات در داخل برنامه UNKNOWN: برای فايل های خروجی بکار می رود اگر از قبل موجود باشد آنرا باز کرده و اگر موجود نباشد آنرا ايجاد و باز خواهد کرد
12
دستورهای خروجی بر اساس فايل عباسپور 12 2- ERR= Label همانطور که قبلاًً اشاره شد اگر در هنگام باز کردن فايل خطايي بروز کند کنترل به دستور با شماره Label می رود 3- IOSTAT=ivar در ارتباط با دستور ERR=Label می باشد. اگر در موقع باز کردن فايل خطايي بروز کند ivar به صورت زير مقدار می گيرد –اگر خطا بروز کند مقدار مثبت می گيرد –وقتی به انتهای فايل يا آخرين رکورد برسد مقداری منفی می گيرد –اگر دستور موفقيت آميز اجرا شود مقدار صفر
13
دستورهای خروجی بر اساس فايل عباسپور 13 مثال هايي از دستور OPEN OPEN (UNIT=10, FILE=‘data.out') OPEN (UNIT=11, FILE=‘data1.xls', & STATUS='NEW', ERR=10)....... 10 CONTINUE WRITE(6,*) 'Error opening file: data1.xls' OPEN (UNIT=12, FILE='student.records', STATUS='OLD', & ERR=20)........ 20 CONTINUE IF (ERR >= 0) THEN WRITE (6,*) 'Error opening file: student.records.' ENDIF STOP
14
دستورهای خروجی بر اساس فايل عباسپور 14 دستور بستن فايل ها Close با اين دستور اتصال برنامه با فايل مورد نظر در حين اجرای برنامه و يا در انتهای برنامه قطع می گردد. می توان با دستور Open ارتباط برنامه را با فايل ديگر و يا با همين فايل ولی با Option های ديگر بر قرار کرد اگر فايلی با دستور Close بسته شود و برنامه به هر دليلی قطع گردد اطلاعات موجود در فايل حفظ می شود فرم کلی: Close ([Unit=Unit_number], [ERR=label], & [STATUS=st]) St: می تواند Keep و يا Delete باشد. فايلی که به صورت SCRATCH باز شده است نمی تواند مقدار keep بگيرد
15
دستورهای خروجی بر اساس فايل عباسپور 15 مثال دستور Close CLOSE (10) CLOSE (UNIT=10, ERR=10) CLOSE (UNIT=NUNIT, STATUS='DELETE', & ERR=10)
16
دستورهای خروجی بر اساس فايل عباسپور 16 دستور های REWIND برگشت به اول رکورد در يک فايل BACKSPACE برگشت به يک رکورد قبل INCLUDE filename برای فايل هايي که حالت ورودی و خروجی ندارند حاوی عمدتاًً دستورات اعلان و ديگر دستورات غير اجرايي هستند
17
دستورهای خروجی بر اساس فايل عباسپور 17 مثال OPEN (UNIT=7, FILE=“test”, STATUS=“new”, IOSTAT& =m1, ERR=88) a=12.0;b=13.5c=14.7 WRITE (7,1) a, b, c 1 FORMAT (1x, 3f5.1) CLOSE (UNIT=7, STATUS=“keep”, IOSTAT =m2, & ERR=99) WRITE (*,2) 2 FORMAT (//, “file written successfully”) STOP 88 WRITE (6,3) m1 3 FORMAT (“Had trouble opening file, error code:”,I12) STOP 99 WRITE (6,4) m2 4 FORMAT (“Had trouble closing file, error code:”,I12) END
18
دستورهای خروجی بر اساس فايل عباسپور 18 با اجرای برنامه فايل test ايجاد می شود پس از اجرای برنامه در دايرکتوری اين فايل مشاهده خواهد شد اگر مجدداً برنامه را اجرا کنيد کنترل به دستور 88 می رود چون فايل test وجود دارد اگر در دستور CLOSE به جای keep از delete استفاده شود برنامه با مشکل مواجه نمی گردد اگر در دستور OPEN به جای NEW از Unknown استفاده شود چه تغييری حاصل می شود؟؟؟؟؟؟؟؟
19
دستورهای خروجی بر اساس فايل عباسپور 19 فایل پردازی در C File based Programming in C
20
دستورهای خروجی بر اساس فايل عباسپور 20 انواع فایل دودویی (باینری) –سرعت بالا (در مقایسه با پرینت) –حجم کمتر –امکان دسترسی تصادفی –حفظ امنیت داده ها متنی –امکان باز کردن در برنامه های ویرایش متنی مختلف –داده ها به دلخواه برنامه نویس مرتب می شوند –برای چاپ اطلاعات
21
دستورهای خروجی بر اساس فايل عباسپور 21 نحوه دستیابی به فایل ها دستیابی به یک فایل از طریق مراحل زیر –تعریف یک متغیر برای فایل –باز کردن فایل –خواندن و یا نوشتن در فایل –بستن فایل
22
دستورهای خروجی بر اساس فايل عباسپور 22 تعریف فایل استفاده از نوع داده ای به نام FILE –نوعی ساختار (زیر برنامه) است –در فایل سرآمد stdio.h اطلاعات موجود در ساختار FILE : –نام خارجی فایل (نام فایل در سیستم عامل) –نوع فایل (ورودی، خروجی، دودویی، متنی) –ادرس محل واسط بین برنامه و فایل –اشاره گر مکان فعلی فایل –وضعیت خطا ها در خواندن و نوشتن
23
دستورهای خروجی بر اساس فايل عباسپور 23 مراحل استفاده از فایل در برنامه 1.تعریف یک متغیر از نوع اشاره گر به ساختار فایل –مثال: FILE *inputFile; با این دستور متغیر inputFile که از نوع اشاره گر است به ساختار FILE تعریف می کند توجه: ازعملگر * برای تعریف اشاره گر استفاده می شود
24
دستورهای خروجی بر اساس فايل عباسپور 24 2- باز کردن فایل –استفاده از تابع fopen : FILE* fopen (char fileName[ ], char [ ]); ارگومان این تابع حاوی دو رشته نویسه ای بعنوان پارامتر های ورودی است و یک اشاره گر به فایل را بعنوان خروجی باز می گرداند fileName رشته نویسه ای است که نام خارجی فایل را مشخص می کند. این رشته می تواند علاوه بر نام فایل مسیر فایل را نیز مشخص کند مثال: “C:\\myletters\\letter.txt” به علامت\\ توجه شود!!!
25
دستورهای خروجی بر اساس فايل عباسپور 25 پارامتر mode در تابع fopen رشته نویسه ای که نحوه باز کردن فایل را نشان می دهد –متشکل از دو بخش بخش اول تعیین کننده عملیات قابل اجرا بر روی فایل (خواندن و یا نوشتن) بخش دوم تعیین کننده نوع فایل است (باینری b و متنی t ). پیش فرض t است (متنی) رشتهعمل قابل اجراتوضیحات rخواندنفایل باید از قبل موجود باشد wنوشتنفایل جدید ایجاد می شود. اگر باشد اطلاعات ان از بین می رود aافزودن به انتهااگر فایل نباشد ایجاد ، اگر باشد به انتها اضافه می کند r+خواندن و نوشتنفایل باید موجود باشد w+نوشتن و خواندنفایل جدید ایجاد می شود. اگر باشد اطلاعات ان از بین می رود a+افزودن و خواندناگر فایل نباشد ایجاد ، اگر باشد به انتها اضافه می کند
26
دستورهای خروجی بر اساس فايل عباسپور 26 مثال باز کردن فایل FILE *inputFile; inputFile=fopen (“letter.txt”, “rt”); در این مثال فایل letter.txt بصورت متنی برای خواند باز می شود. حال می توان با استفاده از inputfile داده هایی را از این فایل خواند مثال: FILE *itemFile; itemFile=fopen (“C:\\data\\items”, “w+t”);
27
دستورهای خروجی بر اساس فايل عباسپور 27 3- بستن فایل استفاده از تابع fclose بستن از طریق اشاره گر تعریف شده برای آن صورت می گیرد FILE *inputFile; ……… ………. fclose (inputFile); اگر فایل بسته نشود پس از خاتمه برنامه خود بخود بسته می شود. اگر برنامه به هر دلیلی قطع شود اطلاعات آن ممکن است ناقص و یا دچار اشکال شود
28
دستورهای خروجی بر اساس فايل عباسپور 28 4- ورودی و خروجی از فایل (خواندن و نوشتن) نوشتن بر روی فایل –استفاده از تابع fprintf با فرم کلی زیر fprintf (,, ); مثال: FILE *outPut; outPut=fopen (“data.txt”, “wt”); fprintf(outPut, " %d\n",grade);
29
دستورهای خروجی بر اساس فايل عباسپور 29 مثال نوشتن # include 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); } این برنامه میزان فروش شرکتی را در طی سال از طریق صفحه کلید دریافت و در یک فایل ذخیره می کند
30
دستورهای خروجی بر اساس فايل عباسپور 30 خواندن خواندن از روی فایل –استفاده از تابع fscanf با فرم کلی زیر fscanf (,, );
31
دستورهای خروجی بر اساس فايل عباسپور 31 مثال خواندن # include void main() { FILE *inFile; int sales, counter=0; float average=0.0 inFile= 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 دارای ارگومانی از نوع اشاره گر به فایل است در صورتی که اشاره گر به انتهای فایل برسد مقدار درست (غیر صفر) و در غیر اینصورت مقدار نادرست (صفر) را باز می گرداند
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.