PDA

View Full Version : ساختن فایل تصادفی با قابلیت اضافه شدن اطلاعات جدید



Restlesa
سه شنبه 29 شهریور 1390, 14:52 عصر
سلام بر هنمگی دوستان عزیز
من با کد زیر یه فایل تصادفی می سازم اما هر وقت که اطلاعات جدید رو وارد می کنم و می خوام داخل فایل ذخیره کنم اطلاعات قفلی پاک میشه و اطلاعات جدید جایگزینش میشه.
حالا من می خواستم ازتون بپرسم که چه طوری می تونم این مشکل رو برطرف کنم ؟؟؟
یعنی با ذخیره کردن اطلاعات جدید، اطلاعات قبلی پاک نشه و اطلاعات جدید هم در ادامه اطلاهات قبلی درج بشه ؟؟؟
لطفا بگید جای کدم رو باید تغییر بدم !!!
با تشکر فراوان

Type FormatCategory
Name As String
Created As String
Description As String
End Type

Public NewCategory As FormatCategory

Private Sub cmdOk_Click()
NewCategory.Name = txtName.Text
NewCategory.Description = txtDescription
NewCategory.Created = Format(Now, "yyyy/mm/dd")

Open "c:\Test.txt" For Random As #1
Put #1, 1, NewCategory.Name
Put #1, 2, NewCategory.Created
Put #1, 3, NewCategory.Description
Close #1
End Sub

محسن واژدی
سه شنبه 29 شهریور 1390, 15:43 عصر
سلام
دستور را بصورت زیر ویرایش کنید:

Private Type FormatCategory
Name As String
Created As String
Description As String
End Type

Private NewCategory As FormatCategory

Private Sub cmdOk_Click()
NewCategory.Name = txtName.Text
NewCategory.Description = txtDescription
NewCategory.Created = Format(Now, "yyyy/mm/dd")

Open "c:\Test.txt" For Random As #1
If LOF(1) > 0 Then Seek #1, LOF(1)
Put #1, , NewCategory
Close #1
End Sub

موفق باشید

Restlesa
سه شنبه 29 شهریور 1390, 15:58 عصر
ممنونم اقا محسن
مشکلم برطرف شد اما حالا یه مشکل بزرگتر برام پیش اومده و اونم اینه که با ذخیره کردن تنها 3 بار اطلاعات جدید حجم فایل Test یه چیزی حدود 5MG شده !!! :متعجب::متعجب::متعجب:
حالا اگه من بخوام 1000 بار اطلاعاتجدید به همون فایلم اضافه کنم حجم فایل خیلی خیلی زیاد میشه
راهی برای برطرف کردن این مشکل وجود داره ؟؟؟

setroyd
سه شنبه 29 شهریور 1390, 16:08 عصر
حتما اطلاعات شما حجمش زیاده درسته ؟؟؟ در این صورت این عادی هست .

Restlesa
سه شنبه 29 شهریور 1390, 16:12 عصر
نه دوست عزیز
مقداری که در داخل رکرود های فایلم ذخیره می کنم فقط در حد یه تاریخ، یه نام کوچولو ، و یه توضیحه که یک خطم نمیشه

setroyd
سه شنبه 29 شهریور 1390, 16:53 عصر
NewCategory.Name = "ali"
NewCategory.Description = "hasan"
NewCategory.Created = Format(Now, "yyyy/mm/dd")

Open "f:\Test.txt" For Random As #1 Len = 62
If LOF(1) > 0 Then Seek #1, LOF(1)
Put #1, , NewCategory
Close #1

محسن واژدی
سه شنبه 29 شهریور 1390, 16:58 عصر
مقداری از کدهای برنامه تون را ویرایش کردم، باید درست باشد:

Private Type FormatCategory
Name As String * 20
Created As String * 20
Description As String * 20
End Type

Private NewCategory As FormatCategory

Private Sub cmdOk_Click()

Open "c:\Test.txt" For Random As #1

Do While Not EOF(1)
Get #1, , NewCategory
Loop

NewCategory.Name = txtName.Text
NewCategory.Description = txtDescription
NewCategory.Created = Format(Now, "yyyy/mm/dd")

Me.Caption = last_pos%
Put #1, (Seek(1) + 1), NewCategory
Close #1
End Sub


موفق باشید

Restlesa
سه شنبه 29 شهریور 1390, 21:55 عصر
بازم ممنونم اقا محسن
یه سوال دیگه هم داشتم و اونم اینه که من در یه فرم دیگه به نام frmPaneBookmark یه TreeView دارم که می خوام وقتی کاربر رکورد NewCategory.Name رو پر کرد اون مقدار به عنوان یه منو در قسمت TreeView فرم frmBookmark ام اضافه بشه
میشه لطق کنی راهنماییم کنی ؟؟؟؟

setroyd
چهارشنبه 30 شهریور 1390, 00:02 صبح
یه سرچ کن همینجا چگونگی استفاده و کد نویسی در tree view هست . کاری نداره خودت هم میتونی بنویسی .

Restlesa
چهارشنبه 30 شهریور 1390, 18:12 عصر
خودم نمونه سورس دارم اما وقتي ازش استفاده مي كنم خطا ميده

vbhamed
چهارشنبه 30 شهریور 1390, 23:02 عصر
سلام

با اجازه آقا محسن عزيز يك ويرايش كوچولو هم من انجام بدم
يكي معرفي طول ركورد در دستور Open
دوم روش محاسبه تعداد ركوردها با تابع Lof به جاي خواندن همه ركوردها

Private Type FormatCategory
Name As String * 20
Created As String * 20
Description As String * 20
End Type

Private NewCategory As FormatCategory

Private Sub cmdOk_Click()

NewCategory.Name = txtName.Text
NewCategory.Description = txtDescription
NewCategory.Created = Format(Now, "yyyy/mm/dd")

Open "c:\Test.txt" For Random As #1 Len = Len(NewCategory)
Dim Records&
Records = LOF(1) \ Len(NewCategory)
Put #1, Records + 1, NewCategory
Close #1

End Sub

Restlesa
چهارشنبه 30 شهریور 1390, 23:28 عصر
ممونم آقا حامد عزیز
میشه یه لطف دیگه هم بکنی و مشکل مطرح شده در پست 8 رو هم برام برطرف کنی ؟؟؟
خودم هر چی باهاش ور رفتن درست نشد که نشد

محسن واژدی
چهارشنبه 30 شهریور 1390, 23:36 عصر
سلام
ممنون آقا حامد، منم قبلش از این کدی که برای محاسبه طول رکورد ها استفاده میشود استفاده کردم منتها نمیدانم که چرا طول رکوردها در این صورت با طول بدست آمده توسط حلقه متفاوت بود، به همین دلیل از حلقه استفاده کردم، اطلاع دارید که چرا اینگونه است؟!

محسن واژدی
چهارشنبه 30 شهریور 1390, 23:53 عصر
یه سوال دیگه هم داشتم و اونم اینه که من در یه فرم دیگه به نام یه TreeView دارم که می خوام وقتی کاربر رکورد NewCategory.Name رو پر کرد اون مقدار به عنوان یه منو در قسمت TreeView فرم frmBookmark ام اضافه بشه

زیاد متوجه نشدم، فکر کنم frmPaneBookmark مربوط به سورسی بود که قبلا" ضمیمه کرده بودین، اگر میخواهید آیتمی را به TreeView سند جدید بیافزائید، شکل ساده افزودن آیتم به TreeView فرم جدید میتواند بصورت زیر باشد:

new_frm.TreeView1.Nodes.Add , , , NewCategory.Name

که new_frm هم نام فرم جدید است

موفق باشید

vbhamed
پنج شنبه 31 شهریور 1390, 06:54 صبح
سلام
ممنون حامد جان، منم قبلش از این کدی که برای محاسبه طول رکورد ها استفاده میشود استفاده کردم منتها نمیدانم که چرا طول رکوردها در این صورت با طول بدست آمده توسط حلقه متفاوت بود، به همین دلیل از حلقه استفاده کردم، اطلاع دارید که چرا اینگونه است؟!

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

Open "c:\Test.txt" For Random As #1 Len = Len(NewCategory)

Restlesa
پنج شنبه 31 شهریور 1390, 07:10 صبح
زیاد متوجه نشدم، فکر کنم frmPaneBookmark مربوط به سورسی بود که قبلا" ضمیمه کرده بودین، اگر میخواهید آیتمی را به TreeView سند جدید بیافزائید، شکل ساده افزودن آیتم به TreeView فرم جدید میتواند بصورت زیر باشد:
بله اقا محسن مربوط به همون سورس میشه ... خودم با کمی ور رفتن بیشتر و مطالعه دقیق تر نمونه سورس هایی که در رابطه با ابزار TreeView که در تاپبک ابزارها و کامپوننت های ویژال بیسیک برام فرستادی تونستم مشکلم رو برطرف کنم ... سورسشم به شکل زیره :
If txtName.Text = "" Then
txtName.SetFocus
Else
NewCategory.Name = txtName.Text
NewCategory.Description = txtDescription.Text
NewCategory.Created = Format(Now, "yyyy/mm/dd")

For i = 1 To FPB.TreeView.Nodes.Count
If FPB.TreeView.Nodes.Item(i).Key = Trim(NewCategory.Name) Or FPB.TreeView.Nodes.Item(i).Text = Trim(NewCategory.Name) Then
MsgBox "The name you entered has allready been used ...", vbExclamation + vbOKOnly
txtName.Text = ""
txtDescription.Text = ""

NewCategory.Name = ""
NewCategory.Created = ""
NewCategory.Description = ""

txtName.SetFocus
Exit Sub
End If
Next

If FPB.TreeView.SelectedItem.Key = "Top Sites" Then
MsgBox "This category already exists.", vbExclamation + vbOKOnly
Exit Sub
End If
If FPB.TreeView.SelectedItem.Key = "Trash" Then FPB.TreeView.Nodes.Item(1).Selected = True

FPB.TreeView.Nodes.Add FPB.TreeView.SelectedItem.Key, 4, Trim(NewCategory.Name), Trim(NewCategory.Name)
FPB.TreeView.Nodes.Item(FPB.TreeView.SelectedItem. Key).Expanded = True

Open WINPath & "\system32\AdUrlCatalog.bin" For Random As #1 Len = Len(NewCategory)
Dim Records&
Records = LOF(1) \ Len(NewCategory)
Put #1, Records + 1, NewCategory
Close #1
Unload Me
End If

حالا چندتا کار دیگه هم می خوام انجام بدم اما به دلیل تجربه نداشتن در زمینه ابزار TreeView می خوام دست به شلوار شما شم :لبخند:
یکی از اون کارها این هستش که می خوام یکی از زیر آیتم های آیتم URL Bookmark (مثلا Barnamenevis) رو به آیتم Top Site به دو روش اضافه کنم به این صورت که در روش اول می خوام کل پوشه یا همون زیر آیتم Barnameneviss به آیتم Top Sites منتقل کنم و در روش دوم هم فقط یک کپی از اون رو منتقل کنم. چه طوری این کار رور باید انجام بدم ؟؟؟

کار بعدی که می خوام انجام بدم این هستش که می خوام در قسمت از ابزار TreeView به جستجو بپردازم برای جلوگیری از وارد کردن نام زیر آیتم تکراری
اگه به سورس که قرار دادم دقت کنی با توجه به کد For i = 1 To FPB.TreeView.Nodes.Count من این کار رو در کل ابزار TreeView انجام دادم در حالی که می خوام این جستجو تنها در قسمت URL Bookmark انجام بشه
سورس کدم رو باید به چه سورس کدی تغییر بدم تا عملیات مذکور قابل پیاده سازی بشه ؟؟؟

و کار بعدی دیگه ای هم که می خوام انجام بدم دادن آیکن به آیتم های اصلی یعنی URL Bookmark ، Trash ، Top Sites و همین طور زیر آیتم های این آیتم هاست
این کار رو هم چه طوری می تونم انجامش بدم ؟؟؟ آیا باید از ابزار ImageManager استفاده کنم ؟؟؟

یک دنیا ممنونت میشم اگه به این سوالاتمونم پاسخ بدی :خجالت:

Restlesa
پنج شنبه 31 شهریور 1390, 07:16 صبح
داشت یادم می رفت لطفا نحوه خوندن اطلاعات ذخیره شده در فایل تصادفی رو هم بهم بگو
با تشکر بسیار فراوان :بوس:

vbhamed
پنج شنبه 31 شهریور 1390, 07:37 صبح
سلام

براي خوندن اطلاعات به جاي دستور Put از Get استفاده كن مثلا براي خوندن ركورد سوم اينطوري ميشه، بقيه برنامه مثل قبل هستش
Get #1, 3, NewCategory

Restlesa
پنج شنبه 31 شهریور 1390, 12:51 عصر
برای خوندن تمام رکورد ها باید چی کار کنم ؟؟؟
فکر کنم باید عدد 3 رو حذف کنم و جاشو خالی بزارم درسته ؟؟؟ :متفکر:

محسن واژدی
پنج شنبه 31 شهریور 1390, 15:47 عصر
برای خوندن تمام رکورد ها باید چی کار کنم ؟؟؟
فکر کنم باید عدد 3 رو حذف کنم و جاشو خالی بزارم درسته ؟؟؟ بله، همینطور است

Restlesa
پنج شنبه 31 شهریور 1390, 17:50 عصر
ممنونم آقا محسن ... میشه به سوالات مطرح شده در پست 16 هم جواب بدی :خجالت::خجالت::خجالت:

vbhamed
پنج شنبه 31 شهریور 1390, 18:38 عصر
برای خوندن تمام رکورد ها باید چی کار کنم ؟؟؟
فکر کنم باید عدد 3 رو حذف کنم و جاشو خالی بزارم درسته ؟؟؟ :متفکر:

سلام
تعداد ركوردها كه معلومه ميشه :
Lof(1)\Len(NewCategury)
يك حلقه For ميزاريد از 1 تا عدد محاسبه شده از عبارت بالا و هر بار يك ركورد مي‌خونيد تا تموم بشه
به جاي 3 هم هيچي نزاريد ولي ويرگول اون رو بزاريد باشه

Restlesa
پنج شنبه 31 شهریور 1390, 19:04 عصر
مرسي ... میشه به سوالات مطرح شده در پست 16 هم جواب بدی :ناراحت::ناراحت::ناراحت:

Restlesa
دوشنبه 04 مهر 1390, 12:36 عصر
کسی نیست جواب مارو بده ؟؟؟ :گریه::گریه::گریه:

vbhamed
دوشنبه 04 مهر 1390, 13:13 عصر
سلام

ساختار زير رو در نظر بگيريد
Private Sub Form_Load()

With TreeView1

.Nodes.Add , , "A1", "Test1"

.Nodes.Add "A1", tvwChild, "A1S1", "Test1 Sub1"

.Nodes.Add "A1S1", tvwChild, , "Test1 Sub1 Sub1"
.Nodes.Add "A1S1", tvwChild, , "Test1 Sub1 Sub2"
.Nodes.Add "A1S1", tvwChild, , "Test1 Sub1 Sub3"

.Nodes.Add "A1", tvwChild, "A1S2", "Test1 Sub2"
.Nodes.Add "A1", tvwChild, "A1S3", "Test1 Sub3"


.Nodes.Add , , "A2", "Test2"

.Nodes.Add "A2", tvwChild, , "Test2 Sub1"
.Nodes.Add "A2", tvwChild, , "Test2 Sub2"
.Nodes.Add "A2", tvwChild, , "Test2 Sub3"


