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

استفسار حول الملفات العشوائية

مغلق
بدأه هشام سوبر في 29 مارس 2007 · 15 رد · 2,073 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ارجوا من الاخوة المبرمجين بان لا يبخلوا على بشرح الملفات العشوائية بالتفصيل حيث اننى مبتدأ

واريد ان افهم عمل تلك الملفات وكيفية البحث عن السجلات داخلها حيث ان حجم ها اصغر بكثير من قاعدة البيانات ولكم جزيل الشكر والتقدير

تم تعديل هذه المشاركة بواسطة HnHn في 29 مارس 2007 في 08:41

#2

اتمنى منك ان تكتب العنوان في المرة المقبله بالصيغة التي قمت بتعديلها لك وذلك ليساعدنا في عملية البحث للرجوع للموضوع في المستقبل

w6w200504111350386a583171c.gif ماالذي تقصده بالملفات العشوائيه ...

تم تعديل هذه المشاركة بواسطة HnHn في 29 مارس 2007 في 08:46

سجل ايميلك هنا

googlejb5.gif ليصلك كل ما هو مفيد في عالم البرمجة
#3

شكرا اخى الكريم واتمنى من سيادتكم المساعددة

#4

الأخ 'هشام سوبر'

الملفات العشوائية عبارة عن ملفات عادية جدا بيتم وضع فيها بيانات نصية String ، وسميت بالعشوائية نظرا لأن البيانات بتكون متراكمة ورا بعضها بشكل عشوائى ، وكنا قديما بنستعملها مع كويك بيزك مثلا لتخزين البيانات فيها كقواعد بيانات مثل الأكسيس حاليا، واحيانا مع فيجوال بيزك اذا اقتضت الحاجة،

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

وبعد كدة بتقوم بعملية فتح الملف العشوائى نفسة من خلال أمر Open وبتحدد فية مجموعة من المعاملات مثل اسم الملف و رقم قناة الأتصال المراد فتح الملف عليها (نظرا لأنة يمكنك فتح اكتر من ملف على اكثر من قناة اتصال) ، وقناة الأتصال اشبة بالقناة اللى بتمشى فيها البيانات ما بين الـType المفتوح فى الذاكرة وبين الملف العشوائى اللى حضرتك بتخزن فية البيانات

وتسجيل البيانات فى الملف العشوائى بيكون شبية بالسجلات الموجودة فى الأكسيس مثلا ولكن بتكون متراكمة ورا بعضها ، على سبيل المثال لو عملت حقل طولة 10 حروف وحفظت فية 3 حروف فقط ، هيحفظ ال3 حروف ويكملك باقى ال10 حروف مسافات فاضية ، وبعدها مباشرة تلاقى السجل التانى المحفوظ جنبا الى جنب مع الأول

ولهذا صعب جدا انك تفرق البيانات من بعضها عن طريق فتح الملفات دى فى اى برنامج يعرض النصوص ، لكن يمكنك التعامل معاها بسهولة باستخدام Type الموجود فى الذاكرة

دى فكرة مبسطة عن الملفات العشوائية ، وفى انواع اخرى على فكرة مثل الملفات التتابعية والملفات الثنائية

انتظر المشاركة القادمة بالأكواد ...

تم تعديل هذه المشاركة بواسطة pro_sam في 29 مارس 2007 في 09:43

#5

الاخ الكريم pro_sam شكرا جزيلا لك على اهتمامك بالموضوع ويا ريت تكمل جميلك

وتشرحلى تللك الملفات بالتفصيل الممل لانى محتاجها جدا وقراءت عنها كتير ومش عارف افهمها

وكيف يتم البحث فيها منتظر من كرمك المزيد

#6

الملفات العشوائية من الحاجات اللى بحبها جدا ومن الحاجات اللى كنت بحب اشرحها زمان فى البرمجة لأنها بتعتمد على اللوجيك فى برمجتها زى معظم برامج زمان ايام Dos

عملت لحضرتك مثال عليها تقدر تحملة من المرفقات

والمشاركة القادمة شرح مبسط للأكواد ، لأن شرحها نظرى مش هيكون واضح قوى لكن ان شاء الله تفيدك

random_file.rar

#7

بسم الله الرحمن الرحيم

أولا أخى كود الموديول Module

Type prosam
N As String * 30
p As String * 10
End Type

والكود دة بيعمل لحضرتك تقريبا زى سجل فى الذاكرة بيتكون من حقلين حقل N طولة 30 حرف ، وحقل P طولة 10 حروف

وافترض انى سميت السجل دة فى الميمورى prosam

واول خطوة بعد كدة انك بتاخد نسخة من التايب دة زى ما بتعمل مع Recordset مثلا فى Dao ودة بالأمر التالى

Global AGCIT As prosam

وعملت النسخة منة اسمها agcit

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

يعنى مثلا لو عايز احط قيمة داخل الحقل N هقولة

agcit.n="www.agcit.com"

وكل التعامل هيكون مع السجل agcit دة

#8

نيجى لكود فتح الملف

Open App.Path & "\AGCIT.TXT" For Random As #1 Len = Len(AGCIT)

طبعا بالترتيب بيتم تحديد :

اسم الملف ومسارة

نوع الفتح وهوا Random

رقم قناة الأتصال وهى رقم 1

طول السجل المراد حفظة فى كل مرة يتم فيها الحفظ

وتلاحظ هنا انى قلتلة خد الطول بتاع السجل اللى انا عملتة اللى اسمة agcit

وكان من الممكن انى اكتب رقم مباشرة مثلا بدل ما اقولة خد طول السجل ، لكن كدة افضل بحيث لو غيرت فى التقسيمة متضطرش تعدل الكود

بالنسبة لكود الحفظ

اولا احب اوضح ليك الأمر LOF باختصار ، وهوا أمر شبية بالأمر Len

لكن الأمر LOF اختصار لـ Len Of File

اى انة بيجيب عدد الحروف الموجودة داخل الملف

وما الفائدة من عدد الحروف

مشكلة الملفات العشوائية انك علشان تضيف سجل جديد لازم تقولة السجل الى يحفظ علية يكون رقمة كام

يعنى لو قلتلة احفظ اول مرة فى السجل رقم 1 ، تانى مرة هقولة برضو احفظ فى رقم 1 ، وبالتالى هيمسح اول سجل ويحط التانى علية

اية الحل ؟

الحل انك تعرف عدد السجلات وبعدين تضيف السجل الجديد فى عدد السجلات القديمة + 1

بمعنى ان لو فى 5 سجلات فى الجدول هيكون السجل الجديد رقمة 5+1

وهكذا المرة التالية 6+1

طيب هتعرف عدد السجلات ازاى ؟ الأمر LOF بيديلك عدد الحروف فى الملف كلة

وبقسمة عدد الحروف كلها على طول السجل الواحد يطلع لحضرتك عدد السجلات

بفرض مثلا ان السجل بتاعى فية 40 حرف

لو انا حفظت 3 سجلات ، اصبح الملف فية 120 حرف

طيب لو انا جيبت الحروف كلها اللى هيا 120 وعملتلها قسمة على طول السجل الواحد اللى هوا 40 ، اصبح

عندى عدد السجلات اللى هيا 3

أرجو تكون واضحة

وطبعا لما بتستخدم الدالة LOF بتذكر بين اقواس رقم قناة الأتصال اللى انت عايز تجيب رقم الملف بتاعها ،

يعنى LOF(1)

x = LOF(1) / Len(AGCIT)

بعد كدة بتحط البيانات داخل السجل الموجود فى الذاكرة

AGCIT.N = Text1
AGCIT.p = Text2

وبعدين بتقوم بعملية الحفظ نفسها باستخدام الأمر PUT وبياخد اولا رقم الملف ، ثانيا رقم السجل واحنا جبنا

عدد السجلات فى المتغير x وبالتالى هقولة x+1 ، وثانيا السجل اللى عايز احفظة فى الملف وهوا agcit

Put #1, x + 1, AGCIT

وبعد كدة رسالة بأنة تم الحفظ وبعدين بمسح التكستات

MsgBox "Data Saved", , "Done"
Text1 = "": Text2 = ""

اتمنى يكون الموضوع واضح

