Я работаю над проектом, в котором я ищу в большом текстовом файле (большой - относительный, размер файла около 1 Гб). Я ищу токен и хочу получить долларовую стоимость сразу после этого токена. Например,
это токен 9,999,999,99
Так вот как я подхожу к этой проблеме. После небольшого анализа выясняется, что токен обычно находится в конце файла, поэтому я подумал, что начать поиск с конца файла. Вот код, который у меня есть (vb.net):
Dim sToken As String = "This is a token"
Dim sr As New StreamReader(sFileName_IN)
Dim FileSize As Long = GetFileSize(sFileName_IN)
Dim BlockSize As Integer = CInt(FileSize / 1000)
Dim buffer(BlockSize) As Char
Dim Position As Long = -BlockSize
Dim sBuffer As String
Dim CurrentBlock As Integer = 0
Dim Value As Double
Dim i As Integer
Dim found As Boolean = False
While Not found And CurrentBlock < 1000
CurrentBlock += 1
Position = -CurrentBlock * BlockSize
sr.BaseStream.Seek(Position, SeekOrigin.End)
i = sr.ReadBlock(buffer, 0, BlockSize)
sBuffer = New String(buffer)
found = SearchBuffer(sBuffer, sToken, Value)
End While
GetFileSize - это функция, которая возвращает размер файла. SearchBuffer - это функция, которая будет искать строку для токена. Я не знаком с регулярными выражениями, но исследую его для этой функции.
Обычно я читаю в небольшом фрагменте файла поиск, и если я не нахожу его, загружают другой фрагмент и так далее ...
Я на правильном пути или есть лучший способ?