الأن كما قلنا يمكن أن نكتب بملف نصي (قراءة/كتابة/طريقة فتح/تموضع/مسح/غلق) غير الطريقة
الإجرائية المعتمدة في المقدمة الأولى !!
2- يمكن أن ننشأ أيضا ملف نصي (و ما الى ذلك) عن طريق المركبات التي توفرها لنا مكتبة Vcl
لخاصة بالدلفي :
* للقرائة نستعمل (طريقة التحميل المباشر) : LoadFromFile (يجب أن يكون الملف موجود
و الى سنتعرض لخطأ 'الملف غير موجود')
* للحفظ (طريقة التخزين المباشر) : SaveToFile (يجب أن يكون المسار صحيح و غير محمي
كما انه في حالة وجود الملف مسبقا سيتم الكتابة فوقه)
* هده المركبات على غرار TMemo , TRichEdit , TComboBox , TListBox (سواء lines/Itmes)
المهم مشتقة من صنف TStrings الذي سنراه في الجزء الثالث (بإذن الله)
فبنيتها تعتمد على مجموعه من الأسطر 'كنص' أو 'كمجموعة من العناصر' المهم من نمط String .
الان هدا مثال على كيفية التعامل مع الملفات النصية بإستخدام المركبات !!!
برنامج لحفظ ماكتبناه في Memo و نعيد تحميله لـ ListBox(مع إظافة مباشرة AddStrings)
الأن يمكنك الإستغناء على الدوال الجاهزة (Copy / Move /Rename/AssignFile) و تعمل دوال خاصة بك بالطريقتين ؟؟.
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) التي ستعطي للكود إستقرارية
أكبر .
كما نضيف زر أخر 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;
السلام عليكم
شكرا لكم على الدرس لقد نفذته بهذه الطريقة
PHP كود :
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) التي ستعطي للكود إستقرارية
[مع التبسيط والافاضة لو سمحت كى افهم قليلا
وشكرا
السلام عليكم
بارك الله فيك و شكرا على المحاولة الطيبة لكن :
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).
تفضل الدرس **** أن يفيدك ... بالتوفيق,,
السلام عليكم
والله موضوع شيق جدا ورائع
موفق ان شاء الله
انتظرنا مع الاسئلة..:p
بعد أن عرفنا ولو بطريقة سطحية على كيفية إنشاء (قراءة / كتابة) ملف نصي
فمن الأفضل ان نختم الجزء الأول بتطبيقات بسيطة ترسخ الفهم و عليه :
1- كيف يمكن أن تعمل دالتي CopyTo / MoveTo بالطريقة الأولى .
2- كيف يمكن أن نبحث عن كلمة ما في نص من Memo مثلا وعرضها .
3- كيف يمكننا إستغلال الصنف TStrings لعرض جميع محتويات مجلد ما مع خصائص بسيطة .
---------------------------------------------------------------------------------------------
بالتوفيق ,,, كما أني سأجهز الأمثلة مع صور توضيحية إن شاء الله.
ننتقل الأن الى النوع التاني من الملفات (الملفات التتابعية) ببساطة هي ملفات لا تعتمد على الأسطر في بينتها (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 (تموضع / بتر او قطع).
كتاب بسيط لتلخيص الدرس بصيغة Pdf
مرفق باول مشاركة
بالتوفيق ,,
[color="red"]tf6m
مبدع ورائع يا غالى
جزاك الله خيرا [/color]