أهلا ومرحبا بكم مرة أخرى.
في هذه المحاضرة ، سأقدم عرضًا توضيحيًا لتحدينا
السابق ، وهو طباعة محتوى الملف بترتيب عكسي.
لذلك ستحتاج إلى فهم طريقة Fseek وطريقة Fseek.
دعنا نطرح قوالب الكود ، ودعنا ننشئ مشروعًا جديدًا.
وسيكون هذا المشروع تطبيق وحدة التحكم.
سنقوم فقط بتسمية
محتويات الملفات المطبوعة
بالعكس.
وسننشئ أولاً ملفًا يحتوي على بعض البيانات الفارغة لأننا
نحتاج إلى القراءة منه. لذلك سأعود إلى دليل التنزيلات الخاص بي ، حيث توجد
مشاريع كتل التعليمات البرمجية الخاصة بي.
وسأذهب إلى المشروع الذي
قمت بإنشائه للتو
، والذي يسمى محتويات ملف الطباعة.
لذا فهي هنا. سأقوم فقط بإنشاء ملف جديد ، ملف نصي.
سنقول وثيقة نصية جديدة. سنقوم بتسميته اختبار. نص.
ثم بالداخل هنا ، سأقوم بالترحيب
العادي ، اسمي جيسون
، كيف حالك ، أنا بخير.
وما سيفعله هذا ، سأحفظه ، ثم نبدأ في طباعة النهاية.
لذلك يجب أن تطبع enif space gniod وما إلى ذلك حتى تصل إلى البداية.
لذا سنعود إلى كتل التعليمات البرمجية ، وسنحتاج
إلى تضمين IO القياسي الخاص بنا لأنه يحتوي
على جميع وظائفنا. سنقوم بإنشاء ثابت
، تعريف في هذه الحالة.
وهذا سيطلق عليه اسم الملف ، وسوف يطلق عليه اختبار. نص.
وسأحتاج إلى إنشاء مؤشر ملفي أولاً ، بحيث تكون جميع الأحرف الكبيرة
FILE star fp ، وسأقوم بضبط ذلك على قيمة خالية ، قم بتهيئته.
وبعد ذلك سأقوم أيضًا بإنشاء عدَّادَين
وشيء لتمثيل ما تم إرجاعه - سأحمل العداد للحلقة الخاصة
بي ثم عدد البايتات الفعلية
التي تم إرجاعها من ftell.
لذا سأقول أن العد يساوي صفرًا ثم متغير
التحكم في الحلقة إلى I يساوي صفرًا.
سأقوم بعمل طبيعتي. أحتاج إلى فتح ملفي. سأقول fp يساوي fopen
، وسأمرر اسم الملف. سأمر في القراءة فقط حتى r.
سأتأكد من أن هذا ليس فارغًا. لذا سأقول إذا كان fp يساوي صفرًا
، فسأعيد سالب 1.
خلاف ذلك ، سأسعى إلى نهاية الملف.
لذلك أريد أن أفعل fseek.
سأقوم هنا باستدعاء وظيفة fseek.
هذا سيغير الموضع الذي أشير إليه. سأقوم بتمرير مؤشر الملف الخاص بي.
سأقوم بتمرير الصفر للمعامل الثاني.
بالنسبة للمعامل الثالث ، سأقول البحث حتى النهاية.
لذلك سأستخدم هذا البحث المستمر.
وسيؤدي ذلك إلى ضبط مؤشر الملف الخاص بي على نهاية fp
، وهو اختبار. نص.
بمجرد وصولي إلى النهاية ، أريد ضبط العداد الفعلي
على ما يشير إليه. لذلك أريد أن أعود إلى ما أنا عليه الآن.
لذا سأقوم هنا بالحصول على موضع مؤشر الملف.
وقد قام fseek بالفعل بتغيير الموضع
، لذا فإنه يحرك مؤشر الملف إلى نهاية الملف.
لذا أنقلها أولاً ثم أحصل على المنصب. يمكنني الحصول على الموقف باستخدام ftell.
بالنسبة لـ ftell ، فإنه يعيد الموضع ، لذلك سيتم تخزينه
في حساب وسأقول إن f count يساوي f tell ثم تمريره في مؤشر الملف.
بمجرد أن أحصل على الموضع ، يمكنني بعد ذلك كتابة حلقة while
التي تنص على الانتقال من الموضع أو العداد وهو متغير التحكم في الحلقة حتى النهاية.
لذلك يمكنني القول هنا بينما أنا أقل من العد لأنني أريد
أن أقرأ كل شيء بشكل أساسي من النهاية إلى البداية.
وهكذا في الداخل هنا ، أريد أن أقول زيادة متغير I الخاص بي.
ثم أريد أن أسعى لتغيير المكان الذي أنتقل إليه. لذلك أريد أن أقول fseek
، وأريد أن أشير إلى fp.
أريد أن أشير إلى سلبي أنا لأنني ذاهب من
الخلف إلى البداية ، وأريد أن أقول البحث عن نهاية.
إذن سالب I سيكون عدد البايتات من النهاية.
لذلك تمكنت أولاً من الانتقال إلى النهاية
ثم أريد تغيير موقفي حتى أتمكن من البدء في القراءة في كل شخصية.
بمجرد أن أسعى بالفعل إلى النهاية ، يمكنني حينئذٍ فقط
طباعة الشخصية وقراءة الشخصية
وطباعتها. لذلك يمكنني هنا أن أقول النسبة
المئوية c ، وبعد ذلك يمكنني أن أقول fgetc ومؤشر
الملف الخاص بي.
مرة أخرى ، ما أفعله هنا في السطر 22 أو السطر 19 ، أولاً ، أقوم بتحريك
المؤشر إلى النهاية.
ثم أحصل على العداد الخاص بي لأن ذلك سيخبرني كم من الوقت يجب أن أقرأ في كل بايت
باستخدام ftell.
ثم ستنتقل حلقة while الخاصة بي من الصفر إلى أن يتم العد
، كم عدد البايت الذي أريد أن أقرأ فيه.
في السطر 26 ، سأقوم بزيادة العداد.
سأقوم بعد ذلك بالسعي إلى عدد البايتات العديدة من
النهاية ، وهي ناقص I من النهاية. وبعد ذلك السطور 28 ، سأقرأ بهذه الشخصية وأطبعها.
وهذا هو المنطق الرئيسي للبرنامج.
الأشياء الأخرى الوحيدة التي يجب أن أفعلها هي أنني أريد طباعة سطر تغذية
في النهاية ، فقط لتسهيل القراءة. أريد إغلاق مؤشر الملف الخاص بي.
لذلك أريد أن أقول fp ، ثم أريد فقط العودة
، وربما أريد تعيين fp يساوي null.
لذا دعونا نحاول تجميع هذا ، ونأمل أن ما
سنراه هو طباعة الملف بترتيب عكسي.
نحن لا نغير محتويات الملف ، بل نقرأه
فقط من النهاية إلى البداية باستخدام وظائف الوضع الخاصة بنا.
لذلك عند تشغيل هذا ، يجب أن نرى العكس
أو الترتيب العكسي. وما ستلاحظه هنا هو أننا نرى الترتيب العكسي.
لذلك نقوم أولاً بطباعة الملف الأخير.
وإذا طرحنا هذا الملف في دليل التنزيلات الخاص
بنا ، فستلاحظ أنه
يتم طباعته كمخرجات.
إنها تطبع enif space
gniod وما إلى ذلك.
السطر الأخير الذي تم طباعته هو مرحبًا ، اسمي جيسون في الاتجاه المعاكس.
لذلك فهو مجرد برنامج صغير أنيق سيستخدم
مؤشرات الملفات للبدء في النهاية ثم الانتقال
إلى البداية وطباعة المحتويات بترتيب عكسي.
لذا لاحظ كيف نستخدم fseek ، لاحظ كيف نستخدم ftell.
يقوم Fseek بتحريك مؤشر الملف ، ويحصل ftell في الواقع
على مكانك في موقع الملف.
الآن يمكنك استخدام العد للذهاب إلى الاتجاه المعاكس.
ثم مرة أخرى ، استخدم سالب I لتوضيح عدد البايتات من النهاية
و fgetc بمؤشر ملف.
سأقدم شفرة المصدر هذه كحل ، ويمكنك مقارنتها والنظر إليها وتحليلها
بمزيد من التفصيل. أتمنى أن يكون هذا قد ساعد. شكرًا لك.