الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مساعدة في load من ملف ( File Processing )

مغلق
بدأه مجلـد جديـد في 16 يونيو 2007 · 2 رد · 383 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

هذي الدالة تقوم بعمل Load من ملف .dat يحمل بيانات الى متغير char* .

هذي هي محتويات الملف .dat :

17abdullah sa ds xx

الرقم الأول يمثل عدد الحروف والباقي يمثل الكلمة المحفوظة التي اريد عمل load لها و اسنادها الى المتغير char*

وهذي هي الدالة التي تقوم بعمل Load :

void Sentence::load()
{
	char* fileName = new char[ 10 ];
	cout <<"Input file name( less than 10 characters, e.g., f_name.dat ): ";
	cin.getline( fileName, 10 );

	ifstream inFile( fileName, ios::in );

	if ( !inFile )
		cerr <<"File could not be opened!\n";
	else
		{

		inFile >> length;


		delete [] sentencePtr;
		sentencePtr = new char[ length ];

		inFile >> sentencePtr;

		}
}

المتغير الذي أريد ان اسند اليه الكلمة هو sentencePtr وهو مؤشر .

المشكلة الآن ان الدالة لا تقوم بعمل Load بالشكل المطلوب ، فتقوم باسناد الكلمات الى sentencePtr وعندما تصل الى مسافة تتوقف ولا تأخذ ما بعدها !

ارجو ان اجد الحل ، وهل لو استخدمت string بدلا من char* بيتغير الوضع ؟ وكيف اقوم بذلك خاصة وان هناك مسافات بين الكلمات في ملف .dat .

تم تعديل هذه المشاركة بواسطة مجلـد جديـد في 16 يونيو 2007 في 14:31

#2

وهذا مثال على ال output ، وكما تلاحظون ان ما بعد كلمة abdullah لم يتم اسناده :

Input file name( less than 10 characters, e.g., f_name.dat ): te.dat
Length: 17
Sentence: abdullah
Press any key to continue . . .
#3

بعد التغيير والمحاولة اشتغل البرنامج ولله الحمد :)

void Sentence::load()
{
	char* fileName = new char[ 10 ];
	cout <<"Input file name( less than 10 characters, e.g., f_name.dat ): ";
	cin.getline( fileName, 10 );

	ifstream inFile( fileName, ios::in );

	if ( !inFile )
		cerr <<"File could not be opened!\n";
	else
		{
		//int length;
		inFile >> length;


		string sentenceValue;
		getline( inFile, sentenceValue ); //cin.getline( buffer, bufferSize );

		delete [] sentencePtr;
		sentencePtr = new char[ length + 1 ];

		sentenceValue.copy( sentencePtr, length, 0 );
		sentencePtr[ length ] = '';
		}
}

هذا الموضوع مغلق.

مواضيع مشابهة