Чтение файла методом Random
Открываю файл методом Random.
В модуле пользовательский тип данных, в котором несколько переменных.
Читаю данные циклом:
Private Sub Pokaz()
Dim X As Byte
On Error Resume Next
For X = 0 To 1
Get #2, X + Start, Blok
Text2(X) = RTrim(Blok.xx)
Text3(X) = RTrim(Blok.yy)
Text4(X) = RTrim(Blok.zz)
Next X
On Error GoTo 0
End Sub
Но проблема такая, что в начале файла несколько байтов не нужные и их читать ненадо. Как сделать чтобы чтение начиналось с определённого байта, а дальше шло как обычно.
Но проблема такая, что в начале файла несколько байтов не нужные и их читать ненадо. Как сделать чтобы чтение начиналось с определённого байта, а дальше шло как обычно.
Всё дело в операторе Get:
Get номер,позиция,переменная
Если тебе надо пропустить первые 4 байта, то пишешь:
Get номер,4,переменная.
Если тебе надо пропустить первые 133 байта, то пишешь:
Get номер,133,переменная.
Надеюсь ты понял логическую связь.
P.S. Уже как 2 года на Basic'e не программирую - только на С++ и Асме, но знания, вроде, отсались :-). Ностальгия меня берет, вот и захожу сюда иногда.
Всё дело в операторе Get:
Get номер,позиция,переменная
Если тебе надо пропустить первые 4 байта, то пишешь:
Get номер,4,переменная.
Если тебе надо пропустить первые 133 байта, то пишешь:
Get номер,133,переменная.
Странно...
У меня получается так:
Если написать Get номер,4,переменная, то ,будет пропуск не четырёх байтов, а моих четырёх данных (пользовательские которые). Но они то другого размера. Они у меня по 30 байт. Получается чтение начнётся со 120 байта. А нады с пятого:roll:
Странно...
У меня получается так:
Если написать Get номер,4,переменная, то ,будет пропуск не четырёх байтов, а моих четырёх данных (пользовательские которые). Но они то другого размера. Они у меня по 30 байт. Получается чтение начнётся со 120 байта. А нады с пятого:roll:
Чтобы пропускать байтами надо открыть файл в режиме Binary. А в режиме Random идет пропуск по записям. Но можно создать соответств. структуру записи, например:
Type Record
xx As String * 20 ' для пропуска 20 байтов
ID As Integer ' твоя переменная
End Type
Dim MyRecord As Record
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
Get #1, , MyRecord
Чтобы пропускать байтами надо открыть файл в режиме Binary. А в режиме Random идет пропуск по записям. Но можно создать соответств. структуру записи, например:
Type Record
xx As String * 20 ' для пропуска 20 байтов
ID As Integer ' твоя переменная
End Type
Dim MyRecord As Record
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
Get #1, , MyRecord
Так тут получается в этом случае переменная xx будет каждыё раз считываться.
---------
Неужели остаётся только Binary метод???
Так тут получается в этом случае переменная xx будет каждыё раз считываться.
---------
Неужели остаётся только Binary метод???
А какие неудобства с Binary?
В твоем первоначальном примере надо лишь заменить сначала Random на Binary и умножить X на *rLen(длина записи)
Get #2, X*rLen + Start, Blok