Неужели тебе
Code:
...return string
...
ни о чём не говорит?
Пишешь в своём главном скрипте и всё ок:
Code:
...
x=waitingforvalue()
...
Вобщем для тебя выкладываю 100% рабочий вариант с примером:
В моём случае кодовым словом было "asd", num=3 (Когда я произносил в клиенте строчку "
asd 1234", в журнале было написано: "
DerMeister: asd 1234", тоесть мне нужно было "схватить" третье по счёту слово из строки журнала [не забывай: разделители слов -
ПРОБЕЛЫ]...)
Code:
sub main()
var x
wait(2000)
uo.print("Vvedite X")
x=waitingforvalue()
wait(2000)
uo.print(x)
end sub
sub waitingforvalue()
uo.deletejournal()
while not uo.injournal('asd')
wait(100)
wend
var string=uo.journal(uo.injournal('asd')-1)
string=GetWord(string,3)
return string
end sub
#А тут превеед от Edred'a =)
Sub GetWord( st, nom )
; (c) Edred
; Возвращает слово из строки str за номером num
; если такого слова нет - возвращаем ''
;
; Разделителем слов считаем пробел. Несколько пробелов подряд считаются за один.
; Функция сделана без рекурсии специально для считывания слов из сверхдлинных строк!
;
VAR tmpst, i, dlin, kol = 0, start = 0
dlin = len( st )
For i=0 To dlin - 1
If mid( st, i, 1 ) == ' ' OR i == dlin - 1 Then
kol = kol + 1
If kol == nom Then
; это первый пробел после нужного нам слова
tmpst = mid( st, start, i - start + 1 )
return tmpst
Else
While mid( st, i, 1 ) == ' '
i = i + 1
Wend
If kol == nom - 1 Then
start = i
Endif
Endif
Endif
Next
tmpst = ''
return tmpst
end sub
ЗЫ:Можно еще проверку на серийник сообщения приляпать, но это ты уж сам как нить...
ЗЗЫ: Я хз, но почему-то в оригинале процедуры GetWord( st, nom ) , она возвращала слово, но БЕЗ последней буквы (видимо это происходит только когда берешь последнее слово из строки (я там подправил чтоб всё норм было для случая, когда посленее слово берём)).