اذهب إلى المحتوى
  • 0

كيف أطبع ملفًا ثنائيًا على الشاشة بعد ترتيبه بلغة سي؟

Tareq Khashaneh

السؤال

السلام عليكم 

اذا كان عنا ملف ثنائي(بلغة سي) أدخل عليه  المستخدم ارقام غير مرتبة ,كيف استطيع ان اطبع هذا الملف على الشاشة بحيث تكون الارقام مرتبة تصاعديا 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

نعم يمكننا فعل ذلك، أي يمكننا ترتيب الأرقام الموجودة بداخل الملف الثنائي، وللإشارة فالملف الثنائي هو ما يصطلح عليه بالانجليزية Binary file، حيث لن نستخدم مصفوفة كما يفعل البعض، بل سنتصفح الملف الثنائي وبالمقارنة مع آخر قيمة مقارنة فيه سيتم ترتيب قيمه-، ليتم إنشاء ملف مؤقت IndexTem  لنقل القيم المرتبة بداخله، كما يوضح الكود التالي:

void Sort()
{
	int StructureSize, Idx1, Idx2;

	FILE * binaryFile;
	binaryFile = fopen("Index.txt","rb+");
	index_type Index, IndexTemp;
	StructureSize = sizeof(Index);
	fseek(binaryFile, 0, SEEK_END);
	int fileSize = ftell(binaryFile);
	rewind(binaryFile);


	for (Idx1 = 0; Idx1 < fileSize; Idx1 += StructureSize)
	{
		for (Idx2 = 0; Idx2 < fileSize - StructureSize; Idx2 += StructureSize)
		{
			fread(&Index, StructureSize, 1, binaryFile);
			fread(&IndexTemp, StructureSize, 1, binaryFile);

			if (Index.id > IndexTemp.id)
			{
				fseek(binaryFile, -(StructureSize * 2), SEEK_CUR);
				fwrite(&IndexTemp, StructureSize, 1, binaryFile);
				fwrite(&Index, StructureSize, 1, binaryFile);
				fseek(binaryFile, -StructureSize, SEEK_CUR);
			}
			else
			{
				fseek(binaryFile, -StructureSize, SEEK_CUR);
			}
		}

		rewind(binaryFile);
	}

	fclose(binaryFile);
}
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...