Страница: 1 | 2 |
Вопрос: ЗнатокамVB - как найти 10 цифр в файле
Добавлено: 19.04.05 19:50
Автор вопроса: __Сергей__
Доброе время VBсуток!
Есть файл, как проще в нем найти подряд стоящих 10 цифр, ну и естественно считать их в переменную. Желателен код. Спасибо.
Ответы
Всего ответов: 18
Номер ответа: 1
Автор ответа:
Vilya
ICQ: 232995216
Вопросов: 12
Ответов: 63
Web-сайт:
Профиль | | #1
Добавлено: 19.04.05 20:08
Str1-Весь файл
Str2-нужная строка
Str3-полученная строка из 10 цифр
A-буфер
A=instr(1,str1,str2)
str3=mid(str1,A,10)
Всё
Номер ответа: 2
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #2
Добавлено: 19.04.05 20:12
Обычный цикл. Начиная с первого символа, просматриваешь строку длиной 10 символов на предмет IsNumeric. Если результат положительный - задание решено. Если нет - просматриваешь 10 символов, начиная со второго, третьего и т.д.
Когда строка найдена, применяешь к ней Val и получаешь число, которое можно сохранить в переменную.
Номер ответа: 3
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #3
Добавлено: 19.04.05 20:14
А там есть перед ней/после нее какие-то распозновательные занки?
Типа переноса строки и т.п.?
Номер ответа: 4
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #4
Добавлено: 19.04.05 20:15
Vilya
Похоже, что "нужная строка" не задана. Надо найти первую (любую) последовательность из 10 цифровых символов.
Номер ответа: 5
Автор ответа:
Vilya
ICQ: 232995216
Вопросов: 12
Ответов: 63
Web-сайт:
Профиль | | #5
Добавлено: 19.04.05 20:16
Оба, я неправильно понял вопрос
Номер ответа: 6
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #6
Добавлено: 19.04.05 20:18
Ни че, бывает
Номер ответа: 7
Автор ответа:
Vilya
ICQ: 232995216
Вопросов: 12
Ответов: 63
Web-сайт:
Профиль | | #7
Добавлено: 19.04.05 20:19
Ща исправлюсь
Номер ответа: 8
Автор ответа:
__Сергей__
Вопросов: 7
Ответов: 23
Профиль | | #8
Добавлено: 19.04.05 20:19
В этом и вся соль, символы разные, ну и переносы как обычно, да и последовательность 10 цифр не в каждой строке, так что простой цикл не "работает".
Номер ответа: 9
Автор ответа:
Vilya
ICQ: 232995216
Вопросов: 12
Ответов: 63
Web-сайт:
Профиль | | #9
Добавлено: 19.04.05 20:23
A-
Str1-
Str2-
For A=1 to len(str1)
if IsNumeric(Mid(str1,A,10)=True then
Str2=Val(mid(str1,A,10)
end if
next
Номер ответа: 10
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #10
Добавлено: 19.04.05 20:33
Vilya, а такой цикл может и не поймать...
Я бы просканил весь файл с начала и до конца начиная с первой, второй, ..., девятой позиций на наличие этой инфы.
Номер ответа: 11
Автор ответа:
__Сергей__
Вопросов: 7
Ответов: 23
Профиль | | #11
Добавлено: 19.04.05 20:50
А если файл метров под 10? Тормоза будут обеспечены.
Номер ответа: 12
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #12
Добавлено: 19.04.05 21:13
Тогда открывай файл как бинарный, читай в байтовый массив и начиная с первого элемента массива, смотри элементы, сравнивая с кодами цифровых символов.
Смотришь array(0). Если в диапазоне 30h - 39h, смотришь array(9). Если в диапазоне 30h - 39h - начинаешь смотреть между ними элементы. Если нет - переходишь к array(1)-array(10) и т.д.
Это делать нужно, и всё. Больше ничего.
Номер ответа: 13
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #13
Добавлено: 20.04.05 02:59
Для поиска в байтовом массиве прекрасно работает InStrB...
Номер ответа: 14
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #14
Добавлено: 20.04.05 05:49
Dim hFile As Long, i As Long, j As Long, k As Long
hFile = FreeFile
Open "c:\2.txt" For Binary Access Read As #hFile
ReDim arr(0 To LOF(hFile) - 1)
Get hFile, , arr
t = Timer
For i = 0 To UBound(arr()) - 9
If arr(i) > 47 Then
If arr(i) < 58 Then
If arr(i + 9) > 47 Then
If arr(i + 9) < 58 Then
For j = i + 1 To i + 8
If arr(j) < 48 Or arr(j) > 57 Then Exit For
If j = i + 8 Then
Dim s As String
For k = i To i + 9
s = s & Chr(arr(k))
Next k
MsgBox "Found at " & i & vbNewLine & s
GoTo EndSearch
End If
Next
i = j + 1
End If
End If
End If
End If
Next i
t = Timer - t
MsgBox "Not Found!" & " " & t
EndSearch:
Close hFile
Пробуй.
Условные переходы развернуты для увеличения скорости. Сводить их одну строку не надо. Потеряешь в скорости ровно вдвое.
Номер ответа: 15
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #15
Добавлено: 20.04.05 10:22
Также можно разбить содержимое файла в строковой массив, а затем в
этом деле можно спокойно поискать. Тоже способ. Наверное, медленнее,
но способ. Выбор твой - решать тебе.