لأنك لو حبيت تستخدمها فعلا هتقدر تعمل بيها حاجات كتير ، لأنك لو اتمكنت منها هتقدر تعمل حاجة أشبة بالـRecordSet مثلا ، وكل جدول هيكون فى ملف وحجمة لانهائى ، ويكفى انك تقدر تشغل البرنامج بتاعك على اى جهاز حتى لو كانت بنتيوم 1 ونظام تشغيل دوس

مع العلم انك ممكن تصدر التقارير بتاعتك بأشكال مختلفة زى مثلا HTML وتستخدمة فى التنسيق والطباعة

لكن دة يتطلب منك تمكن شوية طبعا

المشاركة القادمة كود البحث ان شاء الله

#9

أولا تعريف متغير ولازم يكون طولة بنفس طول الحقل اللى انت هتستدعى بدلالتة ، بمعنى ان الحقل agcit.n طولة 30 يبقى المتغير دة كمان لازم يكون طولة 30 ، ولو معملتوش بنفس الطول هتضطر تستخدم الأمر Trim لإزالة المسافات عند الأستدعاء

Dim z As String * 30
z = InputBox("Enter Name")

تانى حاجة هتعمل عداد يعدى على كل السجلات يبتدى من 1 لحد عدد السجلات كلها

وزى ما قلنا فى الحفظ هتجيب عدد السجلات بنفس الطريقة السابقة

For x = 1 To LOF(1) / Len(AGCIT)

الأمر اللى بيقوم باستدعاء السجل الى الذاكرة

وبيطلب منك رقم الملف ، رقم السجل اللى عايز تجيبة ، السجل فى الذاكرة اللى عايز تستقبل فية البيانات اللى جاية من الملف العشوائى

Get #1, x, AGCIT

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

If AGCIT.N = z Then
		Text1 = AGCIT.N
		Text2 = AGCIT.p
		MsgBox "Done"
		Exit Sub
End If

وبعدين تقفل العداد

Next

ولو الجهاز جة هنا طبعا معناها انة لم يجد السجل اللى بيبحث عنة ، لأن لو وجدة كان نفذ الأمر exit sub ومكانش هييجى هنا

اذا هتمسح التكستات وتقولة انة مش موجود

Text1 = "": Text2 = ""
MsgBox "Name Not Found"

وبكدة تبقى قدرت تفتح ملف وتحفظ وتستدعى

والأفكار بالنسبة للنوعية دى من الملفات أو الملفات التتابعية او الثنائية لا تنتهى زى ما قلتلك قبل كدة مثلا فى موضوع التقارير بHTML

وزى مثلا لو عندك ملف حجمة كبير جدا ازاى تقدر تعمل البحث بطريقة اسرع بحيث انك تستدعى السجلات من اكتر من اتجاة فى نفس الوقت

حقيقة انا استمتعت بكتابة الكلام دة ، لأنك رجعتنى لأيام البرمجة الشيقة وابتكار الأفكار ...

أتمنى اكون أفدتك

#10
w6w200504111348476fff23c80.gif برافو اخ pro_sam ... الآن فهمت ما الذي كان يريد الاستفسار عنه الاخ هشام .. واعتقد انك كفيت ووفيت بشرح الله يعطيك عافيه

سجل ايميلك هنا

googlejb5.gif ليصلك كل ما هو مفيد في عالم البرمجة
#11

مشكور اخى الكريم على الشرح الرائع وياريت حد يقولى كيفية البحث عن السجلات

#12
HnHn كتب:
w6w200504111348476fff23c80.gif برافو اخ pro_sam ... الآن فهمت ما الذي كان يريد الاستفسار عنه الاخ هشام .. واعتقد انك كفيت ووفيت بشرح الله يعطيك عافيه

الله يكرمك ، من بعض ما عندكم

اقتباس
مشكور اخى الكريم على الشرح الرائع وياريت حد يقولى كيفية البحث عن السجلات

أتمنى انك تقرا اللى انا كتبتة

#13

بصراحة انا مش عارف اشكرك ازى

ولكن اقدر اقولك

ربنا يوفقك

ويعينك على مساعدة الناس

جعله الله فى ميزان حسناتك

#14

كيف اتنقل بين السجلات

#15

استطعت و الحمد لله عمل ازرار التنقل بين السجلات ولكنن الان يتبقى كيفية حذف سجل ما

#16

الأخ الفاضل ... راجع: كيف افتح عدة مسارات في نفس الوقت

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

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

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