Dim word As String
Dim a As Integer: a = FreeFile
Open FullPathName For Input As a
Do While Not EOF(a)
Line Input #a, word ' Читаем строку в переменную
If InStr(1, word, find_word, vbTextCompare) Then msgbox "Найдено" ' Если совпадает с критерием поиска то матюкаемся об этом
Exit Do ' А ЭТО ЗДЕСЬ ЗАЧЕМ????
End If ' типа закрыли IF
Loop 'Продолжили выполенние цикла
Close f
Sergey_next писал(а):Точнее сказать, поиск проходит только в первых (около 15) строках, а в следующих уже не находит.
If InStr(1, word, find_word, vbTextCompare) Then msgbox "Найдено" ' Ага, ага...
Exit Do
End If ' типа закрыли IF
Dim I as long, aaa as String, needtext as string, filename as string
I = 0
needtext = "Вася"
FileName = "Васин_файл.txt"
if DIR(FileName)<>"" then
Open FileName FOR input as #1
do
line input #1, aaa
if instr(1,aaa,needtext,vbTextCompare)<>0 then
I = I + 1
debug.print "Строка "; I; ", содержит что надо..."
end if
loop until(eof(1))
close #1
else
msgbox "в этом файле точно нет ничего"
end if
Dim I as long, needtext as string, filename as string
Dim AAA as string * 50000
Dim Buffer as String
needtext = "Вася"
FileName = "Васин_файл.txt"
if DIR(FileName)<>"" then
Open FileName FOR BINARY as #1
For I = 0 to filelen(FileName)/50000
GET #1, I*50000+1,AAA
Buffer = Buffer & AAA
Next I
Buffer = Left$(Buffer,filelen(FileName))
close #1
if instr(1,Buffer,needtext,vbTextCompare)=0 then
msgbox "В этом файле нету твоей строки"
else
PP = 0
WHILE instr(PP+1,Buffer,needtext,vbTextCompare)<>0
PP = instr(PP+1,Buffer,needtext,vbTextCompare)
debug.print "Байт вхождения: "; PP; ", содержит что надо..."
WEND
end if
else
msgbox "в этом файле точно нет ничего"
end if
GET #1, A*50000+1,AAA
GET #1, I*50000+1,AAA
alibek писал(а):Второй вариант кривой. При чтении очередного блока надо сдвигаться назад на длину искомой строки.
alibek писал(а):Подумай сам.
Представь, что ты ищешь "abcd". И эта строка будет как раз между блоками.
WHILE instr(PP+1,Buffer,needtext,vbTextCompare)<>0
PP = instr(PP+1,Buffer,needtext,vbTextCompare)
awl100Alex писал(а):Но как это реализовать в строковых, если объявлено Dim Buffer as String ??? При Dim Buffer() as String - InStr генерит ошибку Type.
Dim hF as Long, sBuffer as String
hF = FreeFile
Open sFileName For Binary as hF
sBuffer = space$(LOF(hF))
Get #hF, , sBuffer
Close #hF
Private Sub Command1_Click()
'Поиск слова в больших текстовых файлах...
Dim needtext, sFileName, sBuffer As String, hF, LenStr As Long
needtext = "самолет"
sFileName = App.Path & "\text.txt" '1.02 Мб
LenStr = Len(needtext)
hF = FreeFile
Open sFileName For Binary As hF
sBuffer = Space$(LOF(hF))
Get #hF, , sBuffer
List1.Clear: Label2.Caption = Time
Seek hF, 1
1: Pos = InStr(Seek(hF), sBuffer, needtext, vbTextCompare)
If Pos Then
Seek hF, Pos + LenStr
List1.AddItem "Искомое слово найдено в позиции - " & Pos
Label1.Caption = List1.ListCount: Label1.Refresh
GoTo 1
End If
If List1.ListCount = 0 Then MsgBox "Такого слова в файле нет.", vbInformation
Close #hF
Label3.Caption = Time
End Sub
Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 37