PDA

View Full Version : خواندن فایل txt



aleas2
پنج شنبه 05 خرداد 1390, 17:29 عصر
سلام خسته نباشید من میخوام برنام فایل txt از تو درایو کامپیوتر بخونه که شامل 10000 رکورد شایدم بیشتر هسته میخوام اینو بخونه یکی یکی هر رکورد بریزه تو list2 و محتویاتی که کاربر داخل list2 وارد کرده با list1 مقایسه کنه هر کدوم از رکورد های list2 که داخل list1 نیسته بریزه تو list3 حالا من میخوام بدونم موقعه خوندن فایل txt که شامل 10000 رکورد حتی خیلی بیشتر از 10000 رکورد هسته چکار کنم که موقعه خواندن برنامه هنگ نکنه یعنی قاطی نکنه همینطور موقعه مقایسه؟

Restlesa
پنج شنبه 05 خرداد 1390, 17:41 عصر
براي اين كار بهتره از پايگاه داده استفاده كني
يعني اون 10000 ركورد رو در يه پايگاه داده قرار بدي و توسط شي ء Ado اونها رو بخوني و هر بلايي كه خواستي سروشون بياري

M_Maskout
شنبه 07 خرداد 1390, 08:36 صبح
سلام
برای اینکه در زمان اجرای پروسه‌های طولانی برنامه هنگ نکنه (ظاهر هنگ کرده به خودش نگیره)، از دستور DoEvents تو بدنه‌ی اون پروسه استفاده کنید:


For i = 1 To 10000
‌ Line Input #1, A$
‌ DoEvents
Next i

vbhamed
شنبه 07 خرداد 1390, 08:58 صبح
سلام

اطلاعاتي كه داخل ليست ميريزي چيه ؟ عدد ؟ رشته ؟
در هر حال اگر اطلاعات رو به صورت مرتب داخل ليست بريزي(خودش اين خاصيت رو داره) اونموقع مي توني با استفاده از روش جستجوي باينري خيلي سريع بفهمي كه اين اطلاعات در ليستت هست يا نه (مثلا براي جستجوي 1 مورد در بين 000 000 1 ركورد فقط 20 تا مقايسه لازمه كه تقريبا زماني نمي گيره

aleas2
یک شنبه 08 خرداد 1390, 08:33 صبح
اطلاعاتی که ذخیره میکنم آدرس سایت هسته یعنی رشته و بصورت فایل تصادفی ذخیره میکنم یعنی میتونم مستقیم به کورد خاصی دسترسی پیدا کنم حالا میشه شما این روش جستجوي باينري بیشتر توضیح بدین اگر سورسی دارین سورس بذارین

vbhamed
دوشنبه 09 خرداد 1390, 08:55 صبح
سلام

در روش جستجوي باينري چون اطلاعات مرتب هستند ابتدا ليست رو به دو قسمت تقسيم مي كنيم، مثلا در يك ليست 1000 تايي مي ريم سراغ ركورد 500
اگر متن جستجو شونده با اون تطابق داشت كه پيدا شده، اگر نداشت يا بزرگتر هست يا كوچكتر، اگر بزرگتر بود مطمئنا در نيمه بالايي ليست يعني 500 تاي اول وجود نداره پس ميريم سراغ نيمه پايين ليست يعني 500 تاي دوم
ولي اگر كوچكتر بود ميريم سراغ نيمه بالايي ليست يعني 500 تاي اول
حالا با اين 500 تا مثل 1000 تايي اول رفتار مي كنيم، يعني اون رو به دو قسمت 250 تايي تقسيم مي كنيم و ميريم سراغ ركورد وسط و مقايسه رو انجام مي ديم و الي آخر
اينطوري با هر بار مقايسه كلي از ركوردهايي كه مطمئن هستيم متن ما در اونها وجود نداره از مقايسه خارج ميشن

همونطور كه در شكل زير مي بيند براي پيدا كردن يك ركورد در يك ليست دو ميليون عنصري مرتب، فقط 21 مقايسه لازمه، براي ليست 4000000 تايي 22 مقايسه براي 8000000 تايي 23 مقايسه و ...

2048000
1 - 1024000
2 - 512000
3 - 256000
4 - 128000
5 - 64000
6 - 32000
7 - 16000
8 - 8000
9 - 4000
10 - 2000
11 - 1000
12 - 500
13 - 250
14 - 125
15 - 62
16 - 31
17 - 15
18 - 7
19 - 3
20 - 2
21 - 1


70541

در مورد مثال هم اگر جستجو كنيد تو اينترنت فراوون گير مياد
با عنوان جستجوي دودويي يا باينري (Binary Search)