PDA

View Full Version : پيدا کردن متن در فايل بدون بازکردن آن؟



sina32
دوشنبه 15 شهریور 1389, 18:06 عصر
يه فايل دارم که هم حجمش زياده و هم نوعش txt نيست، اگه بخوام به روش معمول بازش کنم و بزارم تو يه تکس باکس برنامم هنگ ميکنه. آيا راهي هست که فقط يه رشته رو توش سرچ کنم؟ که اگه پيدا شد يه پيام به کاربر بدم؟

IamOverlord
دوشنبه 15 شهریور 1389, 18:20 عصر
سلام دوست عزیز!
بعد از هر دستور Input یه DoEvents بذار ببین کارت حل می شه یا نه...
مثلا :

Input #1, Str1
DoEvents
:چشمک:

MEhdi Sobhani
دوشنبه 15 شهریور 1389, 19:06 عصر
يه فايل دارم که هم حجمش زياده و هم نوعش txt نيست، اگه بخوام به روش معمول بازش کنم و بزارم تو يه تکس باکس برنامم هنگ ميکنه. آيا راهي هست که فقط يه رشته رو توش سرچ کنم؟ که اگه پيدا شد يه پيام به کاربر بدم؟
سلام
خدمت شما



StrFind$ = "Salam"
Open FileName$ For Binary As 1
StrData$ = Space(LOF(1))
Get 1, 1, StrData
If InStr(1, StrData$, StrFind$) <> 0 Then MsgBox ("Founded")
Close 1


اگر حجم فایل بیشتر بود بهتره در چند مرحله اطلاعات رو ازش بخونی . البته باید دقت کنی که اگر 1000 بایت 1000 بایت میخونی و حجم رشته ای که میخوای جستجو کنی 10 بایت هست هر بار باید 990 بایت بری جلو .
موفق باشی .

sina32
دوشنبه 15 شهریور 1389, 19:43 عصر
اگر حجم فایل بیشتر بود بهتره در چند مرحله اطلاعات رو ازش بخونی . البته باید دقت کنی که اگر 1000 بایت 1000 بایت میخونی و حجم رشته ای که میخوای جستجو کنی 10 بایت هست هر بار باید 990 بایت بری جلو .
موفق باشی .




مرســـی تا اينجا که کارکرده. فقط اگه فايله بزرگتر بود من بلد نيستم، چطوری 1000بايتی بخونمش؟ و دوم هم اينکه (نخندينا!) از کجا بايد بفهمم حجم رشتم چقده؟

MEhdi Sobhani
دوشنبه 15 شهریور 1389, 19:48 عصر
مرســـی تا اينجا که کارکرده. فقط اگه فايله بزرگتر بود من بلد نيستم، چطوری 1000بايتی بخونمش؟
سلام
خواهش میکنم .
واسه حجم رشته


len(stringname$)
الان حجم متغیر استرینگی که از فایل میخونه برابر حجم فایل در نظر گرفته میشه :
بنابراین با یه بار خوندن کامل تمام اطلاعات فایل میاد داخل این متغیر .


StrData$ = Space(LOF(1))
تابع space یه رشته با تعدادی که تعیین میکنیم از " " کاراکتر 32 میسازه .
البته معمولا لازم نمیشه چند مرحله ای کار کرد
این کد چند مرحله ای خوندن
اسم متغیر ها هم کاملا مشخصه .
البته تستش نکردم .



StrFind$ = "Salam"
ReadSize& = 1000000
FindSize% = Len(StrFind%) + 1
LngSeek& = 1
Open FileName$ For Binary As 1
Do
StrData$ = Space(ReadSize&)
Get 1, LngSeek&, StrData
If InStr(1, StrData$, StrFind$) <> 0 Then MsgBox ("Founded"): Exit Do
LngSeek& = LngSeek& + ReadSize& - FindSize%
Loop Until EOF(1)
Close 1

sina32
دوشنبه 15 شهریور 1389, 19:55 عصر
بازم مرسي. خوب شد يه استاد بلده اينو! آخه از هرکي پرسيده بودم نميدونست، از سرچ هم نتيجه اي نگرفتم نا اميد شده بودم.
تست ميکنم جوابو ميگم.

MEhdi Sobhani
دوشنبه 15 شهریور 1389, 19:58 عصر
بازم مرسي. خوب شد يه استاد بلده اينو! آخه از هرکي پرسيده بودم نميدونست، از سرچ هم نتيجه اي نگرفتم نا اميد شده بودم.
تست ميکنم جوابو ميگم.
سلام
خواهش میکنم
استاد چیه بابا :خجالت:

sina32
دوشنبه 15 شهریور 1389, 20:01 عصر
تست شد، کار ميکنه! :لبخند: واقعا تشکر ازت دوست عزيز! خيلي کمک بزرگي کردی. :تشویق: :تشویق: :تشویق:
وقتي ميگم استاد اغراق نکردم واقعا گفتم. (يه عمر دعات ميکنم :چشمک: )

MEhdi Sobhani
دوشنبه 15 شهریور 1389, 20:27 عصر
تست شد، کار ميکنه! :لبخند: واقعا تشکر ازت دوست عزيز! خيلي کمک بزرگي کردی. :تشویق: :تشویق: :تشویق:
وقتي ميگم استاد اغراق نکردم واقعا گفتم. (يه عمر دعات ميکنم :چشمک: )
:خجالت::خجالت::خجالت::خجالت:: جالت::خجالت::خجالت::خجالت::خ الت::خجالت::چشمک: