ما هي الملفات و كيف نتعامل معها ؟؟
#11
الأن كما قلنا يمكن أن نكتب بملف نصي (قراءة/كتابة/طريقة فتح/تموضع/مسح/غلق) غير الطريقة
الإجرائية المعتمدة في المقدمة الأولى !!

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

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

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

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

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

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


الملفات المرفقة
.rar   TextFile02.rar (الحجم : 4.47 ك ب / التحميلات : 195)
I'M Fly Like A G6

الرد
#12
3- يمكننا الإستغناء أيضا عن المركبات الجاهزة و التي تمكننا من كتابة أو القراءة من ملف نصي !!
فإمتداد الملف لا يعني بالظرورة يدل على طبيعته ؟ كيف :

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

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

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

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

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

[صورة: 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.net');
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;


الملفات المرفقة
.rar   TextFile03.rar (الحجم : 12.34 ك ب / التحميلات : 156)
I'M Fly Like A G6

[-] كل من 1 user says قال شكرا ل TF6M على المشاركة المفيدة
  • zohirbgn
الرد
#13
السلام عليكم
شكرا لكم على الدرس لقد نفذته بهذه الطريقة
PHP كود :
procedure TForm1.SaveToClick(SenderTObject);
begin
  
List:=TStringList.Create;
  list.
Text:=memo1.Text;       //  حفظ محتوى المذكرة فى ملف نصى (المفكرة)
  
List.SaveToFile(Edit1.Text);
  List.
Free;
end;

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

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

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

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).

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


الملفات المرفقة
.rar   Try-Except-Finally-IoResult-Raise.rar (الحجم : 227 ك ب / التحميلات : 293)
I'M Fly Like A G6

[-] كل من 1 user says قال شكرا ل TF6M على المشاركة المفيدة
  • zohirbgn
الرد
#15
السلام عليكم
والله موضوع شيق جدا ورائع
موفق ان شاء الله
انتظرنا مع الاسئلة..:p
الرد
#16
بعد أن عرفنا ولو بطريقة سطحية على كيفية إنشاء (قراءة / كتابة) ملف نصي

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

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

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

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

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

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

الرد
#17
ننتقل الأن الى النوع التاني من الملفات (الملفات التتابعية) ببساطة هي ملفات لا تعتمد على الأسطر في بينتها (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 (تموضع / بتر او قطع).

[صورة: 45525.jpg]


الملفات المرفقة
.rar   SFile01.rar (الحجم : 11.51 ك ب / التحميلات : 146)
I'M Fly Like A G6

[-] كل من 1 user says قال شكرا ل TF6M على المشاركة المفيدة
  • zohirbgn
الرد
#18
كتاب بسيط لتلخيص الدرس بصيغة Pdf
مرفق باول مشاركة
بالتوفيق ,,
[-] كل من 1 user says قال شكرا ل TF6M على المشاركة المفيدة
  • ALKO
الرد
#19
بارك الله فيك
الرد
#20
[color="red"]tf6m

مبدع ورائع يا غالى

جزاك الله خيرا [/color]
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم