PDA

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



earse+erse
یک شنبه 21 شهریور 1389, 18:29 عصر
من میخوام فایل یک فایل متنی به جای دیتابیس من باشه
داده های من اینا هستن مثلا:
شماره = عدد
نام=رشته
یک متن با حالت خاص=###ali##44 مثلا یه همچین حالتی


۱- نظرتون چیه که من این داده ها رو چه طوری تو فایل بزارم؟
۲-چه جوری وقتی داده ها رو درون فایل متنی گذاشتم اون ها رو بخونم بر اساس شماره؟
۳ چه جوری میتونم هرکدوم از اونا رو ویرایش کنم و فایل متنی آپدیدت بشه

دستتون درد نکنه پیشاپیش

parselearn
یک شنبه 21 شهریور 1389, 19:05 عصر
راهه ساده اينه كه با ركوردها كار كنين (اطلاعي ندارم)

راهه دوم اينه كه شما اطلاعات هر فرد را در يك خط از فايل قرار بدي
مثلا با اين قالب:
شماره||نام||اطلاعات
شماره يا id بايد منحصربه فرد باشد يا كليد باشد
خب حالا هنگام لود خط به خط خوانده ميشه و داخل يك آرايه ريخته ميشه
براي ويرايش:
بعد از لود خط مورد نظر و اسپليت كردن آن در TextBox اطلاعات تغيير ميكنند
و با توجه به شماره ذخيره ميشوند
و كل آرايه بايد دوباره ذخيره بشه (عاقلانه نيست، درسته؟)
اما خب براي اطلاعات كمتر از 5000 فكر نكنم مشكلي باشه

و حذف هم به همون روش

فقط براي افزودن بايد شماره آخر را +1 كنيد

Masoudse7en
یک شنبه 21 شهریور 1389, 19:22 عصر
ببین این چطوره کارتو راه میندازه؟؟؟؟؟؟

earse+erse
یک شنبه 21 شهریور 1389, 19:30 عصر
یه سوال دیگه هم داشتم + یه سوال که همین الان متوجه شدم
۱-این چیزی که من میخوام نوشت/خواندن از فایل با دسترسی ترتیبیه یا تصادفی
۲-چرا وقتی برنامه فایل رو ایجاد میکنه درون فایل متنی چرت و پرت نوشته میشه؟
من با notepad بازش کردم یه چیزایی به زبون چینی نوشته بود با ورد باز کردم باز هم اجق وجق بود، امکانش نیست که این دیتا ها رو بشه تو notepad مشاهده کرد؟:افسرده:
ممنون از هر دو عزیز

returnx
یک شنبه 21 شهریور 1389, 21:45 عصر
یه سوال دیگه هم داشتم + یه سوال که همین الان متوجه شدم
۱-این چیزی که من میخوام نوشت/خواندن از فایل با دسترسی ترتیبیه یا تصادفی
۲-چرا وقتی برنامه فایل رو ایجاد میکنه درون فایل متنی چرت و پرت نوشته میشه؟
من با notepad بازش کردم یه چیزایی به زبون چینی نوشته بود با ورد باز کردم باز هم اجق وجق بود، امکانش نیست که این دیتا ها رو بشه تو notepad مشاهده کرد؟:افسرده:
ممنون از هر دو عزیز
جواب سوال دومت با سوال 1 یکیه .
فایل شما تصادفیه برای همین کارکتر ها رو اجق وجق نشون میده.

earse+erse
یک شنبه 21 شهریور 1389, 22:39 عصر
من اگه بخوام یه رشته با دو خط با این روش(فایل ضمیمه شده) در فایل ذخیره کنم ارور میده و میگه bad record length و کلا با این روش نمیشه رشته های طولانی رو ذخیره کرد
اگه با دسترسی ترتیبی اعمال کنم این مشکل برطرف میشه؟
کلا برای رفع این مشکل باید چیکار کنم؟

Masoudse7en
یک شنبه 21 شهریور 1389, 22:51 عصر
من فکر کنم از رجستری یا از فونت های که او سیستم داری واسه من نشون میده به صورت زیر

"مسعود" "ویبی" باید اینطوری نشون بده

earse+erse
یک شنبه 21 شهریور 1389, 22:53 عصر
من فکر کنم از رجستری یا از فونت های که او سیستم داری واسه من نشون میده به صورت زیر

"مسعود" "ویبی" باید اینطوری نشون بده
چیزی که برا من نشون میده اینه



污⁩†††††爠穥⁡†††††† †††栠獡湡††††渠条楨†† †††††††歡慢⁲††††愠杳 慨⁲†††††††††

شما فایلتون رو آپلود کنین اگه مشکل از سیستم من باشه باید او رو هم همینطوری نشون بده دیگه

shask00l
دوشنبه 22 شهریور 1389, 00:07 صبح
فکر کنم استفاده از فایل های csv بهترین راه حل باشه . کلی کتابخونه آماده براشون وجود داره .

vbhamed
دوشنبه 22 شهریور 1389, 01:21 صبح
سلام

هيچ مشكلي نيست
چون فايلهاي تصادفي به صورت باينري ذخيره ميشن همچين چيزي ديده ميشه
مثلا اگر شما عدد 365897400 كه يك عدد Long هست رو ذخيره كنيد، اين عدد بايد فقط 4 بايت يا 4 حرف فضا اشغال كنه و براي ذخيره عدد Long به صورت باينري 4 بايت بيشتر فضا لازم نيست يعني يه جورايي كد ميشه واسه همين شما چيزهاي عجيب مي بينيد
البته متنها عينا نوشته ميشن ولي وقتي يك سري كاراكترهاي خارج از محدوده تو فايلي باشن، notepad ويندوز نميتونه اونها رو نشون بده

earse+erse
دوشنبه 22 شهریور 1389, 10:08 صبح
فکر کنم استفاده از فایل های csv بهترین راه حل باشه . کلی کتابخونه آماده براشون وجود داره .
می تونین بیشتر توضیح بدین و در صورت امکان سورسی چیزی بدین:قلب:

سلام
هيچ مشكلي نيست
چون فايلهاي تصادفي به صورت باينري ذخيره ميشن همچين چيزي ديده ميشه
مثلا اگر شما عدد 365897400 كه يك عدد Long هست رو ذخيره كنيد، اين عدد بايد فقط 4 بايت يا 4 حرف فضا اشغال كنه و براي ذخيره عدد Long به صورت باينري 4 بايت بيشتر فضا لازم نيست يعني يه جورايي كد ميشه واسه همين شما چيزهاي عجيب مي بينيد
البته مثلا متنها كد نمي شن ولي وقتي يك سري كاراكترهاي خارج از محدوده تو فايلي باشن، notepad ويندوز نميتونه اونها رو نشون بده
سلام
منون که درباره ذخیره فایل ها تصادفی توضیح دادین ولی مشکل اصلی من اینه که فایل های تصادفی رشته های طولانی و دارای دو سطر رو ذخیره نمیکنن.
برای حل مشکل باید چیکار کرد و آیا فایل ها با دسترسی ترتیبی این مشکل رو هم داره؟

من اگه بخوام یه رشته با دو خط با این روش(فایل ضمیمه شده) در فایل ذخیره کنم ارور میده و میگه bad record length و کلا با این روش نمیشه رشته های طولانی رو ذخیره کرد
اگه با دسترسی ترتیبی اعمال کنم این مشکل برطرف میشه؟
کلا برای رفع این مشکل باید چیکار کنم؟


ممنون از همه

MMR_1344
دوشنبه 22 شهریور 1389, 16:46 عصر
می تونی فایلت رو بصورت Input یا Output باز کنی اون وقت حروف رو درست ضبط میکنه
و وقت نمایش اونهها هم درست هست
معمولاً این نوع فایلها به اندازه يک خط رو میتونن ضبط کنن

