PDA

View Full Version : مبتدی: سوال در مورد خواندن از ارایه ؟؟؟



سپهر-111
سه شنبه 18 مهر 1391, 18:25 عصر
سلام دوستان گل

من یه ارایه دارم که حدود 1000 تا عنصر داره

Dim DATA(1000) As Byte

Dim Buffer(10) As Byte

حالا میخوام هردفعه 10 تا از عنصر اون توی یک ارایه دیگه قرار بدم (Buffer) و دفعه بعدش هم 10 تای بعدیش بخونم

مثل خواندن از فایل !

هرسری با تغییر مقدار استارت میتونم محل اولین بایت ومشخص کنم ومقدار عنصر متغییر Buffer ، از درون فایل بخونم

Open "H:\TEST.ext" For Binary As #1

Get #1, Start , Buffer

Close #1

من میخوام مثل حالتی که از فایل میخونم و در درون ارایه قرار میدم ، مثل همین روش ، از ارایه بخونم و در درون ارایه دیگه قرار بدم(البته میخوام کدهاش خیلی کم باشه، خیلی مهمه)

دوستان ممنون میشم راهنمایی فرمایند

باتشکر از همه دوستان

program2vb
سه شنبه 18 مهر 1391, 19:55 عصر
سلام به شما دوست عزیز این سورس رو نگاه کن شاید مشکلت حل بشه .......

توش هم جستجو هم ویرایش هم حذف و هم اضافه کردن هست

موفق و پیروز باشی یا علی ..

سپهر-111
سه شنبه 18 مهر 1391, 20:39 عصر
سلام به شما دوست عزیز این سورس رو نگاه کن شاید مشکلت حل بشه .......

توش هم جستجو هم ویرایش هم حذف و هم اضافه کردن هست

موفق و پیروز باشی یا علی ..

سلام
باتشکر از شما دوست گرامی
ولی من نمیخوام از فایل بخونم ، من فقط مثال زدم که میخوام مثل خواندن از فایل ساده و راحت باشه . . .

من میخوام از ارایه بخونم :

ن یه ارایه دارم که حدود 1000 تا عنصر داره
Dim DATA(1000) As Byte

Dim Buffer(10) As Byte

حالا میخوام هردفعه 10 تا از عنصر اون توی یک ارایه دیگه قرار بدم (Buffer) و دفعه بعدش هم 10 تای بعدیش بخونم
ولی میخوام کدهاش کم باشه و به سادگی این کار انجام بگیره
ممنون میشم اگه دوستان راهنمایی کنید
باتشکر

مهرداد صفا
پنج شنبه 20 مهر 1391, 01:36 صبح
سلام
از تابع CopyMemory استفاده کنید.
آرایه ها فضاهای پشت سر هم در حافضه هستند. وقتی آرگومنتی به صورت ByRef ارسال میشود در واقع اشاره گری به مکان آن در حافضه ارسال میشود که در تابع CopyMemory از آدرس مبدا ب تعداد بایتهای مشخص شده در محل مقصد کپی میشود. امیدوارم منظور را منتقل کرده باشم. به این مثال دقت کنید:

'in the name of god
'صل الله علی محمد و آله
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

Private Sub Form_Load()
Dim a(1000) As Integer
For i = 1 To 1000
a(i) = i
Next
Dim b(10) As Integer
CopyMemory b(1), a(10), CLng(20)
For j = 1 To 10
MsgBox b(j)
Next
End Sub

در اینجا ابتدا آرایه a را با اعداد 1 تا 1000 مقدار دهی کردیم سپس خانه های 10 تا 20 a را در خانه های 1 تا 10 b که حاوی 10 integer دو بایتی یعنی 20 بایت است را کپی کردیم. در مورد نوع byte که 1 بایت حافضه را اشغال میکند به جای 20 از 10 به عنوان length استفاده کنید.

سپهر-111
پنج شنبه 20 مهر 1391, 09:34 صبح
سلام
از تابع CopyMemory استفاده کنید.
آرایه ها فضاهای پشت سر هم در حافضه هستند. وقتی آرگومنتی به صورت ByRef ارسال میشود در واقع اشاره گری به مکان آن در حافضه ارسال میشود که در تابع CopyMemory از آدرس مبدا ب تعداد بایتهای مشخص شده در محل مقصد کپی میشود. امیدوارم منظور را منتقل کرده باشم. به این مثال دقت کنید:

'in the name of god
'صل الله علی محمد و آله
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

Private Sub Form_Load()
Dim a(1000) As Integer
For i = 1 To 1000
a(i) = i
Next
Dim b(10) As Integer
CopyMemory b(1), a(10), CLng(20)
For j = 1 To 10
MsgBox b(j)
Next
End Sub

در اینجا ابتدا آرایه a را با اعداد 1 تا 1000 مقدار دهی کردیم سپس خانه های 10 تا 20 a را در خانه های 1 تا 10 b که حاوی 10 integer دو بایتی یعنی 20 بایت است را کپی کردیم. در مورد نوع byte که 1 بایت حافضه را اشغال میکند به جای 20 از 10 به عنوان length استفاده کنید.


سلام:قلب:
عالی بود:تشویق:
دقیقا همین میخواستم
ممنون خیلی زحمت کشیدید
فقط اگه در مورد این متغییر Any
ByRef Destination As Any
توضیح بدید ممنون میشم

مهرداد صفا
پنج شنبه 20 مهر 1391, 12:20 عصر
سلام:قلب:
عالی بود:تشویق:
دقیقا همین میخواستم
ممنون خیلی زحمت کشیدید
فقط اگه در مورد این متغییر Any
ByRef Destination As Any
توضیح بدید ممنون میشم
سلام دوست عزیز:قلب:
خواهش میکنم.
Any نوع داده مخصوص توابع api است و در توابع و متغیرهای داخلی نمیتوا از این نوع داده استفاده کرد. وقتی آرگومنتی از نوع Any معرفی شده باشد به این معنیست که شما میتوانید هر نوع داده ای را به تابع ارسال کنید. در واقع any هر داده ای میتواند باشد.