Какая-то неясность с Binary

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Alfa
Бывалый
Бывалый
 
Сообщения: 249
Зарегистрирован: 12.01.2003 (Вс) 20:15
Откуда: Россия, Красноярск

Какая-то неясность с Binary

Сообщение Alfa » 13.10.2003 (Пн) 15:25

Вот такой код не работает :
Код: Выделить всё
Dim gettextfromfile As String
Open "C:\dadattt.txt" For Binary As #1
gettextfromfile = 8 'Без этой строки не работает
Get #1, 7, gettextfromfile
Close #1
MsgBox "5" & gettextfromfile & "5" '5 и 5 для показания начала и конца строк

А так :
Код: Выделить всё
Dim gettextfromfile As String
Open "C:\dadattt.txt" For Binary As #1
'gettextfromfile = 8
Get #1, 7, gettextfromfile
Close #1
MsgBox "5" & gettextfromfile & "5"

ничего.(Кроме конечно 55)

С чем это связано, не поможете?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4158
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 13.10.2003 (Пн) 16:49

Второй вариант тоже работает, только gettextfromfile имеет нулевую длину. Лучше так:

gettextfromfile = space$(LenTextInByte)
Get #1, , gettextfromfile

Alfa
Бывалый
Бывалый
 
Сообщения: 249
Зарегистрирован: 12.01.2003 (Вс) 20:15
Откуда: Россия, Красноярск

Ответ

Сообщение Alfa » 14.10.2003 (Вт) 4:54

А тогда сколько надо было вытягивать?

И должно же быть так :
Get #номер, сколько, куда

А сколько куда девается?

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 14.10.2003 (Вт) 7:16

И должно же быть так :
Get #номер, сколько, куда

На самом деле
Код: Выделить всё
Get #номер_файла, где_в_файле, куда_писАть

А сколько писАть, определяет реальный размер строки в твоем случае.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Alfa
Бывалый
Бывалый
 
Сообщения: 249
Зарегистрирован: 12.01.2003 (Вс) 20:15
Откуда: Россия, Красноярск

Ответ

Сообщение Alfa » 14.10.2003 (Вт) 7:46

Это же Put, а не Get получается....

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.10.2003 (Вт) 8:02

Нет, получается get.
При работе с файлами, открытыми в бинарном режиме, Get тырит столько, каков размер переменной, в которую производится тыренье. Если переменная Long, будет стырено 4 байта. В случае со строкой тырится столько байт, какова длина строки на момент тыринья. Так что делай space$(lof(n)).
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Alfa
Бывалый
Бывалый
 
Сообщения: 249
Зарегистрирован: 12.01.2003 (Вс) 20:15
Откуда: Россия, Красноярск

Ответ

Сообщение Alfa » 14.10.2003 (Вт) 13:45

То есть так :
Код: Выделить всё
HowMany = 20
GetTextFromFile = space$(HowMany)
Get #1, HowMany, GetTextFromFile

?

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 14.10.2003 (Вт) 14:47

ф-ция Space заполеяет твою строковую переменную таким кол-вом пробелов, сколько ты укажешь в качестве параметра. Например:
dim x as string

x=space$(20)

тогда переменная х будет заполнена 20 пробелами. тоесть, она занимает 20 байт. когда ты будешь "тырить" данные из файла таким обрабом:

get #fileno,, x

то в переменную x будет записано столько байт, сколько переменная х занимает в памяти. А т.к. она занимает 20 байт, то будет загружено 20 байт. а работать с ними так (в цикле делай что хочешь):

for i = 1 to len(x)
msgbox asc(x)
next i

Если ты хочешь прочитать, например, с байта 10 до байта 20, то можно сделать и так:

dim x as string
x = space$(10)
seek #fileno, 10
get #fileno,,x

Вот и всё! Ничего сложного нет!

_NeoN_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 14.08.2003 (Чт) 9:48
Откуда: Новосибирск

Сообщение _NeoN_ » 15.10.2003 (Ср) 18:31

А если хочешь прочитать весь файл то пиши
x=space$(lof(1))
get #1,,x


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 3

    TopList