Files

موضوعنا اليوم عن الدوال المستخدمة مع الملفات أو Files والتي تستخدم لتخزين البيانات والتعامل معها.وفيما يلي جدول يحتوي علي الدوال الموجودة في لغة رينج وسنتناول  بعد ذلك شرح موجز لكل دالة وأمثلة توضيحية لكيفية الاستخدام.

Files Functions

(Read(filename

(Write(filename, c String

(Dir(cFolderPath

(rewind(file handle

(Rename(cOldFileName, cNewFileName

(fgetpos(file handle

(Remove(cFileName

(fsetpos(filehandle, Position handle

(fopen(cFileName, cMode

(clearerr(file handle

(fclose(file handle

(feof(file handle

(fflush(file handle

(ferror(file handle

(freopen(cFileName, cMode, file handle

(perror(c error message

()tempfile

(fgetc(file handle

()tempname

(fgets(file handle

(fseek(filehandle, nOffset, nWhence

(fputc(file handle, c char

(ftell(file handle

(fputs(file handle, c string

(fwrite(file handle, cString

(fexists(cFileName

(ungetc(file handle, character

(fread(file handle, nSize

(Read (filename

للقراءة من ملف موجود– عن طريق كتابة اسم الملف

 مثال توضيحي:                      

 # لقراءة الملف license.txt الموجود مباشرة في مسار هذا البرنامج
see read("license.txt")+nl
*/
وفي حالة قراءة ملف في مسار اخر غير مسار حفظ المشروع 
 ينبغي كتابة مسار تواجد الملف كما في المثال التالي 
 /*
see read("S:\anotherfile.txt")+nl

(Write (cFileName, cString

لكتابة سلسة حرفية في ملف – أو نسخ سلسلة حرفية من ملف الي اخر

ملحوظة1: في حالة عدم تواجد الملف يتم إنشاؤه.

ملحوظة2: عند عمل كتابة في ملف يتم حذف كل محتوياته أولا.

 مثال توضيحي:

#لادراج السلسلة النصية بطريقة مباشرة بداخل الملف
("see write("copy_file.txt" ,"Hello in Ring
introduction="The language is portable
"(Windows, Linux, Mac OS X, Android, etc.)
# ادراج السلسلة النصية بطريقة غير مباشرة
(write('file.txt',introduction
#قراءة الملف أولا ثم نسخ أو ادراج ما بداخله في ملف اخر
('ofile=read('file.txt
(see write('newFile.txt',ofile

(Dir (cFolderPath

عرض قائمة تحتوي على الاسم والنوع – الفولدر يأخذ نوع برقم 1 والملف يأخذ نوع برقم2

مثال توضيحي:

 تعرض هذه الدالة جميع الملفات والمجلدات */
عن طريق الاسم،والنوع(الرقم الخاص بكل نوع)
/* علي شكل قائمة تحتوي علي عنصرين:- الاول :الاسم والتاني: النوع
("mylist = dir("C:\Test
see mylist

 for x in mylist
 # في حالة أن العنصر التاني(النوع)=1
 if x[2]=1
 #يتم عرض العنصر الاول(الاسم) ويسمي مجلد
 see "Directory : " + x[1] + nl
 # في حالة أن العنصر التاني(النوع)=0
 else
 #يتم عرض العنصر الاول(الاسم) ويسمي ملف
 see "File : " + x[1] + nl      
 ok
next
(see "Files count : " + len(mylist

(Rename (cOldFileName, cNewFileName

لإعادة تسمية الملفات

مثال توضيحي:

#  يستبدل اسم الملف old_file  بالاسمnew_file
("rename("old_file.txt","new_file.txt

(Fopen (cFileName, cMode

كما هو موضح في الجدول التالي.  لفتح الملفات بتحديد الاسم و(Mode)

3.JPG

ملاحظة:

في حالة “r+”

  • عند عمل كتابة فقط، يتم الكتابة من بداية الملف، وإذا كان بداخلة سلسلة حرفيه يكتب من بداية الملف مع حذف مكان الحروف الجديدة.
  • عند عمل قراءة لملف بحجم معين ثم عمل كتابة -فعندها ينظر أولا لحجم الحروف الجديدة، فاذا تم اشغال الملف بكل الحجم لا يكتب شيئا وإذا لم يشغل الحجم كله يكتبه حتي وان كانت الكتابة الجديدة أكبر من الحجم المتبقي.
  • عند عمل قراءة مع كتابة، فاذا كان الملف خاليا يكتب جميع السلاسل الحرفية حتى وان زاد عن الحجم المراد قراءته ،واذ لم يكن خاليا  ينظر الي الحجم المراد قراءته، ويستمر في الكتابة من نهاية اخر حرف في الملف طالما أن هناك مزيد من الحجم المتبقي للقراءة.

في حالة “a+”

  • عند عمل كتابة فقط، يستمر الكتابة من نهاية أخر حرف في الملف.
  • وعند عمل قراءة مع كتابة ، فاذا كان الملف خاليا يكتب جميع السلاسل الحرفية حتى وان زاد عن الحجم المراد قراءته،واذ لم يكن خاليا  ينظر الي الحجم المراد قراءته، ويستمر في الكتابة من نهاية اخر حرف في الملف طالما أن هناك مزيد من الحجم المتبقي للقراءة.

مثال توضيحي:

6.png

(Fclose (file handle

لإغلاق الملف بعد القراءة والكتابة

(Remove (cFileName

لحذف الملفات

مثال توضيحي:

# فتح الملف
("+fp=fopen("newFile.txt", "w
#لاغلاق الملف بعد انشاؤه وفتحه
(fclose(fp
#  حذف الملف
("remove("newFile.txt
*/
 لحذف الملف المفتوح لابد من عمل اغلاق له أولا  

/*

(Freopen (cFileName, cMode, file handle

تستخدم لإعادة التوجيه (الخرج، الدخل، …) الي ملفات أو أجهزة أخري عن طريق

 مؤشر الملف(file handle).

ملحوظة: ال”Stream” عبارة عن مصدر أو مؤشر للبيانات سواء خرج أو دخل أو رسالة خطأ.

مثال توضيحي:

("+fp1=fopen("File.txt","w

(p2=freopen("newFile.txt","w+",stdout
*/
 تستخدم هذه الدالة لعمل فتح ملف مره اخري بعد دالة 
 fopenحتي وان لم يتم اغلاق الملف السابق 
/*
 #  كذلك تستخدم لتغيير الحالة mode للملف المفتوح
(freopen("newFile.txt","R+",stdout

() Tempfile 

 لإنشاء ملف مؤقتا ويتم حذفه تلقائيا بعد اغلاق streams

()Tempname

لأنشاء اسم للملف المؤقت ويكون مختلف عن باقي أسماء الملفات الموجودة.

#انشاء ملف مؤقتا
()fp = tempfile
#انشاء اسم تلقائيا للملف المؤقت
see tempname() + nl
#يتم حذف الملف المؤقت عند اغلاقه
(fclose(fp

(Fgetc (file handle

 للحصول على حرف من stream

(Fgets (file handle,nSize

للحصول على سطر بحجم معين من stream

    (Ftell (file handle

لمعرفة موضع الملف الحالي في  stream

(Rewind (file handle

للتوجه الي بداية الملف

مثال توضيحي:

("fp = fopen("data.txt","r
 # لقراءةحرف من بداية الملف
(r = fgetc(fp
see r+nl
         #لقراءة جميع الحروف في الملف
while isstring(r)=1
              #لتحديد موضع كل حرف في الملف
 (pos=ftell(fp
 see "At position " + pos +", character is " + r+nl
 (r = fgetc(fp
end

                 # للتوجه الي بداية الملف مره أخري
(rewind(fp
(pos=ftell(fp
see "pos: "+pos+nl
(fclose(fp

("fp = fopen("data.txt","r
see r+nl
(fclose(fp

(Fputc (file handle, c char

 لإضافة حرف الي stream

(Fputs (file handle, c string

 لإضافة سلسلة حرفية الي stream

مثال توضيحي:

("+fp=fopen("data.txt","r
                         # لوضع الحرف r من بداية الملف 
("fputc(fp,"r
(fp=freopen("data.txt","r+",stdout
                   #  لوضع الكلمةring من بداية الملف
("fputs(fp,"ring

(Fseek (file handle, nOffset, nWhence

لتحديد مكان الملف

الجدول التالي يوضح طريقة تحديد قيم nWhence:

2.JPG


مثال توضيحي:

                        ("+fp=fopen("s.txt","r
 # لازاحة مكانين من بداية الملف
(fseek(fp,2,0
                     #ثم اضافة سلسلة حرفية بحجم 20
(chars=fgets(fp,20
see chars+nl
                           #لازاحة مكان من نهاية الملف
(fseek(fp,1,2
         #ثم اضافة السلسلة الحرفية
("see fputs(fp,"the end of file
                          # للذهاب الي الموضع الحالي للملف فقط دون ازاحة
(fseek(fp,0,1
  #ثم اضافة السلسلة الحرفية
("see fputs(fp,"the beginning of file

 

(Fread (file handle, nSize

لقراءة حجم معين من ملف

(Fwrite (file handle, cString

لكتابة أو لاضافة سلسلة حرفية في ملف

مثال توضيحي:

("+fp = fopen("File.txt","r
r= fread(fp,30)+nl
see r

("see fwrite(fp," programming language
(fclose(fp

(Ungetc (file handle, character

لقراءته مرة أخري- لتخزين أو دفع حرف في buffer

مثال توضيحي:

("+fp = fopen("File.txt","r
             #لحفظ الحرف فيbufferوقراءته مرة ثانية
ungetc(fp,"*")+nl
see fread(fp,50)+nl
(fclose(fp

(Fexists (cFileName

للتحقق من وجود ملف عن طريق كتابة الاسم (بالمسار)

(Fflush (file handle

 لعمل ضخ للبيانات المخزنة في Buffer ثم مسحها بعد ذلك تلقائيا

مثال توضيحي:

("+fp = fopen("File.txt","r
      #الخرج يساوي 1 أي موجود
see fexists("File.txt")+nl

see fputc(fp,"H")+nl
see fputc(fp,"e")+nl
see fputc(fp,"l")+nl
see fputc(fp,"l")+nl
see fputc(fp,"o ")+nl

(see fflush(fp

(fclose(fp

(Feof (file handle

للتحقق من الوصول الي نهاية الملف

مثال توضيحي:

(“+fp=fopen(“file.txt”,”r
(x=fgetc(fp
while feof(fp)=0
see x
(x=fgetc(fp
end

(Fgetpos (file handle

للحصول على الملف في الموضع الحالي

(Fsetpos (file handle, Position handle)

لتوجيه المؤشر  الي موضع معين في الملف الحالي


وفيما يلي الدوال الخاصة بالأخطاء (Errors)

(Clearerr (file handle

لمسح الأخطاء الناتجة عن عدم وصول البيانات بطريقة صحيحة

(Ferror (file handle

للتحقق من وجود أخطاء

(Perror (c error message

لطباعة رسالة الخطأ


ومن هنا نختم هذه المقالة … والسلام عليكم ورحمة الله وبركاته

موقع اللغة:

 http://ring-lang.net

Advertisements

اترك رد

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s