الكاتب: phenix
نعلم جيدا أن Delphi لم يكتف باستغلال ملفات قواعد البيانات فقط، ولكنه يتجاوزها إلى جميع أنواع الملفات الأخرى، بدأً بالملفات النصية Text files، ملفات الصور بمختلف أنواعها، ملفات الإعدادات Ini files، إلى ملفات النظام ... إلى ملفاتك الخاصة التي تقترح أنت شكلها وتنظيمها.
ما سنتعرف عليه بإذن الله، هو كيفية استغلال الملفات بصفة عامة في Delphi.
1-كيف نقرأ ملفا ؟
لنفرض أنك تريد أن تقرأ كتابا، فإنك إما ستقرؤه:
- حرفا حرفا؛
- سطرا سطرا؛
-أو جزءاً جزءاً.
كذلك Delphi، يٌمكّنك من قراءة الملفات:
- بالبايت (Byte)؛
- بالسطر (Line)؛
- بالرزمة (Packet).
الفرق يكمن في سرعة القراءة والكتابة، فالقراءة بالرزمة أسرع من القراءة بالسطر. لكن أساس اختيار أسلوب القراءة أو الكتابة يرجع غلى طبيعة الملف الذي تعمل عليه وفيما تستخدمه، فمثلا ربما يفضل أن تقرأ ملفات الإعدادات (INI, INF...) سطرا سطرا لتتعرف على المتغيرات وقيمها.
2- الاستعمال الآمن للملفات
لابد من التحقق من ظروف الأمان للملفات أثناء استغلالها، فذلك ضروري لضمان عدم ضياع البيانات أو محتويات الملف أو إتلاف الملف بأكمله إثر استعمال خاطئ أو غير حذر.
لكن احتمال الخطأ وارد بشدة وقد لا يمكن الإحاطة بجميع الحالات الخاصة التي قد تحدث أخطاء تشكل خطرا على ملفاتنا، لذلك توكل مهمة مراقبة الأخطاء ببساطة لـ Delphi.
لتشغيل المراقبة التلقائية للأخطاء، يكفي أن تضع التعليمة التالية في برنامجك:
{$I+}
وبالتأكيد بإمكانك الاستغناء عنها متى شئت كما يلي:
{$I-}
بهذه الطريقة سيعلمك Delphi بالأخطاء إثر حدوثها عن طريق تعليمة الحالة الاستثنائية: EInOutError.
3-القراءة بشكل خطي
نفهم من القراءة بشكل خطي أي سطرا سطرا أن الملف نصي، لذلك نسمي متغيرا لملف نصي كما يلي:
var
F:textfile;
يعتبر F المتغير المنطقي الذي سنتعامل معه أثناء البرمجة، والذي سوف نصله بملف حقيقي:
assignfile(F,opendialog.filename);
حيث FileName يمثل المسار الكامل للملف. مثل: C:/mydocs/file.txt
والذي نسطتيع الحصول عليه عن طريق الخاصية FileName لـ OpenDialg مثلا.
ملاحظة
يجب أن نتأكد من وجود الملف
بعدها، علينا إعداد الملف بأن نذهب إلى بدايته:
reset(F);
الآن بإمكاننا قراءة الملف سطرا سطرا باستعمال التعليمة الشهيرة : readLn التي نعين لها مصدر القراءة وهو الملف المنطقي وتعيد محتوى السطر الذي تقرؤه في متغير من نوع String. نكرر هذه العملية إلى غاية نهاية الملف (EOF)
حيث: EOF هي وضيفة منطقية (Boolean) تقبل متغير وحيدا هو الملف المنطقي F الذي نعمل عليه.
var
Form1: TForm1;
F: TextFile;
Line: String;
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if OpenDialog.Execute then
begin
{$I+}
AssignFile(F,OpenDialog.FileName);
Reset(F);
while not EOF(F) do
begin
ReadLn(F,Line);
Memo1.Lines.Add(Line);
end;
CloseFile(F);
{$I-}
end;
end;
4-الكتابة بشكل خطي
لن تتغير أشياء كثيرة بالنسبة للكتابة، سنحافظ على المتغيرات ماعدا OpenDialog سنعوضه بـ SaveDialog.
لإعداد الملف للكتابة يجب استعمال
rewrite(F);