PDA

View Full Version : سوال: متغیر آرایه ای از نوع Byte - فوری!!!



soheil_programmer
جمعه 17 خرداد 1387, 19:07 عصر
با سلام

من یک متغیر آرایه ای از نوع Byte به صورت زیر تعریف کرده ام:

Public MyVariant() As Byte

این متغیر در برخی اوقات مقدار دهی می شود؛
حالا من چگونه میتوانم بفهمم که این متغیر چه هنگام و به چه تعداد آرایه مقدار دهی شده است؟

لازم به ذکر است که برنامه در صورت استفاده از تابع UBound در مواقعی که خالی است و هنوز آرایه ای تعریف نشده، خطا میدهد!

UBound(MyVariant())




سوال دوم:

ما دو متغیر V1 و V2 داریم که بصورت آرایه بایت تعریف شده اند
ما میخواهیم این دو متغیر را با هم مقایسه کنیم آیا تابعی برای اینکار هست؟؟


Dim V1() as Byte
Dim V2() as Byte

Developer Programmer
شنبه 18 خرداد 1387, 17:06 عصر
لازم به ذکر است که برنامه در صورت استفاده از تابع UBound در مواقعی که خالی است و هنوز آرایه ای تعریف نشده، خطا میدهد!فکر کنم چون آرایه پویا رو تعریف کردی ولی از ReDim واسه تعریف کرانه استفاده نکردی.

soheil_programmer
شنبه 18 خرداد 1387, 18:07 عصر
فکر کنم چون آرایه پویا رو تعریف کردی ولی از ReDim واسه تعریف کرانه استفاده نکردی.

منظورت از ما کیه ؟! خوب هر آرایه از چند خونه تشکیل شده درسته ؟!! خوب خونه ها رو با هم مقایسه کن. پرسیدن داره ؟


ببین بجای قلت املایییییی گرفتن از ما میتونی جواب سوال VB ما را بدی:
فایلی که قراره توی آرایه لود شه کرانه نداره فرض بگیر این آرایه ما قرار یه فایل را که کاربر Browse میکنه درون خودش لود کنه که سایزش اصلاً معلوم نیست!
در مرحله بعد ما بعد از Browse کردن فایل کاربر میخواهیم این آرایه را کنترل کنیم که آیا کاربر فایلی درونش لود کرده یا همچنان خالی است و اگر لود کرده چند بایت بوده و در مرحله بعد که میخواهیم اونو از طریق یه حلقه مقایسه کنیم حتماً به کرانه نامعلوم احتیاج میشه!!

البته من بدلیل دیر جواب دادن دوستان طبق معمول مشکلم را از طریق دیگه ای حل کردم:
من یک روتین در برنامم قرار دادم که درونش Ubound تابع آرایه را چک میکنه که در صورت خطا دادن این دستور با دستور On Error Goto n خطا را به خطی منتقل میکنم که نشون بده فایلی لود نشده!

به صورت زیر:

Function CheckArrayForEmpty(InputArray() As Byte) As Boolean
Dim Count As Long

On Error GoTo 1
Count = UBound(InputArray)
CheckArrayForEmpty = False ' Your Array is NOT Empty

Exit Function
1: CheckArrayForEmpty = True ' Your Array is Empty
End Function

Developer Programmer
شنبه 18 خرداد 1387, 19:13 عصر
فایلی که قراره توی آرایه لود شه بهتره آرایه ات رو String تعریف کنی.


خودش لود کنه که سایزش اصلاً معلوم نیستچنین چیزی غیر ممکنه، مطمئنا سایزش معلومه فقط کافیه سایز فایل رو بخونی و آرایه ات رو بر اساس اون ReDim کنی.یا اگه لزومی به تعریف آرایه نباشه اینطور عمل کنی


Dim ThisFileData As String
Open AppNow For Binary Access Read As #1
ThisFileData = Space$(FileLen(AppNow)) 'Get All The Data From The File...
Get #1, 1, ThisFileData
Close #1

میخواهیم این آرایه را کنترل کنیم که آیا کاربر فایلی درونش لود کرده یا همچنان خالی است خیلی راحت... میتونی آرایه رو Init کنی، تا بفهمی مقدار دهی شده یا نه. یا یه متغیر Boolean تعریف کنی.

حتماً به کرانه نامعلوم احتیاج میشه!نه نمی شه...

soheil_programmer
شنبه 18 خرداد 1387, 22:11 عصر
اگه میشه این Init کردن را یه توضیح کوچولو بده؟؟

Mbt925
یک شنبه 19 خرداد 1387, 12:44 عصر
وقتی آرایه ای به صورت پویا تعریف میشه ، قبل از اینکه مقدار دهی بشه ، دارای باند نیست.
برای همین خطا میده.

برای حل این مشکل ، در شروع اجرای برنامتون یا قبل از شروع استفاده از آرایه از دستور زیر استفاده کنید.



Redim V1(0) as Byte


با این دستور آرایه رو از تهی بودن خارج می کنیم.

بعد از این دستور می تونید به بقیه عملیاتتون بدون هیچ مشکلی ادامه بدید.