Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Binary Reading Добавлено: 23.09.05 19:19  

Автор вопроса:  Amor | ICQ: 1268198 
Как прочитать binary файл до опроделённого символа или даже строки с последующей перезаписью файла с добавления новой инфы

пример:
файл "GIF98axxxxxxxx,yyyyy;" вот мне надо заменить ",yyyyy;"

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #1
Добавлено: 23.09.05 21:27
dim nf as integer, i as long
dim str as string, tstr as string

str = "yyyyy"
nf = freefile()

open filename for binary read write access as nf
    for i = 1 to lof(nf) - len(str) step len(str)
        tstr = space(len(str))
        get nf, i, tstr

        if tstr = str then
            put nf, i, "hello"
        end if
    next
close nf

Ответить

Номер ответа: 2
Автор ответа:
 el-paso



Вопросов: 3
Ответов: 164
 Профиль | | #2 Добавлено: 23.09.05 23:45
sne, приведённый алгоритм не подойдёт, ибо не учитывает вариант, когда искомая строка находится на стыке буферов чтения.

Amor, не ясно, будут ли заменяемая и заменяющая строки одинаковой длины. от этого зависит сложность алгоритма.

Ответить

Номер ответа: 3
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #3 Добавлено: 27.09.05 11:38
ИМХО, если файл не особо большой - считать его в строку (если большой - поэтапно, с кешированием границ). Найти через InStr свою строку, и заменить её. Кроме того, придется лишний раз открыть и закрыть файл на Output, т.к. если новая строка окажется короче старой - в файле будет лишний мусор.

Ответить

Номер ответа: 4
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #4
Добавлено: 27.09.05 21:30
2el-paso, каких буферов... я что-то не догнал чуть чуть :))

А вообще step убрать - и все будет великолепно ;)

Ответить

Номер ответа: 5
Автор ответа:
 el-paso



Вопросов: 3
Ответов: 164
 Профиль | | #5 Добавлено: 27.09.05 22:31
О, да... Без него всё будет прекрасно... Если файл не слишком большой.

Ответить

Номер ответа: 6
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #6
Добавлено: 28.09.05 07:10
Тебе нужно не прочитать до определённой позиции, а считывать заголовки.
Например ты можешь использовать такую структуру (писал сам, так что может несовпасть с официальной):
Type MainHeader
 Signature As String * 3
 Version As String * 3
End Type

Type LogicalDescriptor
 Width As Integer
 Height As Integer
 BitFields As Byte
 BackColor As Byte
 Scale As Byte
End Type

Type GlobalInfo
 Header As MainHeader
 ;Descriptor As LogicalDescriptor
End Type

Private MainInfo As GlobalInfo

 Ну и считываешь запись MainInfo из файла по начальной позиции.
Ну а работать с ней можно например так
Function GifInfo(MainInfo As GlobalInfo) As String
 Select Case MainInfo.Header.Signature
 Case "GIF"
  Select Case MainInfo.Header.Version
  Case "87a", "89a"
   GifInfo = MainInfo.Header.Version
  Case Else
   GifInfo = "Unknown"
  End Select
 Case Else
  Exit Function
 End Select
End Function

 Это для примера, а ты просто меняешь нужные поля записи MainInfo и пишешь эту структуру обратно в файл.

Ответить

Страница: 1 |

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



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