.Nodes.Add , , "A3", "Test3"

MsgBox .Nodes(10).FullPath & vbCrLf & .Nodes(10).Root

End With

End Sub

شكل خروجي به همين شكلي كه در كد مي بينيد در مياد
هر نود براي خودش يك كليد شناسايي و يك Parent يا نود سرشاخه داره
وقتي مي‌خواين نودي اضافه كنيد مي‌تونيد Parent رو هم مشخص كنيد و با قراردادن پارامتر tvwChild، نود جديد به عنوان زير شاخه اون قرار مي‌گيره، اينطوري مي‌تونيد هر طوري بخواين نود ها رو انتقال بدين، فرق انتقال و كپي هم اينه كه در انتقال، بعد از كپي يك نود اون رو پاك مي كنيد (البته بهتره اول همه رو كپي كنيد و بعد حذف كنيد چون ممكنه اگر يك نود سرشاخه حذف بشه، زير شاخه هاش هم حذف بشن)

براي جستجو در يك زير شاخه هم از روش زير استفاده كنيد
1 - كل نودها رو با همون دستور قبليتون پيمايش كنيد اما هر نود خاصيتهايي به نام Root و FullPath داره كه از روي اون مي‌تونيد بفهميد اين نود زير شاخه كدوم نود هست و فقط نودهاي مورد نظر رو بگرديد، خاصيت Root، نود بالاترين سر شاخه و خاصيت FullPath، مسير كامل از نود Root تا نود جاري رو مي‌ده

براي دادن آيكون بايد يك عدد كنترل ImageList رو فرم بزاريد و توش تصاوير رو قرار بدين و اسم اون كنترل ImageList رو در خاصيت ImageList مربوط به Treeview تنظيم كنيد و در پارامترهاي متد Add مربوط به كنترل TreeView كليد يا انديس عكس رو بديد، مثلا عكس انديس 1
.Nodes.Add "A1S1", tvwChild, , "Test1 Sub1 Sub1", 1
اگر تو كنترل ImageList براي هر عكس يك كليد رشته اي قرار بديد اينجا هم مي‌تونيد به جاي انديس همون كليد رشته اي رو وارد كنيد
.Nodes.Add "A1S1", tvwChild, , "Test1 Sub1 Sub1", "Image1"

Restlesa
دوشنبه 04 مهر 1390, 14:28 عصر
ممنونم آقا حامد عزیز
میشه لطف کنی در رابطه با انتقال و کپی یه نمونه با توجه به کد خودم برام بزاری :خجالت::خجالت::خجالت:

Restlesa
چهارشنبه 06 مهر 1390, 14:24 عصر
:گریه::گریه::گریه:

vbhamed
پنج شنبه 07 مهر 1390, 08:16 صبح
سلام

شما شروع به نوشتن كنيد اگر مشكلي بود بچه ها راهنماييتون مي‌كنن

Restlesa
شنبه 09 مهر 1390, 15:04 عصر
شروع به نوشتنش كردم و مشكلاتمم همون هايي هست كه در پست ١٦ گفتم
شماهم در پست 25 يه توضيحاتي دادين اما من متوجه نشدم چون تاحالا با ابزار TreeView كار نكردم و اين اولين باري است كه از اين كنترل استفاده مي كنم
پس اگه امكانش هست يه نمونه سورس در رابطه با مشكلات ذكر شده در پست ١٦ برام بزاريد و اگرم امكانش نيست بهم بگيد تا من يه خاكي توسرم بريزم :گریه:
با تشكر فراوان

Restlesa
چهارشنبه 13 مهر 1390, 19:30 عصر
سلام

شما شروع به نوشتن كنيد اگر مشكلي بود بچه ها راهنماييتون مي‌كنن
پس اين راهنمايي بچه ها كجاس ؟؟؟ :گریه::گریه::گریه:
ديگه كم كم دارم از بچه هاي اين بخش نااميد ميشم