المشاركات

عرض الرسائل ذات التصنيف التدفقات والملفات في سي بلس بلس

ملخص التدفقات والملفات في ++C

صورة
  عرضنا في المقالات السابقة بإيجاز التدرج الهرمي لفئات التدفقات , وبينا كيف يمكن التعامل مع أخطاء الإدخال والإخراج , ثم بينا كيف يمكن فتح ملف والتعامل معه بأكثر من فئات مختلفة , وعلي وجه الخصوص الفئات ofstream للإخراج , ifstream للإدخال و fstream لهما معا وتستخدم الدوال المنتمية لهذه الفئات أو للفئة الأساسية لها لإجراء العديد من الوظائف المتعلقة بالملفات من ذلك الدوال <<, put(), write() للإخراج و >>, get(), read() للإدخال . وتعمل الدالتان read(), write() في النمط الثنائي بحيث يمكن تخزين كافة الكائنات علي القرص بصرف النظر عن ما هيه البيانات التي تتضمنها فيمكن تخزين كائن وحيد أو مصفوفة من كائنات أو أي هيكل للبيانات لعدة كائنات , ويمكن إجراء عمليات الإدخال والإخراج بدوال منتمية علي مستوي الكائنات , أو علي مستوي الفئات الأساسية ذاتها باستخدام دوال استاتيكية . وبعد كل عملية علي ملف يجب إجراء اختبار حدوث للخطأ ويأخذ كائن الملف ذاته قيمة صفرية حين حدوث ذلك . وفي نفس الوقت توجد دوال للكشف عن أخطاء محددة . كما بينا كيفية زيادة تحميل مؤثر الاستخلاص >> ومؤثر الإيلا...

معاملات سطر الأوامر في ++C

صورة
معاملات سطر الأوامر ما لم تكن مستخدما للويندوز بصفة دائمة , فأنت علي دراية بمعاملات سطر الأوامر , والتي بها تشغل البرامج من محث الدوس . فهي تستخدم أساس لإدخال اسم ملفات البيانات للتطبيقات . فمثلا يمكنك فتح ملف من برنامج علي النمط التالي : c> wordprc afile.doc هنا يعتبر afile.doc معاملا لسطر الأوامر . كيف نجعل برامج السي++ تشغل من سطر الأوامر ؟ إليك البرنامج التالي الذي يتمتع بهذه الميزة . comline.cpp   // comline.cpp // demonstrates command-line arguments #include <iostream.h> #include <conio.h>   void main( int argc, char * argv[] ) { cout << "\nargc = " << argc;   for ( int j=0; j<argc; j++) cout << "\nArgument " << j << " = " << argv[j]; getche(); } وإليك مثال للحوار مع البرنامج من سطر الأوامر : c>comline uno dos tres arge = 4 Argument 0 = c:\pp\chapter4\comline.exe Argument 1 = uno Argument2 = dos Argument3 = tres...

إعادة التوجيه في ++C

صورة
البرامج التالية يتم تشغيلها من محث الدوس يمكن كتابة وقراءه بيانات للملفات عن طريق كل من cin , cout والمعرفين أصلا ليتعاملا مع الشاشة ولوحة المفاتيح . ولكن هذان الكائنان قابلين أيضا لإعادة التوجيه لكي تمثل ملفا لقرص . وإعادة اللغة ذاتها , ومن المثير أن نري كيف يعمل . إليك أولا البرنامج التالي . redir.cpp   // redir.cpp // demonstrates redirection // syntax: redir <source >destination #include <iostream.h> #include <iomanip.h> // for resetiosflags() #include <conio.h>   void main() { char ch; while ( !cin.eof() ) // quit on EOF { cin >> resetiosflags(ios::skipws) // keep whitespace >> ch; // read from std input cout << ch; // send to std output } getche(); } وقد أبطلنا عمل الراية skipws حيث إن الوضع الابتدائي للكائن cin هو تجاوز المسافات البيضاء , والتي تتضمن ا...

الذاكرة ككائن للتدفق في ++C

صورة
الذاكرة ككائن للتدفق يمكننا أن نعامل مساحة معينة من الذاكرة ككائن تدفق ندخل فيها بيانات بالضبط كما نفعل مع ملف , وهي إمكانية مفيدة في حالة الرغبة في تشكيل الخرج علي صورة معينة (كأن تخرج الأعداد بعددين عشريين فقط) , ولكنك تريد أيضا أن تستخدم الدوال المخرجة للنصوص التي تتطلب عبارات نصية كمدخلات . هذا المطلب شائع بالنسبة للواجهات الرسومية GUI . وهناك عائلة من فئات التدفقات تتعامل مع هذا النوع من التشكيل داخل الذاكرة فللخرج لدينا الفئة ostrstream المشتقة من ostream (مع أشياء أخري ) , وللإدخال لدينا istrsteam المشتقة من istream ولكائنات الذاكرة لدينا strstream المشتقة من iostream للإدخال والإخراج . والشئ الغالب أن تحتاج إلي ostream وفي مثالنا نبين لك كيف يكون ذلك . سوف نبدأ بإنشاء ذاكرة مرحلية للبايتات , ثم كائن منتم إلي ostrsteam مستخدمين الذاكرة المرحلية buff وحجمها كمعاملين لبادئة التدفق . والأن يمكننا إخراج النص المهيأ إلي الذاكرة المرحلية كما لو كان كائنا لتدفق , وإليك صياغة البرنامج . ostrstr.cpp   // ostrstr.cpp // writes formatted data into memory   ...

زيادة تحميل مؤثرات الإدخال والإخراج في ++C

صورة
زيادة تحميل مؤثرات الإدخال والإخراج ننتقل الأن إلي موضوع أخر متعلق بالتدفقات , زيادة تحميل مؤثري الإدخال والإخراج , وهي أداة من الأدوات القوية للسي++ , فيها يمكنك أن تشكل إخراج الكائنات التي عرفتها علي الصورة الملائمة لها مباشرة دون أن تتجشم عبء دالة مخصوصة للإظهار , علي غرار الدالة display() التي كانت قاسما مشتركا في كافة برامجنا المتعلقة بالمسافات الإنجليزية . ويبين لك البرنامج التالي هذه الإمكانية . englio.cpp   // englio.cpp // overloaded << and >> operators // UCS Laboratories   #include <iostream.h> #include <conio.h>   class Distance // English Distance class { private : int feet; float inches; public : Distance() // constructor (no args) { feet = 0; inches = 0.0; } Distance( int ft, float in ) // constructor (two args) { feet = ft; inches = in ; } friend istream& operator >> (is...

مؤشرات الملفات في ++C

صورة
مؤشرات الملفات كل كائن لملف يتضمن رقمين , يسميان " مؤشر القراءة ومؤشر الكتابة get pointer , put pointer " , كما قد يسميا current get position موضع القراءة الحالة " , و current put position " موضع الكتابة الحالي " , أو اختصارا current position " الوضع الحالي " يحدد الرقمان بداية القراءة والكتابة . والوضع الغالب للقراءة هي من أول الملف إلي نهايته , أما الكتابة فقد يقصد أن تكون من بداية الملف بحيث تمحو الكتابة الجديدة القديمة , أو من نهاية الملف , وذلك في حالة الإلحاق حيث تفتح الملف مستخدمين البتة ios::app . ولكن قد تثور الحاجة لتحديد موضع معين للكتابة أو للقراءة عندئذ نريد التحكم في مؤشرات الموضع , عندئذ نستخدم الدوال التي تمكننا من ذلك , وهي الدالتان seekg(),tellg() , وseekp(), tellp() للكتابة , كما سوف نشرح فيما يلي . تحديد المواضع قدمنا لمثال لتحديد بالدالة seekg() عن طريق معامل وحيد , يحدد الموضع في بداية الملف . ولهذه الدالة حالة أخري , يكون لها معاملان , أحدهما يحدد مسافة يقال لها " الإزاحة offset " والثاني يحدد النقطة المنسوب ...