برمجة الكمبيوتر - ملف الإدخال والإخراج i/O file

برمجة الكمبيوتر - ملف الإدخال والإخراج i/O file



يتم استخدام ملف الكمبيوتر لتخزين البيانات بتنسيق رقمي مثل نص عادي أو بيانات الصورة أو أي محتوى آخر. يمكن تنظيم ملفات الكمبيوتر داخل أدلة مختلفة. تُستخدم الملفات للاحتفاظ بالبيانات الرقمية ، بينما تُستخدم الأدلة للاحتفاظ بالملفات.

يمكن اعتبار ملفات الكمبيوتر بمثابة النظير الرقمي للمستندات الورقية. بينما البرمجة، عليك أن تبقي التعليمات البرمجية المصدر في ملفات نصية مع إضافات مختلفة، على سبيل المثال، ملفات البرمجة C مع نهاية التمديد .C ، جافا برمجة الملفات مع . JAVA ، وملفات بيثون مع .py .

إدخال / إخراج الملف

عادةً ما تقوم بإنشاء ملفات باستخدام برامج تحرير النصوص مثل notepad أو MS Word أو MS Excel أو MS Powerpoint وما إلى ذلك. ومع ذلك ، في كثير من الأحيان ، نحتاج إلى إنشاء ملفات باستخدام برامج الكمبيوتر أيضًا. يمكننا تعديل ملف موجود باستخدام برنامج كمبيوتر.

إدخال الملف يعني البيانات التي تتم كتابتها في ملف ويعني إخراج الملف البيانات التي تتم قراءتها من ملف. في الواقع ، ترتبط شروط الإدخال والإخراج بدرجة أكبر بإدخال وإخراج الشاشة. عندما نعرض نتيجة على الشاشة ، تسمى الإخراج. وبالمثل ، إذا قدمنا ​​بعض المدخلات لبرنامجنا من موجه الأوامر ، فإنه يسمى الإدخال.

في الوقت الحالي ، يكفي أن نتذكر أن الكتابة في ملف ما هي إدخال ملف وأن قراءة شيء ما من ملف هو إخراج ملف.

أوضاع تشغيل الملف

قبل أن نبدأ العمل مع أي ملف باستخدام برنامج كمبيوتر ، إما نحتاج إلى إنشاء ملف جديد إذا لم يكن موجودًا أو فتح ملف موجود بالفعل. في كلتا الحالتين ، يمكننا فتح ملف في الأوضاع التالية -

  • وضع القراءة فقط - إذا كنت ستقرأ ملفًا موجودًا فقط ولا تريد كتابة أي محتوى آخر في الملف ، فستفتح الملف في وضع القراءة فقط. توفر جميع لغات البرمجة تقريبًا بناء جملة لفتح الملفات في وضع القراءة فقط.

  • وضع الكتابة فقط - إذا كنت ستكتب إما في ملف موجود أو ملف تم إنشاؤه حديثًا ولكنك لا تريد قراءة أي محتوى مكتوب من هذا الملف ، فستفتح الملف في وضع الكتابة فقط. توفر جميع لغات البرمجة بناء الجملة لفتح الملفات في وضع الكتابة فقط.

  • وضع القراءة والكتابة - إذا كنت ستقوم بالقراءة والكتابة في نفس الملف ، فستفتح الملف في وضع القراءة والكتابة.

  • وضع الإلحاق - عند فتح ملف للكتابة ، فإنه يسمح لك ببدء الكتابة من بداية الملف ؛ ومع ذلك ، سيتم استبدال المحتوى الموجود ، إن وجد. لنفترض أننا لا نريد الكتابة فوق أي محتوى موجود ، ثم نفتح الملف في وضع الإلحاق. وضع الإلحاق هو في النهاية وضع كتابة ، والذي يسمح بإلحاق المحتوى في نهاية الملف. توفر جميع لغات البرمجة تقريبًا بناء جملة لفتح الملفات في وضع الإلحاق.

في الأقسام التالية ، سنتعلم كيفية فتح ملف جديد ، وكيفية الكتابة فيه ، وبعد ذلك ، كيفية قراءة وإلحاق المزيد من المحتوى في نفس الملف.

فتح الملفات

يمكنك استخدام وظيفة fopen () لإنشاء ملف جديد أو لفتح ملف موجود. سيؤدي هذا الاستدعاء إلى تهيئة كائن من النوع FILE ، والذي يحتوي على جميع المعلومات اللازمة للتحكم في التدفق. هذا هو النموذج الأولي ، أي توقيع استدعاء الوظيفة هذا -

FILE *fopen( const char * filename, const char * mode );

هنا ، اسم الملف هو عبارة عن سلسلة حرفية ، والتي ستستخدمها لتسمية ملفك ويمكن أن يكون لوضع الوصول إحدى القيم التالية -

الأب رقمالوضع والوصف
1

ص

يفتح ملف نصي موجود لغرض القراءة.

2

ث

يفتح ملف نصي للكتابة. إذا لم يكن موجودًا ، فسيتم إنشاء ملف جديد. هنا ، سيبدأ برنامجك في كتابة المحتوى من بداية الملف.

3

أ

يفتح ملف نصي للكتابة في وضع الإلحاق. إذا لم يكن موجودًا ، فسيتم إنشاء ملف جديد. هنا ، سيبدأ برنامجك في إلحاق المحتوى بمحتوى الملف الموجود.

4

ص +

يفتح ملفًا نصيًا لقراءة وكتابة كليهما.

5

ث +

يفتح ملف نصي للقراءة والكتابة. يقوم أولاً باقتطاع الملف إلى الصفر إذا كان موجودًا ؛ خلافًا لذلك ، يقوم بإنشاء الملف إذا لم يكن موجودًا.

6

أ +

يفتح ملف نصي للقراءة والكتابة. يقوم بإنشاء ملف ، إذا لم يكن موجودًا. ستبدأ القراءة من البداية ، لكن الكتابة يمكن إلحاقها فقط.

إغلاق ملف

لإغلاق ملف ، استخدم الوظيفة fclose () . النموذج الأولي لهذه الوظيفة هو -

 int fclose( FILE *fp );

و fclose () ترجع الدالة صفر على النجاح، أو EOF ، طابع خاص، إذا كان هناك خطأ في إغلاق الملف. تقوم هذه الوظيفة بالفعل بمسح أي بيانات لا تزال معلقة في المخزن المؤقت إلى الملف ، وتغلق الملف ، وتحرر أي ذاكرة مستخدمة للملف. EOF هو ثابت محدد في ملف الرأس stdio.h .

هناك العديد من الوظائف التي توفرها مكتبة C القياسية لقراءة وكتابة ملف حرفًا بحرف أو في شكل سلسلة ثابتة الطول. دعونا نرى القليل منهم في القسم التالي.

كتابة ملف

فيما يلي أبسط وظيفة لكتابة الأحرف الفردية إلى تيار -

int fputc( int c, FILE *fp );

تكتب الدالة fputc () قيمة حرف الوسيطة c إلى تدفق الإخراج المشار إليه بواسطة fp . تقوم بإرجاع الحرف المكتوب عند النجاح ، وإلا إذا كان هناك خطأ EOF . يمكنك استخدام الوظائف التالية لكتابة سلسلة منتهية بقيمة خالية إلى دفق -

int fputs( const char *s, FILE *fp );

تكتب الدالة fputs () السلسلة s في الملف المشار إليه بواسطة fp. تقوم بإرجاع قيمة غير سالبة عند النجاح ، وإلا يتم إرجاع EOF في حالة حدوث أي خطأ. يمكنك أيضًا استخدام الوظيفة int fprintf (FILE * fp، const char * format، ...) لكتابة سلسلة في ملف. جرب المثال التالي -

#include <stdio.h>

int main() {
   FILE *fp;

   fp = fopen("/tmp/test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها ، فإنها تنشئ ملفًا جديدًا test.txt في دليل / tmp ويكتب سطرين باستخدام وظيفتين مختلفتين. دعونا نقرأ هذا الملف في القسم التالي.

قراءة ملف

فيما يلي أبسط وظيفة لقراءة ملف نصي حرفًا بحرف -

int fgetc( FILE * fp );

و fgetc () وظيفة يقرأ حرف من ملف الإدخال المشار إليه من قبل FP . القيمة المعادة هي قراءة الحرف ؛ أو في حال وجود أي خطأ، فإنها ترجع EOF . تتيح لك الوظيفة التالية قراءة سلسلة من الدفق -

char *fgets( char *buf, int n, FILE *fp );

تقرأ الوظيفة fgets () ما يصل إلى n - 1 حرفًا من دفق الإدخال المشار إليه بواسطة fp . يقوم بنسخ سلسلة قراءة في المخزن المؤقت BUF ، بإلحاق اغية حرف لإنهاء السلسلة.

إذا واجهت هذه الوظيفة حرفًا جديدًا في السطر '\ n' أو EOF قبل أن يقرأوا الحد الأقصى لعدد الأحرف ، فإنها ترجع فقط الأحرف المقروءة حتى تلك النقطة بما في ذلك حرف السطر الجديد. يمكنك أيضًا استخدام int fscanf (FILE * fp، const char * format، ...) لقراءة سلاسل من ملف ، لكنها تتوقف عن القراءة بعد مواجهة أول حرف مسافة.

#include <stdio.h>

main() {

   FILE *fp;
   char buff[255];

   fp = fopen("/tmp/test.txt", "r");
   fscanf(fp, "%s", buff);
   printf("1 : %s\n", buff );

   fgets(buff, 255, (FILE*)fp);
   printf("2: %s\n", buff );
   
   fgets(buff, 255, (FILE*)fp);
   printf("3: %s\n", buff );
   fclose(fp);
}

عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها ، فإنها تقرأ الملف الذي تم إنشاؤه في القسم السابق وتنتج النتيجة التالية -

1 : This
2 : is testing for fprintf...

3 : This is testing for fputs...

دعنا نحلل ما حدث هنا. أولاً ، تقرأ طريقة fscanf () هذا لأنه بعد ذلك ، واجهت مسافة. الاستدعاء الثاني هو fgets () ، والذي يقرأ السطر المتبقي حتى يواجه نهاية السطر. أخيرًا ، يقرأ النداء الأخير () السطر الثاني تمامًا.

ملف الإدخال / الإخراج في جافا

توفر Java مجموعة أغنى من الوظائف للتعامل مع إدخال / إخراج الملف. لمزيد من المعلومات حول هذا الموضوع ، نقترح عليك مراجعة دروس Java التعليمية.

هنا ، سنرى برنامج Java بسيطًا ، وهو مكافئ لبرنامج C الموضح أعلاه. سيقوم هذا البرنامج بفتح ملف نصي ، وكتابة بضعة أسطر نصية فيه ، وإغلاق الملف. أخيرًا ، يتم فتح الملف نفسه ثم قراءته من ملف تم إنشاؤه بالفعل. يمكنك محاولة تنفيذ البرنامج التالي لرؤية الإخراج -

import java.io.*;

public class DemoJava {
   public static void main(String []args) throws IOException {
      File file = new File("/tmp/java.txt");
      
      // Create a File
      file.createNewFile();
      
      //  Creates a FileWriter Object using file object
      FileWriter writer = new FileWriter(file); 
      
      // Writes the content to the file
      writer.write("This is testing for Java write...\n");
      writer.write("This is second line...\n");
      
      // Flush the memory and close the file
      writer.flush();
      writer.close();
      
      // Creates a FileReader Object
      FileReader reader = new FileReader(file); 
      char [] a = new char[100];
      
      // Read file content in the array
      reader.read(a);
      System.out.println( a );
      
      // Close the file
      reader.close();
   }
}

عند تنفيذ البرنامج أعلاه ، فإنه ينتج النتيجة التالية -

This is testing for Java write...
This is second line...

ملف الإدخال / الإخراج في بايثون

يعرض البرنامج التالي نفس الوظيفة لفتح ملف جديد ، وكتابة بعض المحتوى فيه ، وأخيراً قراءة نفس الملف -

# Create a new file
fo = open("/tmp/python.txt", "w")

# Writes the content to the file
fo.write( "This is testing for Python write...\n");
fo.write( "This is second line...\n");

# Close the file
fo.close()

# Open existing file
fo = open("/tmp/python.txt", "r")

# Read file content in a variable
str = fo.read(100);
print str

# Close opened file
fo.close()

عندما يتم تنفيذ الكود أعلاه ، فإنه ينتج النتيجة التالية -

This is testing for Python write...
This is second line...