المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : ما هي الملفات و كيف نتعامل معها ؟؟


TF6M
19-03-2009, 05:11 PM
مقدمــــــــــة

متى نبدأ في برمجة برنامج جاد سنحتاج بالتأكيد إلى تخزين أو حفظ للمعلومات
بصفة دورية أو بصفة خفية لا نحتاج من المستخدم أن يتطلع عليها !!,,
هناك 3 أصناف لمختلف أنواع الملفات ؟؟ يمكنك ملاحظتها إنطلاقا من بيئة نظام
التشغيل الذي تعتمده .. فمهما كان نوع و طبيعة الإمتداد (*.*) فإن طبيعة الملف

لا يمكن أن تكون سوى :
1- ملف نصي (Text File)
2- ملف تتابعي (Sequential File)
3- ملف من دون نمط (File No Type) أو (ملف Binary)

أمثلة و توضيحات بسيطة

ملفات نصية : تعتمد في تركيبها أو بنيتها على الأسطر (مجموعه من الأسطر Lines)
مثلا : Bat , Reg , Txt , Ini .... Ext

لكن : تعتبر أبسط شكل لملف ما ؟؟ لسهولة إستخدامها كما أنها لا تعتبر
مثالية للحفظ لأنه يمكن لأي كان التعديل على محتواها .

ملفات تتابعية : ذات بنية عبارة عن حقول Registration

مثلا : DB (جداول قاعدة بيانات مثلا)
لكن : تفرض علينا حيز ضيق أو محدود بالرغم من أن نقطة قوتها هي سلاسة التعامل
مع الحقول إلا أننا لا يمكننا أن نحفظ أو نكتب فيها متغيرات أو ثوابت من نوع :
الصنف (Class) , المؤشرات (Pointer) , الجداول الديناميكية (غير محدودة ذات قابلية للتغير في أي لحظة)


ملفات ثنائية : ذات بنية كتلية (Block) .
لكن : بدون إمتداد يمكن أن تكون أي شيء و أن تحتوى أي شيء .. فهي أصعب
ملف من حيث التعامل لكنها تعطيك الحرية المطلقة لكتابة أي شيء أو العكس !!
كما أنها إحترافية تتطلب عمل أكثر منك .. ههههه فهدا ثمن الحرية و القوة طبعا.

تحميل الدرس مع برنامج كمثال !!

بالتوفيق ,,

AL-MOB4RM3G
20-03-2009, 12:24 PM
بارك الله لك اخي الحبيب.ودرس مهم للغاية.
سؤال اكرمك الله، ملفات ال dll من اي نوع تصنّف ؟
هل هي من الملفات النصيا ام ؟
بارك الله لك

TF6M
20-03-2009, 03:15 PM
من الماكد أنها ليست نصية هل تستطيع أن تقوم بإنشاءها بواسطة Tstrings ؟؟ (جرب إفتح Dll بالنوت باد )
و هل تعتمد على حقول كأنماط الـ Record بالطبع لا ؟ لكن لبرمجتها نحتاج لـ Compilateur كالتي خاصة بالملفات
التنفيذية إذا هي ملفات Bin .

B.M.AbdelAziZ
20-03-2009, 04:14 PM
ملفات ال dll من اي نوع تصنّف ؟
هل هي من الملفات النصيا ام ؟
DLL مكتبات الربط الديناميكيةمثل EXE
باختصار كلاهما Module حيث EXE قابل للتنفيذ و DLL قابل للتحميل للذاكرة من طرف برنامج أخر

kachwahed
20-03-2009, 05:32 PM
السلام عليكم
بارك الله فيك tf6mehboul وفيكم جميعا.
موضوع رائع، في انتظار المزيد.
بالمناسبة ينصح الخبراء باستعمال تدفقات البيانات StreamFile لتخزين المعلومات، عوضا عن الإجراء AssignFile وأوامره، ويعتبرون أن هذه الأخيرة وسيلة تقليدية بقيت سارية المفعول لأغراض التوافق مع الإصدارات القديمة (Compatibility)، هل هذا صحيح؟ ولماذا؟

