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

ما الفرق بين Dim و Redim

مغلق
بدأه حسام الملحم في 24 مايو 2005 · 13 رد · 4,944 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم،

ما الفرق بين Dim و ReDim؟ في العادة أستخدمهما في المصفوفات، إلا أني أستخدم عادة Redim خاصة إذا أردت إعادة بناء مصفوفة بحجم مختلف. فإذا كان هذا هو الفرق فهل لي أن أستغني عن Dim؟

Dim array(99) as Integer
.. code..
ReDim array(199) as Integer

نفس عمل....

Redim array(99) as Integer
...code...
Redim array(199) as Integer

تم تعديل هذه المشاركة بواسطة أبومازن في 24 مايو 2005 في 05:25

#2

على حسب علمى الامر Dim يستخدم فى تعريف المتغيرات او المصفوفات اذا كنت تعرف حجمها اما اذا كنت تنوى ان تسند حجمها لمتغير اخر فانك تستخدم الامر ReDim بمعنى اذا كان هناك متغير يسمى Counter يحسب لك عدد اسطر ملف نصى ثم اردت ان تنشئ مصفوفة عدد عناصرها هو نفس عدد سطور الملف فلاتستطيع تعريفها بالصورة Dim A(Counter) وانما لابد ان تكتب ReDim A(Counter).......ارجو ان اكون قد استطعت التوضيح لانى لااجيد الشرح :rolleyes:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#3

اخي ابو مازن انت تقريبا جاوبت على السؤال لكن اجب اضيف ملاحظة وهي اننا نستخدم redim في حالة عدم معرفة حجم المصفوفة اثناء كتابة الكود بحيث تجعل هذه حجم المصفوفة معتمد على شيء اخر مثلا عندما تكتب حروف في ال TEXTBOX واردت ان تضع تلك الحروف في مصفوفة فانه يفضل ان تستخدم Redim لاننا ربما تكتب في المرة الاولى عشرة حروف وممكن في الورة الثانية تكتب 40 حرف وهكذا وهنا تكمن اهمية استخدام الامر Redim

*************************************************

**************************************************

مصطفى زيداني

#4

الغرض الرئيسي من ReDim هو اعادة تعين طول المصفوفة داخل البرنامج ، على شرط ان يتم تعريفها اولاً بدون ان نحدد طولها ... (كما تفضل الاخوان)

لاحظ ان اعادة تعين طول المصفوفة (مثلاً كان طولها 10 فنجعله 15) ينتج عنه مسح المحتويات السابقة للمصفوفة .. لذلك فنحن نستخدم Redim Preserve و ذلك لإعادة طول المصفوفة مع الاحتفاظ بالقيم القديمة ..

بنت اليمن ،،

لا اله الا الله .. محمد رسول الله

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#5
اقتباس
لذلك فنحن نستخدم Redim Preserve و ذلك لإعادة طول المصفوفة مع الاحتفاظ بالقيم القديمة ..

شكراً على هذه المعلومة الجديدة بالنسبة لى فقد كان هذا الامر ياخذ منى سطور طويلة من الاكواد للاحتفاظ بالقيم لكن ساجرب هذه الطريقة ماشاء الله عليكى دائما متميزة :rolleyes:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#6

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

الأخ العزيز أبو مازن :

يمكن أن تعمل ما أردته حيث أن ReDim تعرف متغير جديد دون أن يكون المتغير قد عرف عن طريق Dim .

يعني الكود الذي أضفته

اقتباس
Redim array(99) as Integer

...code...

Redim array(199) as Integer

رح يعمل تمام .

ولكني أستغرب السؤال جيث أن الشيفرة الأولى

اقتباس
CODE

Dim array(99) as Integer

.. code..

ReDim array(199) as Integer

فهي لا تعمل عندي وتعطي Error وهو( Array already dimensioned )

الأخت بنت اليمن :

اقتباس
لذلك فنحن نستخدم Redim Preserve و ذلك لإعادة طول المصفوفة مع الاحتفاظ بالقيم القديمة ..

جربتها ولم تنفع حيث أن الفيجوال بيسك لا تتعرف على ( Redim Preserve ) كأمر ، أرجومنكي أن تشرحي كيف تستخدم الـ Redim Preserve .

والسلام عليكم ورحمة الله وبركاته

تم تعديل هذه المشاركة بواسطة البريشي في 24 مايو 2005 في 12:48

********************* ******************** *********************

(( أشــهد أن لا اله الا الله ..... وأشهد أن محمد رسول الله ))

********************* ******************** *********************

لا تقـل من أيـن أبدأ

طـاعـة الله الـبدايـة

***

لا تقـل أين طـريـقي

شــرع الله الهـدايـة

***

لا تـقـل أيـن نعـيمي

جـنـة الله كـفـايـــــة

***

لا تقـل في الغـد أبدأ

ربمـــا تأتـي النهـايـــة

**************** **************** ****************

#7

السلام عليكم

المصفوفات إما عبارة عن Fixed أو محدده وتلك تكون حدودها معروفة مثل المثال الذي تم وضعه

Option Base 0

Dim array(99) as Integer

معني هذا أن تلك المصفوفة بها 100 حد..

أو غير محدده وبالتالي لا تستطيع معرفة حدود المصفوفة .. وبالتالي فلن تحجز مصفوفة بها مثلا 1000 حد وأنت لا تريد منها سوي حدود قليلة فقط..

وبالتالي جملة Redim تتيح لك إعادة تعريف حدود أي مصفوفة إذا علمت كم حدا بها..

مثال :

Private Sub Command1_Click()

Dim LArray() As Integer
sstr = "Pharaonic_Guy"
ReDim LArray(Len(sstr))
MsgBox UBound(LArray)


End Sub

هنا عرفت مصفوفة LArray ليست معروفة الحدود .. ثم أعدت تعريف عدد حدودها بجملة Redim وعدد حدودها سيكون طول النص

(Pharaonic_Guy) أي 13 حد...

مثال أخر :

Option Base 0

Dim bArr() As Byte

Open "exe Path" For Binary Access Read As #1

ReDim bArr(LOF(1) - 1)

Get #1, , bArr

Close #1

الكود السابق يقوم بفتح ملف EXE وقرائته ووضعه في حدود مصفوفة bArr..

وبما أننا لا نعرف عدد الحدود التي ينبغي حجزها لل EXE.. فيجب فتح ال EXE ومعرفه طوله ..ثم إعاده تعيين حدود المصفوفة بطول الملف... ثم وضع محتويات ال EXE داخل حدود المصفوفة بالكود Get #1, , bArr

======================

#8

السلام عليكم ..

بالعكس اخي الكريم البريشي الامر Preserve ينفذ بشكل طبيعي ، و لكن عليك ان تنتبه ان الامر Redim لا ينفذ الا على المصفوفة التي تم تعريفها منذ البداية على انها مصفوفة مفتوحة ، و اليك هذا المثال انسخه و سوف ترى النتيجة على الفور ان شاء الله :) :

Dim arr() As Integer

ReDim arr(10) As Integer
arr(0) = 10

ReDim Preserve arr(5) As Integer
MsgBox arr(0)

اشكرك اخي الكريم GHOST2010 على كلماتك الطيبة .. و بارك الله دوماً فيك و جزاك خير الجزاء على مشاركاتك الفعالة :)

بنت اليمن ،،

لا اله الا الله .. محمد رسول الله

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#9

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

أختي العزيزة بنت اليمن

لا أعرف لما لم يعمل معي المرة السابقة .

شكرا على المعلومة وجزاك الله خيرا .

والسلام عليكم ورحمة الله وبركاته .

********************* ******************** *********************

(( أشــهد أن لا اله الا الله ..... وأشهد أن محمد رسول الله ))

********************* ******************** *********************

لا تقـل من أيـن أبدأ

طـاعـة الله الـبدايـة

***

لا تقـل أين طـريـقي

شــرع الله الهـدايـة

***

لا تـقـل أيـن نعـيمي

جـنـة الله كـفـايـــــة

***

لا تقـل في الغـد أبدأ

ربمـــا تأتـي النهـايـــة

**************** **************** ****************

#10

حياك الله اخي البريشي ... و لا مشكلة اطلاقاً المهم انه نفذ معك ،،

بنت اليمن ،،

لا اله الا الله .. محمد رسول الله

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#11

جميله هي ردود الاخوة هنا..

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

تحياتي

#12

والأجمل مشاركتك , بس ناقصها القليل من التوضيح .

( مصفوفات ديناميكية واخرى ستاتيكية )

كتاب تركي العسيري - ممكن الرابط

والسلام عليكم

********************* ******************** *********************

(( أشــهد أن لا اله الا الله ..... وأشهد أن محمد رسول الله ))

********************* ******************** *********************

لا تقـل من أيـن أبدأ

طـاعـة الله الـبدايـة

***

لا تقـل أين طـريـقي

شــرع الله الهـدايـة

***

لا تـقـل أيـن نعـيمي

جـنـة الله كـفـايـــــة

***

لا تقـل في الغـد أبدأ

ربمـــا تأتـي النهـايـــة

**************** **************** ****************

#13

حياكم جميعاً ،،

اخي الكريم البريشي ... المصفوفات ديناميكية هي التي من الممكن التغير في طولها اما الاستاتيكية التي يكون حجمها ثابت ،،

و مرفق كتاب الاخ تركي ..

بنت اليمن

book.pdf

لا اله الا الله .. محمد رسول الله

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#14

مشكورة كثييييييييييييييييير

********************* ******************** *********************

(( أشــهد أن لا اله الا الله ..... وأشهد أن محمد رسول الله ))

********************* ******************** *********************

لا تقـل من أيـن أبدأ

طـاعـة الله الـبدايـة

***

لا تقـل أين طـريـقي

شــرع الله الهـدايـة

***

لا تـقـل أيـن نعـيمي

جـنـة الله كـفـايـــــة

***

لا تقـل في الغـد أبدأ

ربمـــا تأتـي النهـايـــة

**************** **************** ****************

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

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