Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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 arr() As Byte, t As Single
    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
Также можно разбить содержимое файла в строковой массив, а затем в
этом деле можно спокойно поискать. Тоже способ. Наверное, медленнее,
но способ. Выбор твой - решать тебе.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам