Кто нибудь может объяснить? У меня вообще не как не отрабатывают функции string возвращает только исходную переменную!
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
03.05.2015 19:41:59
"А если написать просто
Код
message("23:22:21",':',''))
Кстати, вы вторым параметром message передаёте 100, хорошо ли это?
Пользователь
Сообщений: Регистрация: 09.02.2015
04.05.2015 03:23:29
:)
Пользователь
Сообщений: Регистрация: 09.02.2015
05.05.2015 14:06:40
Разработчики могут прокомментировать ситуацию, потому что если делаем вызов функции без getInfoParam - message(string.gsub('23:22:21',':',''),100), она работает.
Michael Bulychev
Гость
05.05.2015 14:22:10
Добрый день. Соединение с сервером установлено при этом?
Пользователь
Сообщений: Регистрация: 09.02.2015
05.05.2015 14:33:09
да, сам getInfoParam('SERVERTIME') - время правильно показывает.
Michael Bulychev
Гость
05.05.2015 14:42:00
Вот так проверьте:
Код
xxx = getInfoParam('SERVERTIME')
message('Server time = ' .. xxx)
Пользователь
Сообщений: Регистрация: 23.01.2015
05.05.2015 14:57:42
Указанная проблема у нас не воспроизводится.
Пользователь
Сообщений: Регистрация: 09.02.2015
05.05.2015 18:24:53
Хэ, прикольно. И что это может быть за ерундой %(
Пользователь
Сообщений: Регистрация: 23.01.2015
05.05.2015 18:38:17
Цитата
Роман пишет: Хэ, прикольно. И что это может быть за ерундой %(
Какая версия терминала у Вас используется? Вы проверяли именно на следующей строке message( string.gsub(getInfoParam('SERVERTIME'),':',''),100) Или в коде есть другие? если естьпопробуйте в скрипте оставить только одну строку, и не запускайте другие скрипты если они есть. Также, следует проверить а тот ли скрипт Вы запускаете, возможно просто перепутали скрипты местами.
Пользователь
Сообщений: Регистрация: 09.02.2015
06.05.2015 23:02:08
Обновил ещё раз, заработало, надеюсь в дальнейшем проблем не будет.
Пользователь
Сообщений: Регистрация: 09.02.2015
07.05.2015 03:17:39
В общем сейчас ночь и она опять 25:10:00 - это наверное зависит в какое время запрашиваешь инфу, тогда и глючит.
Пользователь
Сообщений: Регистрация: 09.02.2015
07.05.2015 03:40:29
Или утечка памяти где-то :(
Пользователь
Сообщений: Регистрация: 09.02.2015
07.05.2015 04:06:16
И вот ещё tonumber(string.gsub(getInfoParam('SERVERTIME'),':','')) > 100 в промежутке подключения и загрузки таблиц выводит: attempt to compare number with nil, хотя упёрто не видит tonumber()
Пользователь
Сообщений: Регистрация: 09.02.2015
07.05.2015 04:18:30
версия 6.17.1.17
Пользователь
Сообщений: Регистрация: 23.01.2015
07.05.2015 10:00:38
Роман, те симптомы которые Вы описываете, возникают при отсутствии соединения с сервером. Вы точно уверены что соединение есть? Это можно определить по индикатору в нижнем правом углу окна терминала, в подключенном состоянии он зеленый.
Пользователь
Сообщений: Регистрация: 09.02.2015
07.05.2015 11:47:02
25:10:00 - отражает когда соединение есть, не зависимо от времени соединения, tonumber() выдающий ошибку attempt to compare number with nil - да в основном падает в начале соединения (скорее кажется когда таблицы закачает), здесь ещё не понятно почему tonumber() - nil отдаёт, причём даже ставлю tonumber(Time)~=nil and tonumberi(Time)>0 всеравно выводит attempt to compare number with nil
Пользователь
Сообщений: Регистрация: 23.01.2015
07.05.2015 11:53:16
Роман, В общем то что у Вас происходит не поддается какому-либо объяснению. В виду чего дальнейший анализ не представляется возможным. Присылайте скриншоты, на подобии того что я выложил, чтобы было видно код, терминал, и результат работы этого кода.
Пользователь
Сообщений: Регистрация: 23.01.2015
07.05.2015 11:55:58
Цитата
Роман пишет: tonumber(Time)~=nil and tonumberi(Time)>0
в строке ошибка, исправьте
Код
if tonumber(Time)~=nil and tonumber(Time)>0
И чему равна переменная Time??
Пользователь
Сообщений: Регистрация: 09.02.2015
07.05.2015 12:54:04
У него type(Time) равен string но на tonumber(Time)>0 - attempt to compare number with nil, ну вот какой из tonumber() nil?
вот пример одного из кодов который валится на тайме:
Код
function TTime()
local Time = Stime()
--message('('..tostring(Time)..'
> 95959 and '..tostring(Time)..' < 135955) or ('..
tostring(Time)..' > 140259 and '..tostring(Time)..' < 184400) and
'..tostring(see_td("LOC_DATE"))..' ==
'..tostring(see_td("TRADE_DATE")),100000)
if (Time ~= nil and (Time
> 95959 and Time < 135955) or (Time > 140259 and Time <
184400)) then - attempt to compare number with nil на Time
> 95959
return "T"
end
return "-"
end
function Stime()
local Ftimes = 0
Ftimes = getInfoParam("SERVERTIME") -- ночью показывает 25:12:45
return tonumber(string.sub(Ftimes,0,2)..string.sub(Ftimes,4,5)..string.sub(Ftimes,7,9))
--return tonumber(string.gsub(getInfoParam('SERVERTIME'),':',''))
end
Michael Bulychev
Гость
07.05.2015 13:00:55
Добрый день.
Код
str = "23:23:23"
--[[
if tonumber(str:gsub(':','')) > 100 then -- так не работает - " attempt to compare number with nil "
print('111')
end
--]]
if tonumber((str:gsub(':',''))) > 100 then -- так работает
print('111')
end
Пользователь
Сообщений: Регистрация: 09.02.2015
07.05.2015 13:49:58
З.ы. заплатками я то же проблему решаю, но здесь галюкан который и скрипт вырубить может - а потом мне ушами хлопать, куда деньжищи пропали.
Пользователь
Сообщений: Регистрация: 09.02.2015
07.05.2015 14:00:06
Кстати, к примеру на отпарсенный getInfoParam("TRADEDATE") - не каких жалоб.
Michael Bulychev
Гость
07.05.2015 14:13:02
Это не заплатки. перечитайте еще раз внимательно документацию по string.gsub и tonumber
string.gsub('23:23:23', ':', '') возвращает два значения: '232323' и 2, которые передаются в tonumber В свою очередь, tonumber пытается перевести '232323' в число по основанию 2 и возвращает nil
Пользователь
Сообщений: Регистрация: 09.02.2015
07.05.2015 14:38:47
, а вот это я не заметил: '232323' и 2. Но все равно с.м. вариант функции которую я выше выложил там используется string.sub(Ftimes,0,2)..string.sub(Ftimes,4,5)..string.sub(Ftimes,7,9) и он все равно муть какую-то возвращает, второго параметра там ну не как не откуда взятся.
if tonumber((string.gsub(getInfoParam('SERVERTIME'),':','')) or '0') > 100 then - так более подходяще.
Пользователь
Сообщений: Регистрация: 23.01.2015
07.05.2015 14:57:59
Цитата
Роман пишет: , а вот это я не заметил: '232323' и 2. Но все равно с.м. вариант функции которую я выше выложил там используется string.sub(Ftimes,0,2)..string.sub(Ftimes,4,5)..string.sub(Ftimes,7,9) и он все равно муть какую-то возвращает, второго параметра там ну не как не откуда взятся.
if tonumber((string.gsub(getInfoParam('SERVERTIME'),':','')) or '0') > 100 then - так более подходяще.
Проблема изучается. Постараемся в ближайшее время дать ответ.
Пользователь
Сообщений: Регистрация: 09.02.2015
07.05.2015 14:58:41
Заплатки я в принципе поставил. Но вот эта проблема с влитом в процессе загрузки таблиц до сех пор смущает. Хотя я думал что и tonumber не может выдавать nil - а оказывается может :(
- спасибо, да посмотрите пожалуйста, с датой торгов таких проблем нет.
Пользователь
Сообщений: Регистрация: 09.02.2015
07.05.2015 15:06:48
когда она не только nil возвращает, но и attempt to compare number with nil на Time выдаёт
Пользователь
Сообщений: Регистрация: 23.01.2015
07.05.2015 15:20:21
Цитата
Роман пишет: когда она не только nil возвращает, но и attempt to compare number with nil на Time выдаёт
так мы же уже решили эту проблему, или нет?
Пользователь
Сообщений: Регистрация: 09.02.2015
07.05.2015 15:48:50
tonumber((string.gsub(getInfoParam('SERVERTIME'),':','')) or '0') все равно равен nil при закачки таблиц tonumber((string.gsub(getInfoParam('SERVERTIME'),':','')) or '0') > 0 attempt to compare number with nil
в общем я поставил так Stime() ~= nil робот продолжает работа.
в общем я поставил так Stime() ~= nil робот продолжает работа.
Можно так написать:
Код
return tonumber((string.gsub(getInfoParam('SERVERTIME')),':','')) or -1
Пользователь
Сообщений: Регистрация: 09.02.2015
07.05.2015 16:22:29
ну или так, только скобку подправить: return tonumber((string.gsub(getInfoParam('SERVERTIME'),':',''))) or -1
С этим просто какая то ерунда, кода нет соединения или таблицы загружаются, getInfoParam('SERVERTIME') не равняется не nil и не времени :( поэтому даже если поставить проверку getInfoParam('SERVERTIME') ~= nil она про игнорируется, у того же LASTRECORDTIME - постоянно есть запись в ячейки.
Пользователь
Сообщений: Регистрация: 23.01.2015
07.05.2015 16:30:09
Цитата
Роман пишет: кода нет соединения или таблицы загружаются,
SERVERTIME - это время сервера, если нет соединения с сервером, нельзя узнать время сервера. LASTRECORDTIME - это время последнего изменения, оно просто висит
Пользователь
Сообщений: Регистрация: 09.02.2015
07.05.2015 16:43:57
да я так и понял :), в мануале не помещало инфу об этом добавить.
И последний вопрос, по дате:
string.gsub(getInfoParam('TRADEDATE'),'.',''). Парни, а кто нибудь знает как в string.gsub точку указать для паттерна? '\.' - такой вариант тоже не берёт.
Пользователь
Сообщений: Регистрация: 23.01.2015
07.05.2015 16:51:28
Код
string.gsub(getInfoParam('TRADEDATE'),'[.]','')
Пользователь
Сообщений: Регистрация: 09.02.2015
07.05.2015 17:23:08
спасибо!
Пользователь
Сообщений: Регистрация: 09.02.2015
07.05.2015 17:42:24
кстати, а почему на TRADEDATE, дата не с года, а с числа начинается?
Пользователь
Сообщений: Регистрация: 23.01.2015
07.05.2015 17:48:45
Цитата
Роман пишет: кстати, а почему на TRADEDATE, дата не с года, а с числа начинается?
формат даты DD.MM.YYYY соответствует ГОСТ Р 6.30-2003 (п. 3.11).
Пользователь
Сообщений: Регистрация: 09.02.2015
07.05.2015 19:23:41
Ну всё, теперь все на местах, заплаток конечно получилось многовато, но вроде машина завилась. Спасибо!
Ошибка будет исправлена в одной из следующих версий программы
Мне интересно, что тут можно исправить, если время "сбрасывается" при смене торговой даты, которая в свою очередь меняется при перезагрузке сервера? Не вижу никаких проблем в использовании того формата времени, что есть сейчас, наоборот даже удобство: 1) Если время > 23:50 - значит торги уже закончились 2) Если время < 09:30 - значит начался новый торговый день, но торги ещё не начались
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 23.01.2015
08.05.2015 12:57:17
Цитата
Серж пишет: Мне интересно, что тут можно исправить, если время "сбрасывается" при смене торговой даты, которая в свою очередь меняется при перезагрузке сервера?
речь идет о появлении времени > 24 часов
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
08.05.2015 13:29:36
Цитата
Sergey Gorokhov пишет: речь идет о появлении времени > 24 часов
Если кому-ту будет легче, если часы "застынут" на 23:59:59, то ок :D Главное, чтоб дата торгов не менялась в выходные дни.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 24.04.2015
16.07.2015 14:38:02
Тоже столкнулся с этой ошибкой, когда потребовалось конвертировать дату, для сохранения в базу, посыпались ошибки. До времени 23:59:59 всё в порядке, а далее .... вместо 00:00:00 показывает 24:00:00. Далее дождался ещё час и хотел увидеть 01:00:00, а увидел 25:00:00. Дальше ждать не стал... Версия терминала последняя, соединение установлено. Это будние дни, что происходит в выходные ещё не смотрел. Это однозначно ошибка, все пользователи не должны сами отслеживать и ставить заплатки...разберитесь.
Пользователь
Сообщений: Регистрация: 31.01.2015
16.07.2015 15:59:27
Цитата
DronGO пишет: дождался ещё час и хотел увидеть 01:00:00, а увидел 25:00:00
А что бы Вы хотели увидеть, если дата торгов еще не сменилась? Насколько я понимаю, она меняется только утром. Если бы время начало отсчитываться заново с 0 часов прежде чем сменится дата торгов, то это выглядело бы так, будто мы вернулись в прошлое и начали вчерашний день заново. К каким неожиданным последствиям это может привести - можно только гадать, но очевидно, что это могло бы ввести в заблуждение каких-нибудь роботов и т.д. По-моему, ничего особо страшного во времени, превышающем 24 часа, нет. В данном случае это меньшее из двух зол.
Пользователь
Сообщений: Регистрация: 24.04.2015
17.07.2015 00:40:24
Цитата
Дмитрий пишет: А что бы Вы хотели увидеть, если дата торгов еще не сменилась? Насколько я понимаю, она меняется только утром.
А почему дата меняется только утром? а не в 00:00:00?