PDA

View Full Version : مبتدی: ذخیره ارایه و استفاده ان در اجرای بعدی برنامه



سپهر-111
پنج شنبه 26 بهمن 1391, 15:08 عصر
سلام دوستان:قلب:
من چند تا ارایه از نوع رشته دارم ، میخوام اونها را ذخیره کنم و سری بعد که برنامه اجرا میشه ازشون استفاده کنم
چطور باید این کار انجام بدم ؟؟
ممنون میشم راهنمایی بفرمایید
باتشکر از حسن توجه دوستان گل

mehran901
پنج شنبه 26 بهمن 1391, 15:25 عصر
یک شبه کد نوشتم ، آرایه اس رو مقدار دهی کرده و بعد داخل فایل مینویسه بعدش دوباره از فایل میخونه و داخل آرایه ذخیره میکنه



Option Explicit

Private Sub Form_Load()
Dim s(5) As String
s(0) = " 1"
s(2) = "2"
Dim i%
Open "d:\123.txt" For Output As #2
For i = UBound(s) To 0 Step -1
'MsgBox s(i)

Print #2, s(i)

Next
Close #2
Open "d:\123.txt" For Input As #4
i = UBound(s)
Do Until EOF(4)
Input #4, s(i)
i = i - 1
Loop
Close
MsgBox s(2)

End Sub

موفق باشین

سپهر-111
پنج شنبه 26 بهمن 1391, 17:49 عصر
سلام اقا مهران ممنون از پاسخی که دادید
ولی اگه بخوام چند تا ارایه رو در یک فایل ذخیره کنم باید هر کدام در سطر جداگانه ذخیره کنم

حالا اگه بخوام در یک سطر مورد نظر بنویسم به جای دستور

Print #2, s(i)
از چه دستوری استفاده کنم؟

و به جای دستور

Input #4, s(i)


برای خواندن از سطر مورد نظر از چه دستوری استفاده کنم
باتشکر

mehran901
پنج شنبه 26 بهمن 1391, 19:21 عصر
خب من پیشنهاد میکنم هر آرایه ای رو داخل ی فایل مجزا بنویسین تا راحت تر باشین ولی خب چون فایل ها به صورت دسترسی ترتیبی باز شدند یکم کار سخت میشه ( ولی میشه با خلاقیت های مختلف این مشکل رو حل کرد ، حتما نباید برید به خط خاصی ... میتونید موقع ثبت داده هایی که مربوطبه آرایهخاصی هستند اولش اسم آرایهروبذارید بعد داده رو ثبت کنید و وقتی میخونید اول ببینید این خط با اسم کدوم آرایه شروع شده بعدش بریزید تو آرایه مربوطه مثلا : string1:abcd s)

در فایل های دسترسی تصادفی از دستور seek #file number , number میشه استفاده کرد ( مکان اشاره گر داخل فایل رو مشخص میکنه ) اینجام میتونید ازش استفاده کنید ولی سیک 1 سطر اول سیک 3 سطر دوم و سیک 5 سطر سوم و ... رو بر میگردونه ، و بهش اعتمادی نیست مثلا بنویسید


Dim i$, a As Variant
a = FreeFile
Open "d:\123.txt" For Input As #a
Seek #a, 3
Input #a, i
Close
MsgBox i
سطر 2دوم رو برمی گردونه


روشی که من توصیه میکنم اینه از متغییر های fso استفاده کنید در حالت دسترسی به stream
مثلا :

Dim fso As New FileSystemObject
Dim file1 As File
Dim txt As TextStream
Set file1 = fso.GetFile("d:\123.txt")
Set txt = file1.OpenAsTextStream(ForReading)



حالا از پروسیجر های txt میتونید واسه کنترل فایل تکست استفاده کنین ، read line write line line read all va ...
اینجوری خیلی بهتره ، درضمن من بطور مثال forreading گذاشتم شما میتونید واسه نوشتن for writing بذارید ولی موقع نوشتن اطلاعات قبلی حذف میشن برای نگه داشتن اطلاعات قبل و نوشتن اطلاعات جدید ، از for appending استفاده کنید

mehran901
پنج شنبه 26 بهمن 1391, 19:23 عصر
آهان اینم یادم اومد بگم ، قبلش رفرنس microsoft scripting runtime رو به پروژه اضافه کنید

سپهر-111
پنج شنبه 26 بهمن 1391, 21:49 عصر
آهان اینم یادم اومد بگم ، قبلش رفرنس microsoft scripting runtime رو به پروژه اضافه کنید


جناب مهران از وقتی که گذاشتید و پاسخ دادید کمال تشکر را دارم

ولی میخوام این طوری استفاده کنم
فکر کنم ساده تر باشه


Private Sub Command3_Click()
Dim A(5) As String
A(1) = "TEST1"
A(2) = "TEST2"
A(3) = "TEST3"
A(4) = "TEST4"
A(5) = "TEST5"

Open App.Path & "\TEST.TXT" For Random Access Write As #1
Put #1, 1, A(1)
Put #1, 2, A(2)
Put #1, 3, A(3)
Put #1, 4, A(4)
Put #1, 5, A(5)
Close #1
End Sub

Private Sub Command1_Click()
Dim s(5) As String
Open App.Path & "\TEST.TXT" For Random Access Read As #2
Get #2, 1, s(1)
Get #2, 2, s(2)
Get #2, 3, s(3)
Get #2, 4, s(4)
Get #2, 5, s(5)
MsgBox s(1)
MsgBox s(2)
MsgBox s(3)
MsgBox s(4)
MsgBox s(5)
Close #2
End Sub


اینطوری اشکالی پیش نمیاد ؟!

mehran901
پنج شنبه 26 بهمن 1391, 22:39 عصر
خواهش میکنم ... خب اگه علاقه دارین اینجوری با دستور get و put کار کنین ، همون طور که میدونین تمرکز استفاده از این دستور ها روی ارتباط فایل های تصادفی هست و اگه کد بالا رو تست کنین ارور میده ، باید طول رکورد ها رو مشخص کنید
یک فایل txt ، شامل اعداد 1 تا 5 بسازین که هر عدد در یک سطر قرار گرفته حالا به عنوان مثال بخش خواندن از فایل رو به این شکل تغییر بدین تا بدون ارور بتونید ازش استفاده کنید


Private Sub Command1_Click()
Dim s(5) As String * 3
Open App.Path & "\TEST.TXT" For Random Access Read As #2 len = 3
Get #2, 1, s(1)
Get #2, 2, s(2)
Get #2, 3, s(3)
Get #2, 4, s(4)
Get #2, 5, s(5)
MsgBox s(1)
MsgBox s(2)
MsgBox s(3)
MsgBox s(4)
MsgBox s(5)
Close #2
End Sub