TF6M
20-03-2009, 05:43 PM
ينصح الخبراء باستعمال تدفقات البيانات streamfile لتخزين المعلومات، عوضا عن الإجراء assignfile وأوامره، ويعتبرون أن هذه الأخيرة وسيلة تقليدية بقيت سارية المفعول

الصنف tfilestream ما هو إلا تسهيل الوصول (قراءة كتابة و مايتضمنها؟) للملفات من الصنف التاني.

لكن و الشيء الجميل أنه ينتج ملف binary ؟؟.

kachwahed
20-03-2009, 06:59 PM
الصنف التاني
ماذا تقصد بالصنف التاني ؟

الذي أعرف، أنه ينحدر عن الصنف TFileStream مجموعة من الأصناف منها TStringStream و TMemoryStream ذات استعمالات مختلفة، ويوفر خصائص كثيرة وينتج مختلف الملفات على غرار Binary و Text و...، ومن أهم خصائصه توافقه مع العديد من المكونات حيث نجد الإجراء SaveToStream و LoadFromStream لحفظ واسترجاع البيانات، ومن عيوبه أنه بطيء التنفيذ عندما تكون حجم البيانات كبيرة.
والله أعلم.
بارك الله فيك أخي الكريم.

B.M.AbdelAziZ
20-03-2009, 08:28 PM
بالمناسبة ينصح الخبراء باستعمال تدفقات البيانات StreamFile لتخزين المعلومات، عوضا عن الإجراء AssignFile وأوامره، ويعتبرون أن هذه الأخيرة وسيلة تقليدية بقيت سارية المفعول لأغراض التوافق مع الإصدارات القديمة (Compatibility)، هل هذا صحيح؟ ولماذا؟
صحيح
Stream اسرع + اسهل + اعم (يمكن ان يكون ملف/اتصال/اي معلومات من اي مصدر...)

TF6M
21-03-2009, 12:04 AM
أخي الكريم أنا لم أقل أن كلامك خاطئ فلا تخلط بين الصنف المستعمل مع صنف الملف ؟

1- بنية الملف على حسب صنفه كما قلت الصنف الأول (text file) لا تعتبر مثالية و ما الى ذلك

2- tfilestream صنف يسهل لنا الولوج لملفات التعددية دات البينة (حقول) منها :

لنقل أن F من صنف tfilestream للكتابة /قراءة :

F.ReadBuffer
F.WriteBuffer

دون الحاجة لإعادة تعريف ملف من نمط : File Of TmayRecord مثلا ؟؟

و ما الى دلك لكتابة دوال و إجراءات تكفينا إعادة كتابة التعليمات كل مرة .

عندما اكمل الملفات النصية .... و انتقل للنوع التاني سأقوم بإستعمال الطريقتين :
AssigFile / TfileStream

إن شاء الله ,,

TF6M
21-03-2009, 12:11 AM
stream يعني نتعامل مع (ملف برنامج معلومة أو مجموعه معلومات ) ليس كمعرفات ؟؟ بل كبنية 110010

بطبيعة الحال ببساطة كـقيم Hex ل منها يعني : تعليمة .. معطيات .. عنوان يترجم من طرف الـ MICROCODE المدمج

في المعالج خاصة و أنها بعد القفزة من risc الى CISC في المعالجات الحديثة

RISC : Reduced instruction set computer

CISC : Complex Instruction set computer

TF6M
24-03-2009, 03:27 PM
الأن كما قلنا يمكن أن نكتب بملف نصي (قراءة/كتابة/طريقة فتح/تموضع/مسح/غلق) غير الطريقة
الإجرائية المعتمدة في المقدمة الأولى !!

2- يمكن أن ننشأ أيضا ملف نصي (و ما الى ذلك) عن طريق المركبات التي توفرها لنا مكتبة Vcl
لخاصة بالدلفي :
* للقرائة نستعمل (طريقة التحميل المباشر) : LoadFromFile (يجب أن يكون الملف موجود
و الى سنتعرض لخطأ 'الملف غير موجود')

* للحفظ (طريقة التخزين المباشر) : SaveToFile (يجب أن يكون المسار صحيح و غير محمي
كما انه في حالة وجود الملف مسبقا سيتم الكتابة فوقه)

* هده المركبات على غرار TMemo , TRichEdit , TComboBox , TListBox (سواء lines/Itmes)
المهم مشتقة من صنف TStrings الذي سنراه في الجزء الثالث (بإذن الله)

فبنيتها تعتمد على مجموعه من الأسطر 'كنص' أو 'كمجموعة من العناصر' المهم من نمط String .

الان هدا مثال على كيفية التعامل مع الملفات النصية بإستخدام المركبات !!!
برنامج لحفظ ماكتبناه في Memo و نعيد تحميله لـ ListBox(مع إظافة مباشرة AddStrings)

الأن يمكنك الإستغناء على الدوال الجاهزة (Copy / Move /Rename/AssignFile) و تعمل دوال خاصة بك بالطريقتين ؟؟.

TF6M
25-03-2009, 02:29 PM
3- يمكننا الإستغناء أيضا عن المركبات الجاهزة و التي تمكننا من كتابة أو القراءة من ملف نصي !!
فإمتداد الملف لا يعني بالظرورة يدل على طبيعته ؟ كيف :

- أي ملف من نمط TextFile (الجزء الأول) أو ناتج عن مركب (TStrings) فهو ملف نصي .

بما أننا إستخدمنا مركبات من صنف Tstrings فببساطة يمكننا الإستغناء عنها و العمل مباشرة بهذا الصنف !! (الذي يمكننا من الوصول الى الصنف المشتق TstringList) .

هذا مثال بسيط يوفر لنا حرية أكثر أمان أكثر حجم أقل لبرنامجنا :

procedure TForm1.SaveToClick(Sender: TObject);
var List:TStrings;
begin
List:=TStringList.Create;
List.Add('www.delphi4arab.com');
List.Add('TF6mehboul');
List.SaveToFile(Edit1.Text);
List.Free;
end;

في ما بعد سنتعلم كيفية تسير الاخطاء (Try/Except/Finally) التي ستعطي للكود إستقرارية
أكبر .

http://img264.imageshack.us/img264/5552/55143454.jpg

كما نضيف زر أخر Load الدي يقرأ من الملف المحفوظ أولا بالطبع لن أتحقق من وجوده لأنه مثال تعليمي .

List:=TStringList.Create;
List.LoadFromFile(Edit1.Text);
ShowMessage(List.Text);
List.Free;

سهل أليس كذلك .. هدا هو الكود كامل :

var List:TStrings;

procedure TForm1.SaveToClick(Sender: TObject);
begin
List:=TStringList.Create;
List.Add('www.delphi4arab.com');
List.Add('TF6mehboul');
List.SaveToFile(Edit1.Text);
List.Free;
end;

procedure TForm1.LoadClick(Sender: TObject);
begin
List:=TStringList.Create;
List.LoadFromFile(Edit1.Text);
ShowMessage(List.Text);
List.Free;
end;

abualmonther
25-03-2009, 08:56 PM
السلام عليكم
شكرا لكم على الدرس لقد نفذته بهذه الطريقة

procedure TForm1.SaveToClick(Sender: TObject);
begin
List:=TStringList.Create;
list.Text:=memo1.Text; // حفظ محتوى المذكرة فى ملف نصى (المفكرة)
List.SaveToFile(Edit1.Text);
List.Free;
end;

procedure TForm1.LoadClick(Sender: TObject);
begin
List:=TStringList.Create;
List.LoadFromFile(Edit1.Text); // القراءة والتعديل من ملف نصى
memo1.Text:=list.Text;
List.Free;
end;

في ما بعد سنتعلم كيفية تسير الاخطاء (try/except/finally) التي ستعطي للكود إستقرارية
[مع التبسيط والافاضة لو سمحت كى افهم قليلا
وشكرا

TF6M
25-03-2009, 11:37 PM
السلام عليكم

بارك الله فيك و شكرا على المحاولة الطيبة لكن :

1-أخي abualmonther أولا ملاحظة لماذا إستخدمت الـ Memo ؟؟

2- يمكنك كما في الجزء التاني من الدرس أن تحمل مباشرة دون اللجوء للصنف TStrings :

Memo1.Lines.LoadFromFile

Memo1.Lines.SaveToFile

مباشرة !!

3- في ما يخص طريقة تسيير الإعتراضات أو الأخطاء ... لدينا صيغتين :

Try
//1
Except
//2
End;

(1) نقوم بكتابة تعليمات لغرض التنفيذ .
(2) نقوم بكتابة تعليمات التي تنفذ في حالة وجود إعتراض لقسم التنفيذ الأول (1).

Try
//1
Finally
//2
End;

(1) نقوم بكتابة تعليمات لغرض التنفيذ .
(2) تنفذ تعليمات هذا القسم سواء كان هناك إعتراض أم لا !! (عامة تستخدم لمناهج الإنشاء
و التحرير : Create/Free).

تفضل الدرس **** أن يفيدك ... بالتوفيق,,

chehlet-le3youn
26-03-2009, 03:12 PM
السلام عليكم
والله موضوع شيق جدا ورائع
موفق ان شاء الله
انتظرنا مع الاسئلة..:p

TF6M
26-03-2009, 03:51 PM
بعد أن عرفنا ولو بطريقة سطحية على كيفية إنشاء (قراءة / كتابة) ملف نصي

فمن الأفضل ان نختم الجزء الأول بتطبيقات بسيطة ترسخ الفهم و عليه :

1- كيف يمكن أن تعمل دالتي CopyTo / MoveTo بالطريقة الأولى .

2- كيف يمكن أن نبحث عن كلمة ما في نص من Memo مثلا وعرضها .

3- كيف يمكننا إستغلال الصنف TStrings لعرض جميع محتويات مجلد ما مع خصائص بسيطة .

---------------------------------------------------------------------------------------------

بالتوفيق ,,, كما أني سأجهز الأمثلة مع صور توضيحية إن شاء الله.

TF6M
30-03-2009, 08:00 PM
ننتقل الأن الى النوع التاني من الملفات (الملفات التتابعية) ببساطة هي ملفات لا تعتمد على الأسطر في بينتها (Lines) لكن على حقول (REgistrations) كيف :

1- عن طريق تعريف نمط جديد (Record) و المتغيرات التابعة له تعامل على أساس حقول ! سيتوجب علينا برمجة دوال و إجراءات للتعامل معها .

2- عن طريق الصنف TFileStraem مع نفس الخطوة السابقة (نمط جديد) لكن من ناحية أسرع و أأمن .

كيف ... ؟ أولا نفوم بإنشاء "جدول " نمط جديد :

Type
TPersFile = Record
LName,FName :String [100]; // ( << 256 char)
Age : Byte;
Men : Boolean;
End;

رأيتم هنا إسم الجدول TPersFile له حقول (age,fname,lname,men) .

ثم نعرف ملف من هدا النمط و هادا ماميميز هدا الصنف من الملفات : File Of Type

الأن نعرف الملف من هدا النمط :

SPersFile = File Of TPersFile;

الأن ملاحظة بسيط : في الملفات النصية يجب علينا التأكد أولا من وجود الملف لنستطيع فتحه
بطريقة (للقراءة فقط) لكن هنا (الملفات التتابعية أو التنائية) لا يهم طبيعة أو طريقة فتح الملف !! .

هدا المثال الأول لم أشرحه لأن معظم التعليمات شرحتها سابقا في الملفات النصية فقط سنتعامل
الأن بدالتين : Seek/Truncate (تموضع / بتر او قطع).

http://img156.imageshack.us/img156/6633/45525.jpg

TF6M
03-08-2009, 01:41 AM
كتاب بسيط لتلخيص الدرس بصيغة Pdf
مرفق باول مشاركة
بالتوفيق ,,

BendaliSoftPro
12-08-2009, 01:55 PM
بارك الله فيك