Считывание переменных через ЗПТ

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Считывание переменных через ЗПТ

Сообщение LexBondAgent007 » 22.10.2005 (Сб) 15:03

Всем привет! Довно небыло проблем у меня и вот пожалуйста:

В text1 записано:
7,2,6,Hoster

Передаю я через WinSock данные:
WinServer.SendData text1
Клиент их получает
WinClient.GetData MyData, vbString

И получается, что MyData = Hoster ВМЕСТО MyData = 7,2,6,Hoster

Проблема: Как считать данные? Пробовал:
1) WinClient.GetData a,b,c,d, vbString
2) WinClient.GetData [a,b,c,d], vbString
Но в обоих случаях VB ругается, что типа так нельзя

Вопрос: Как нужно правельно поделить дату на 4 переменные в моем случае? HELP!
Это не читайте! Это спам! :D

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

Сообщение GSerg » 22.10.2005 (Сб) 15:06

Покажи _DataArrival.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 22.10.2005 (Сб) 15:25

Private Sub DataClient_DataArrival(ByVal bytesTotal As Long)
DataClient.GetData MyData, vbString
Label5.Caption = "Connected succesfully! Data: " & MyData
end sub

УСЕ!
Это не читайте! Это спам! :D

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.10.2005 (Сб) 15:30

А то, что данные приходят пакетами, мы не учитываем?
Изображение

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 22.10.2005 (Сб) 15:38

Понимаю что пакетами! Так как нужно их обрабатывать то? В этом и вся соль!
Это не читайте! Это спам! :D

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 22.10.2005 (Сб) 19:04

Народ! Ну помогите плз! А то проэкт на месте стоит! :cry:
Это не читайте! Это спам! :D

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

Сообщение GSerg » 22.10.2005 (Сб) 19:13

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 22.10.2005 (Сб) 19:31

GSerg
Этот позор удалять надо, а ты на него ссылку даешь :)
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

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

Сообщение GSerg » 22.10.2005 (Сб) 20:05

vvs_adm
Теперь ты знаешь, что не только ты так делаешь. Разве немного не легче? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 22.10.2005 (Сб) 20:08

Спасибо за ссылку, конечно... но вот я так и не понял на том примере ничего... Неужели поделить 4 числа через запятую, которые передались так сложно? А полегче примеры какие нибудь есть? Я же не PRO :)
Это не читайте! Это спам! :D

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

Сообщение GSerg » 22.10.2005 (Сб) 20:12

Это базовый пример.
Минимальный код для dataarrival.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 22.10.2005 (Сб) 20:13

В моем примере признаком конца данных был пробел, при этом в моем коде гарантируется, что в середине данных пробел встретиться не может. Пакеты прибавляются к пришедшим перед этим до тех пор, пока не найдем пробел, после чего обрабатываем.

В твоем случае, как и в любом, нужно определиться с форматом данных и решать в соответствии с этим. К примеру можно первым байтом передавать длину следующей команды, если предопределено, что её длина не превышает 255 символов... Ну и так далее, вариантов много. Можно при этом (да и не плохо бы, а то так за-зря и пропадет), использовать BytesTotal
Последний раз редактировалось vvs_adm 22.10.2005 (Сб) 20:16, всего редактировалось 1 раз.
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 22.10.2005 (Сб) 20:16

Хорошо... допустим.... а как потом раскидать все на 4 переменные
исход: 7,2,6,Hoster
после передачи:
a = 7
b = 2
c = 6
d = Hoster
:?: :?:
Это не читайте! Это спам! :D

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 22.10.2005 (Сб) 20:19

Ну если у тебя данные всегда такие, то и считывай сначала до запятой, потом опять до запятой, потом снова до запятой, потом слово до опр. символа :) Или еще что-нибудь придумай сам ... Вариантов-то тьма ;)
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 22.10.2005 (Сб) 20:29

Так и всеь вопрос в том: КАК считывать то? :)
Это не читайте! Это спам! :D

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

Сообщение GSerg » 22.10.2005 (Сб) 20:32

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 22.10.2005 (Сб) 20:37

Это понятно :lol:
Я имею ввиду как сначало до , потом опять до , и снова до , и потом слово?
Это не читайте! Это спам! :D

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 22.10.2005 (Сб) 20:50

Код: Выделить всё
dim sFullBufer as string

Private Sub DataClient_DataArrival(ByVal bytesTotal As Long)
  Dim sBufer as string
  Dim nEndPos as long
  Dim sResult as string

  DataClient.GetData sBufer, vbString
  sFullBufer=sFullBufer & sBufer
 
  nEndPos=Instr(1,sFullBufer,"символ конца строки")
  If nEndPos>0 Then
    sResult=Left$(sFullBufer,nEndPos-1)
    ' ну вот тут ты
    ' извращаешься над sResult
    sFullBufer=Right$(sFullBufer,len(sFullBufer)-nEndPos)
  End If
end sub


В итоге в sResult у тебя та строка "7,2,6,Hoster" , которую ты вначале никак не мог получить. А дальше делай с ней то, что и собирался.
Последний раз редактировалось vvs_adm 22.10.2005 (Сб) 21:02, всего редактировалось 2 раз(а).
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.10.2005 (Сб) 20:59

LexBondAgent007 писал(а):Это понятно :lol:
Я имею ввиду как сначало до , потом опять до , и снова до , и потом слово?

Поищи по форуму "Split без доллара".
Изображение

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 22.10.2005 (Сб) 20:59

У меня в итоге в sBufer - НИЧЕГО!
Это не читайте! Это спам! :D

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 22.10.2005 (Сб) 21:01

tyomitch писал(а):Поищи по форуму "Split без доллара".
Достаточно одной таблетки :lol: :lol: (т.е. просто Split)
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 22.10.2005 (Сб) 21:05

LexBondAgent007
А потом найденный сплит примени к эсрезалт.

P.S.: как прям в квесте... Нашел ... , попробовал применить ..., получил новое задание :lol:
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 22.10.2005 (Сб) 21:08

Мы забегаем вперед...
Посмотрите мое предыдущее сообщение!
в sResult НИЧЕГО НЕТу! пустота!

Чувствую, пора мне достовать уже с полки яд...
Это не читайте! Это спам! :D

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 22.10.2005 (Сб) 21:21

LexBondAgent007
Ну так ты кинь хоть кусок кода, где видно, что в sResult пустота...
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 22.10.2005 (Сб) 21:32

БОЖЕ МОЙ!!!!!!!!!!!!!!!!!!!!! ТАК Я ОТПРАВЛЯЛ ТО СОВСЕМ НЕ ТО ЧТО НАДО БЫЛО! ВМЕСТО 7,2,6,Hoster - Я ОТПРАВЛЯЛ ПРОСТО - Hoster
:oops: :oops:
Мдя............... ОК теперь разбиваем на 4 переменные sResult
Но вот со сплитом я тоже не понял:
Он у меня разбивает на буквы почемуто :( А как надо чтоб ЗПТ отделяли слова? И как потом все в переменные закидать?
Это не читайте! Это спам! :D

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 22.10.2005 (Сб) 21:37

КАКОЙ КОШМАР! Так он спокойно передает дату:

Private Sub DataClient_DataArrival(ByVal bytesTotal As Long)
DataClient.GetData MyData, vbString
Label5.Caption = "Connected succesfully! Data: " & MyData
end sub

И MyData = 7,2,6,Hoster

Теперь как это разбить на 4 переменные?
Последний раз редактировалось LexBondAgent007 22.10.2005 (Сб) 21:39, всего редактировалось 1 раз.
Это не читайте! Это спам! :D

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.10.2005 (Сб) 21:38

Твой код со сплитом покажи.
Похоже, ты ему задал лишние параметры.
Изображение

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 22.10.2005 (Сб) 21:39

Изображение
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 22.10.2005 (Сб) 21:41

LexBondAgent007 писал(а):КАКОЙ КОШМАР! Так он спокойно передает дату:

Private Sub DataClient_DataArrival(ByVal bytesTotal As Long)
DataClient.GetData MyData, vbString
Label5.Caption = "Connected succesfully! Data: " & MyData
end sub

И MyData = 7,2,6,Hoster

Теперь как это разбить на 4 переменные?


На самом деле в ЛЮБОЙ момент такой код даст тебе осечку. Пакет может обрезаться в самом неожиданном месте. Так как у тебя - делать нельзя. У тебя строка конечно короткая, но ты уверен разве, что сервер не успеет передать подряд несколько раз данные прежде, чем клиент их получит?
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 22.10.2005 (Сб) 21:47

tyomitch
Да я ему вообще параметры не задавал:
a = Split(Text1, ",")

vvs_adm
Спорить с ПРО не буду! Оставлю как посоветовал! Все = работает :lol:
Это не читайте! Это спам! :D

След.

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

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

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 139

    TopList