vbhamed
دوشنبه 22 شهریور 1389, 17:06 عصر
سلام

خب حتما جايي اشتباه نوشتيد
مثال زير رو ببينيد

Private Type Record_Type

Nam As String * 10
Address As String * 1000

End Type

Dim rec As Record_Type
Dim rec2 As Record_Type

Private Sub Form_Load()

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

rec.Nam = "Ali"
rec.Address = "Tehran, khiaban sattarkhan" & vbCrLf & "naresideh be bagher khan"
Put #1, 1, rec

rec.Nam = "Reza"
rec.Address = "Tehran, Meidane azadi" & vbCrLf & "Samte falake sadeghie"
Put #1, 2, rec

Close

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

Get #1, 1, rec2
MsgBox rec2.Nam
MsgBox rec2.Address

Get #1, 2, rec2
MsgBox rec2.Nam
MsgBox rec2.Address

Close

End Sub


تو اين مثال دو ركورد با كاراكتر Enter در فايل نوشته شده و بعدش هم خونده ميشه

niko2008
دوشنبه 22 شهریور 1389, 18:14 عصر
سلام

خب حتما جايي اشتباه نوشتيد
مثال زير رو ببينيد

Private Type Record_Type

Nam As String * 10
Address As String * 1000

End Type

Dim rec As Record_Type
Dim rec2 As Record_Type

Private Sub Form_Load()

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

rec.Nam = "Ali"
rec.Address = "Tehran, khiaban sattarkhan" & vbCrLf & "naresideh be bagher khan"
Put #1, 1, rec

rec.Nam = "Reza"
rec.Address = "Tehran, Meidane azadi" & vbCrLf & "Samte falake sadeghie"
Put #1, 2, rec

Close

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

Get #1, 1, rec2
MsgBox rec2.Nam
MsgBox rec2.Address

Get #1, 2, rec2
MsgBox rec2.Nam
MsgBox rec2.Address

Close

End Sub


تو اين مثال دو ركورد با كاراكتر Enter در فايل نوشته شده و بعدش هم خونده ميشه

سلام دوست عزیز میتونید یه توضیح کامل درباره تعریف متغیرها و رکوردهای تعریف شده بدین
اصلا nam چیه؟ رابطه اون با rec چیه؟ خیلی خیلی ممنون میشم

vbhamed
چهارشنبه 24 شهریور 1389, 10:37 صبح
سلام

براي كار با فايل دستيابي تصادفي بايد يك ركورد تعريف كنيد درست مثل تعريف جدول در اكسس كه اين كار با دستور type انجام ميشه و توش متغيرهاي مختلف (يا همون فيلدها) رو با نوع و سايز دلخواه تعريف مي كنيم، فقط اينكه طول متغيرهاي رشته اي حتما بايد ثابت باشه (As string * x) كه x همون طول متغيره و متغير memo هم نداريم

nam هم چيز خاصي نيست، اسم متغيري هست كه توش نام ذخيره ميشه !

Type تنها ساختار رو تعريف مي كنه و مثل الگوي خياطي مي مونه

براي استفاده بايد از نوع Type يك متغير تعريف كنيد كه من اسم اون متغير رو rec گذاشتم

Dim Rec As Record_Type

براي دسترسي هم به اين شكل استفاده ميشه

نام فيلد.نام متغير ركوردي
مثلا
Rec.Name = "Ali"

اما براي توضيحات بيشتر بايد به كتاب مراجعه نماييد

niko2008
چهارشنبه 24 شهریور 1389, 15:21 عصر
سلام

براي كار با فايل دستيابي تصادفي بايد يك ركورد تعريف كنيد درست مثل تعريف جدول در اكسس كه اين كار با دستور type انجام ميشه و توش متغيرهاي مختلف (يا همون فيلدها) رو با نوع و سايز دلخواه تعريف مي كنيم، فقط اينكه طول متغيرهاي رشته اي حتما بايد ثابت باشه (As string * x) كه x همون طول متغيره و متغير memo هم نداريم

nam هم چيز خاصي نيست، اسم متغيري هست كه توش نام ذخيره ميشه !

Type تنها ساختار رو تعريف مي كنه و مثل الگوي خياطي مي مونه

براي استفاده بايد از نوع Type يك متغير تعريف كنيد كه من اسم اون متغير رو rec گذاشتم

Dim Rec As Record_Type

براي دسترسي هم به اين شكل استفاده ميشه

نام فيلد.نام متغير ركوردي
مثلا
Rec.Name = "Ali"

اما براي توضيحات بيشتر بايد به كتاب مراجعه نماييد

خیلی ممنون دوست عزیز میشه نام کتاب رو بگین

vbhamed
پنج شنبه 25 شهریور 1389, 00:46 صبح
سلام

كتابهاي وي بي 6 كه تو فهرستش مبحث فايلها باشه (البته فايلهاي دستيابي تصادفي حتما باشه)

M.T.P
پنج شنبه 25 شهریور 1389, 12:15 عصر
با تشکر از جناب vbhamed که یک توضیح کامل رو در خصوص کار با فایل ها با دسترسی تصادفی ارائه دادند. :قلب:
دوستان بنده اون اوایل به جای بانک های اکسس و sql از همین روش برای ذخیره اطلاعات استفاده میکردم ، باور بفرمایید یک حسابداری در حد متوسط رو با این روش پیاده سازی کردم ، هیچ مشکلی هم نداشت ، اما برای هر مقایسه و ... باید کلی کد بنویسید ، فرض بفرمایید قراره رکوردهایی رو که بین دو تاریخ مختلف هست رو نمایش بدید ،،، خب تو دستور sql با یک خط و کلمه کلیدی between حل میشه اما در این روش باید بشینید و الگوریتم طراحی کنید و کلی دنگ و فنگ.
یا اینکه بخواین یک رکورد رو حذف کنید.... :عصبانی++: عملا هیچ تابع و دستوری به این منظور وجود نداره ، باید کل رکورد رو برابر با vbnullstring کنید ، خب در این حالت فضای این رکورد آزاد که نمیشه هیچی ، در هر بار چک کردن این رکورد حذف شده باید شرط مخالف vbnullstring رو بزارید ، و اگه خیلی مایل باشید که این رکورد رو از فایل بلکل حذف کنید باید تک به تک رکوردها رو تو یه فایل دیگه بنویسید و موقعی که به رکورد حذف شده رسیدید بی خیال شید و به رکورد بعدی برید ... همینطور تا الاآخر.(دقیقا مثل عمل Compact And Reapir)

دوستانه پیشنهاد میکنم نزدیک این روش منسوخ شده برای ذخیره اطلاعات نشوید. و در همین قدر بدونید که یک همچین روشی هم هست. امیدوارم به گودالی که من در گذشته افتادم نیفتید. :لبخند:

niko2008
جمعه 26 شهریور 1389, 15:26 عصر
سلام دوستان عزیز من یه فایل خروجی txt به صورت زیر دارم که یه سیستم وضیعت قسمتهای مختلفشو که به قول معروف نرمال یا wo(ورک) گزارش میکنه:

B100C AS443 2010-05-22 13:18:01
===========================================
1 a101................ wo
2 a102................ wo
3 a103................ wo
4 a104................ wo
5 a105................ wo
6 a106................ wo
7 a107................ wo
8 a108................ wo
9 a109................ wo
10 a110................ wo
11 a111................ wo
12 a112................ wo
13 a113................ wo
14 a114................ wo
15 a115................ wo
16 a116................ wo
17 a117................ wo
18 a118................ wo
19 a119................ wo
20 a120................ wo
حالا من میخوام با استفاده از فایلهای تصادفی تغییر وضعیت ان قسمت مثلا A111به BL بودن را در فایل TXT ذخیره کنم

B100C AS443 2010-05-22 13:35:01
===========================================
1 a101................ wo
2 a102................ wo
3 a103................ wo
4 a104................ wo
5 a105................ wo
6 a106................ wo
7 a107................ wo
8 a108................ wo
9 a109................ wo
10 a110................ wo
11 a111................ BL
12 a112................ wo
13 a113................ wo
14 a114................ wo
15 a115................ wo
16 a116................ wo
17 a117................ wo
18 a118................ wo
19 a119................ wo
20 a120................ wo
یعنی بگم که a111 در ساعت مثلا 10 (BL) بوده و در ساعت مثلا 11 (WO) شده.
به نظر شما به چه روشی میتونم از روش فایل تصادفی استفاده کنم؟

niko2008
شنبه 27 شهریور 1389, 11:12 صبح
سلام دوستان عزیز من یه فایل خروجی txt به صورت زیر دارم که یه سیستم وضیعت قسمتهای مختلفشو که به قول معروف نرمال یا wo(ورک) گزارش میکنه:

B100C AS443 2010-05-22 13:18:01
===========================================
1 a101................ wo
2 a102................ wo
3 a103................ wo
4 a104................ wo
5 a105................ wo
6 a106................ wo
7 a107................ wo
8 a108................ wo
9 a109................ wo
10 a110................ wo
11 a111................ wo
12 a112................ wo
13 a113................ wo
14 a114................ wo
15 a115................ wo
16 a116................ wo
17 a117................ wo
18 a118................ wo
19 a119................ wo
20 a120................ wo
حالا من میخوام با استفاده از فایلهای تصادفی تغییر وضعیت ان قسمت مثلا A111به BL بودن را در فایل TXT ذخیره کنم

B100C AS443 2010-05-22 13:35:01
===========================================
1 a101................ wo
2 a102................ wo
3 a103................ wo
4 a104................ wo
5 a105................ wo
6 a106................ wo
7 a107................ wo
8 a108................ wo
9 a109................ wo
10 a110................ wo
11 a111................ BL
12 a112................ wo
13 a113................ wo
14 a114................ wo
15 a115................ wo
16 a116................ wo
17 a117................ wo
18 a118................ wo
19 a119................ wo
20 a120................ wo
یعنی بگم که a111 در ساعت مثلا 10 (BL) بوده و در ساعت مثلا 11 (WO) شده.
به نظر شما به چه روشی میتونم از روش فایل تصادفی استفاده کنم؟
اساتید محترم نظری ندارن قبل اینکه این قسمت از تاپیک حذف شود!!!!!!!!!!!!!!!!!:متفکر:

vbhamed
چهارشنبه 07 مهر 1389, 14:08 عصر
سلام

خب در توضيح بالا خط 11 شما تغيير كرده يعني ركورد 11
كار با فايلهاي تصادفي هم تشابه زيادي به بانك اطلاعاتي داره يعني شما بايد ركورد 11 رو ويرايش كنيد

براي ويرايش، ركورد مورد نظر رو بخونيد، فيلد مورد نظر رو تغيير بدين و دوباره بنويسيد (البته قبلش فايل رو باز كنيد و بعدش هم ببندين بهتره)

Get #1, 11, Rec

Rec.FieldName = "new value"

Put #1, 11, Rec

Slytherin
چهارشنبه 07 مهر 1389, 14:52 عصر
من یک راه حل ساده دارم که زیاد هم با موضوع این تایپیک بی ربط نیست،
کافی است یک کامپونت ماکروسافت ریچ تکست باکس به فرم خود اضافه کنید،
سپس با استفاده از خاصیت Save و Load فایل های خود را ذخیره و باز یابی کنید!
ادامه استفاده از این روش هم بستگی به سلیقه و ابتکار شما دارد.

niko2008
چهارشنبه 07 مهر 1389, 17:07 عصر
سلام دوست عزیز کار GET و PUT چیه؟

vbhamed
پنج شنبه 08 مهر 1389, 10:20 صبح
سلام

Get از فايل يك ركورد مي خونه و Put مي نويسه