• 0

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

السلام عليكم 

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

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 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);
}

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن