معالجة الملفات
| English | العربية |
|---|---|
| overwrite/ˌəʊvəˈraɪt/ | الاستبدال |
| APPEND/əˈpend/ | APPEND |
| temporary file/ˈtemprəri faɪl/ | ملف مؤقت |
لا يمكنك تغيير سطر واحد من ملف نصي
- يجب على برنامج تصحيح إملائي في وسط ملف عملاء. يبدو الأمر واضحاً: ابحث عن السطر، غيّرهُ، احفظ.
- تقريباً لا لغة تسمح لك بذلك. ملف النص هو تدفق من الأحرف، والاسم المصحح له طول مختلف عن الاسم القديم، لذا يجب تحريك كل بايت بعده.
- لذلك الإجابة القياسية هي عدم التعديل على الإطلاق: انسخ الملف بأكمله مع تغيير ذلك السطر أثناء المرور به، وضع النسخة محل الأصلية.
- هذه الدرس يغطي عمليات الملفات، ونمط النسخ من خلال التحديث، والحفوات التي تسبب أخطاء برمجية حقيقية.
العمليات
OPENFILE name FOR READ | WRITE | APPENDيفتح الملف. READ يفتح ملفاً موجوداً من البداية؛ WRITE ينشئه أو يستبدل ملفاً موجوداً؛ APPEND يفتحه ويضيف في النهاية.READFILE name, variableيقرأ السطر التالي.WRITEFILE name, valueيكتب سطراً واحداً.CLOSEFILE nameيغلقه.EOF(name)يكون TRUE عند الوصول إلى النهاية.- اختر أولاً هيكل الملف وطريقة الوصول: الملفات التسلسلية والمتتالية والعشوائية تخدم عمليات مختلفة. أمثلة النسخ المتعددة هنا تستخدم الوصول المتسلسل لتسجيلات النصوص.
- نمط قراءة ملف كامل يكون دائماً كالتالي:
OPENFILE "names.txt" FOR READ
WHILE NOT EOF("names.txt") DO
READFILE "names.txt", thisName
OUTPUT thisName
ENDWHILE
CLOSEFILE "names.txt"

افتح، استخدم، أغلق، في كل مرة
مسار الوصول إلى الملف
اتبع ملفاً من التخزين إلى البرنامج وعده بأمان.
ماذا تفعل فتح ملف للكتابة على المحتوى الحالي؟
تخلق WRITE الملف أو تستبدله. للحفاظ على المحتوى الحالي وإضافة المزيد، استخدم APPEND.
طابق كل عملية ملف بما تقوم به.
WRITE يستبدل، APPEND يضيف؛ EOF يحدد النهاية؛ تتوقف حلقة البحث مبكراً عند العثور على القيمة.
البحث في ملف
- للبحث، اقرأ سطرًا تلو الآخر وتوقف عندما يتم العثور على المستهدف. هناك شرطان مطلوبان:
WHILE NOT EOF(…) AND NOT found. - علم
foundمهم. بدونه يقرأ الحلقة الملف بأكمله حتى بعد التطابق، وهو أمر مضيع للموارد، ولا يوجد ما لاختباره لاحقاً للإبلاغ عن "غير موجود".
found ← FALSE
OPENFILE "names.txt" FOR READ
WHILE NOT EOF("names.txt") AND NOT found DO
READFILE "names.txt", thisName
IF thisName = target THEN
found ← TRUE
ENDIF
ENDWHILE
CLOSEFILE "names.txt"
عند البحث في ملف عن قيمة، عادةً ما يتضمن شرط الحلقة:
التوقف عند العثور عليها يتجنب قراءة باقي الملف بلا داعٍ.
لماذا تستخدم حلقة البحث في الملف WHILE NOT EOF AND NOT found؟ حدد جميع الخيارات الصحيحة.
يجب إغلاق كل ملف. الشرطان يتعاملان مع الخروج المبكر ونهاية الملف على التوالي.
التحديث: نمط الملف المؤقت
- نظرًا لأن ملف نصي لا يمكن تعديله في مكانه، فإن التحديث يستخدم ملف مؤقت.
- افتح الأصلي FOR READ وملف مؤقت FOR WRITE. اقرأ كل سطر بالتتابع؛ اكتبه إلى الملف المؤقت إما معدلاً أو دون تغيير.
- أغلق كلا الملفين، ثم استبدل الأصلي بالملف المؤقت.
- نفس النمط يقوم بكل شيء: لـ حذف سجل، تخطِ كتابة ذلك السطر؛ لـ إدراج واحد، اكتب السطر الجديد في النقطة المناسبة أثناء النسخ.
لتحديث ملف نصي عندما لا يمكن التحرير في المكان، يجب عليك:
نسخ كل سطر (معدل أو غير معدل) إلى ملف مؤقت، ثم استبداله بالأصلي.
رتب خطوات حذف سجل واحد من ملف نصي.
الخطوة الأخيرة هي التي يتركها المرشحون، وبدونها لم يحدث تغيير. نفس النمط يُستخدم لإدراج أو تعديل سجل.
مثال محلول: حذف سجل
- صف كيف يحذف برنامج سجلًا واحدًا من ملف نصي. [4]
- افتح الملف الأصلي للقراءة والملف المؤقت للكتابة.
- اقرأ كل سطر بالتتابع. إذا لم يكن السطر هو المراد حذفه، اكتبه إلى الملف المؤقت؛ إذا كان كذلك، فلا تكتبه.
- عند الوصول إلى نهاية الملف الأصلي، أغلق كلا الملفين.
- استبدل الملف الأصلي بالملف المؤقت. جميع الخطوات الأربع تحصل على الدرجات، والخطوة الأخيرة هي التي ينساها المرشحون عادةً.
برنامج يكتب 500 سجل ثم ينتهي دون إغلاق الملف، ومفقود آخر بضعة سجلات. لماذا؟
تُخزن الكتابة في ذاكرة مؤقتة للسرعة. إغلاق الملف يفريغ الذاكرة المؤقتة، وقد يحرر قيداً تنتظره برامج أخرى.
الحفوات
- نسيان إغلاق ملف: قد لا تُكتب البيانات المخزنة في الذاكرة المؤقتة أبدًا، لذا تختفي آخر السجلات، وقد يبقى الملف مقفلًا أمام البرامج الأخرى.
- فتح FOR WRITE بدلاً من APPEND المقصود: يتم تدمير محتويات القائمة الحالية بأكملها لحظة فتح الملف، قبل كتابة أي سطر.
- القراءة ما بعد EOF: اختبر
EOFقبل كل عملية قراءة، وليس بعدها. - المسارات الثابتة (Hard-coded paths): ضع اسم الملف في ثابت ليظهر مرة واحدة ويمكن نقل البرنامج.
نسيان إغلاق الملف قد يؤدي إلى فقدان الكتابات المؤقتة وحظر برامج أخرى — لذا يجب إغلاق الملف دائماً عند الانتهاء.
الإغلاق يفريغ البيانات المؤقتة إلى القرص ويحرر القيد — كتلة FINALLY مكان جيد لضمان ذلك.
لإضافة مدخلات اليوم إلى سجل يحافظ على تاريخه، افتح الملف FOR ____.
would WRITE تدمر كل المدخلات السابقة لحظة فتح الملف، قبل كتابة أي سطر.
مثال محلول: أي وضع
- برنامج يضيف معاملات اليوم إلى سجل مستمر يجب أن يحافظ على تاريخه. APPEND: WRITE would destroy every previous entry.
- برنامج ينتج تقريرًا جديدًا كل ليلة، مستبدلًا تقرير أمس. WRITE: إنشاء أو استبدال هو بالضبط ما هو مطلوب.
- برنامج يقرأ ملف إعدادات عند بدء التشغيل. READ.
- يُختار الوضع بناءً على ما يجب أن يحدث مع المحتويات الموجودة: حفظها وإضافتها إليها، أو تدميرها، أو تركها كما هي.
علامات ضائعة
- ينتهي نمط التحديث بـ استبدال الأصلي بالملف المؤقت. النسخ بدون تلك الخطوة النهائية لا يغير شيئًا.
- تحتاج حلقة البحث إلى كلا الشرطين،
NOT EOFوNOT found، وشيء للاختبار لاحقًا. - WRITE يستبدل؛ APPEND يضيف. اختيار خاطئ يدمر الملف لحظة الفتح.
- دائمًا
CLOSEFILE. اذكر السبب: قد تُفقد البيانات المخزنة في الذاكرة المؤقتة بخلاف ذلك.
لقد فهمت الأمر
OPENFILE … FOR READ | WRITE | APPEND، ثمREADFILEأوWRITEFILE، ثمCLOSEFILE؛EOFيتم اختبار قبل كل عملية قراءة- WRITE ينشئ أو يستبدل، APPEND يحتفظ بالمحتوى ويضيف في النهاية، READ يبدأ من البداية
- ابحث باستخدام
WHILE NOT EOF AND NOT found، حتى تتوقف الحلقة مبكرًا ويمكن الإبلاغ عن "لم يتم العثور" - حدّث بالنسخ عبر ملف مؤقت، كتابة كل سطر معدلاً أو دون تغيير، وتخطي سطر للحذف أو إضافة سطر للإدراج، ثم استبدال الأصلي