Здравствуйте, гость ( Вход | Регистрация )

11 страниц V < 1 2 3 4 5 > »   
Ответить в эту темуОткрыть новую тему
> Lua
cirus
сообщение 5.4.2017, 2:14
Сообщение #41


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26576
Пользователь №: 16.971
Возраст: 29



Код
--lua
a = 10.3 - 5.4
log (a)

b = 10.345 + 3.67
log (b)

В логе:
Код
4,90
14,02

Десятичный разделитель в логе запятая вместо точки.
Как-то можно избавиться от округления до двух знаков после точки?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 5.4.2017, 3:03
Сообщение #42


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27707
Пользователь №: 11.279



Цитата
Десятичный разделитель в логе запятая вместо точки.

Скорее всего кретинические стандарты русской локали. Я хз какой дебил придумал стандартизировать запятую.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 5.4.2017, 11:01
Сообщение #43


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20894
Пользователь №: 16.156



А запятае так критична ? Он же и с запятой все рассчитывает.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 5.4.2017, 13:30
Сообщение #44


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26576
Пользователь №: 16.971
Возраст: 29



Может и не критично, получается пишешь точку, в результате запятая.
Так должно быть?:
Код
--lua
log ("mode compact")
s = 10.3 - 5.4
log (s)

s = tostring(10.3 - 5.4)
log (s)

s = tostring(10.3578 - 5.443)
log (s)

Лог:
Код
4,90
4.9
4.9148
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 6.4.2017, 0:04
Сообщение #45


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27707
Пользователь №: 11.279



разница в том, что log() при выводе в лог делает свой внутренний дельфийский tostring() и он при конвертации использует настройки локали. Когда же ты делаешь tostring() в луа, то там не используются настройки локали. Это две разные функции на двух разных языках, две реализации одной задачи. Они просто работают чуть по разному. В текущей ситуации имхо лучше не обращаться к локали, чем обращаться к этому бреду.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 6.4.2017, 1:09
Сообщение #46


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1320
Пользователь №: 18.346
Возраст: 25



Похоже на то что вы между собой на марсианском разговариваете (IMG:style_emoticons/default/blink.gif) (IMG:style_emoticons/default/laugh.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 6.4.2017, 14:26
Сообщение #47


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20894
Пользователь №: 16.156



Код
os.setlocale()


В луа используется си-локаль, в делфи системная. Только из пилота у меня так и не вышло установить нужную.


P.s. А если смешать запятые и точки в выражении, то результат будет отличаться от выражения, где одни точки или запятые.

Цитата
при выводе в лог делает свой внутренний дельфийский tostring()


Спорно. Скорее всего лог принимает уже готовую строку, которую вернул луа. Т.к. формат переменных в делфи и луа может быть разный, легче передавать pchar.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 6.4.2017, 18:57
Сообщение #48


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



Луа возвращает double, но лог принимает уже готовую строку, которую конвертирует и обрезает прослойка.
Округление до двух знаков после точки починил.
С запятой сложнее.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 6.4.2017, 20:03
Сообщение #49


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27707
Пользователь №: 11.279



Цитата
В луа используется си-локаль, в делфи системная.

Си-локаль? Это как? Вообще в плюсах при русской локали точно так же вылазит запятая.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 6.4.2017, 21:14
Сообщение #50


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20894
Пользователь №: 16.156



Цитата(DarkMaster @ 6.4.2017, 20:03) *

Си-локаль? Это как? Вообще в плюсах при русской локали точно так же вылазит запятая.



Это локаль для работы Си программ. Именно Си. И программе, которая юзает такую локаль, плевать на рег. настройки. В с++ используются другие механизмы, на сколько знаю.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 7.4.2017, 0:11
Сообщение #51


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27707
Пользователь №: 11.279



Цитата
Это локаль для работы Си программ. Именно Си. И программе, которая юзает такую локаль, плевать на рег. настройки. В с++ используются другие механизмы, на сколько знаю.

Там вручную устанавливается локаль, и если ты вставишь русскую локаль - у тебя будет та же самая запятая. При этом нужно понимать, что не все функции ее учитывают. Есть специально написанные дабл->стринг и стринг->дабл, которые учитывают возможное появление запятой и принудительно ставят точку. Искал в свое время. Более того скажу, что в сях при разной включенной раскладке можно начать получать разный результат на выводе. Т.е. я ставил русскую локаль и при этом если в пилоте была англ раскладка включена, то получал точку, а если русская, то получал запятую. Понимаешь, почему в итоге я использовал сторонние функции? Реализация локалей спорная, а стандарт русской локали глубоко ошибочен.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 8.4.2017, 10:09
Сообщение #52


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27707
Пользователь №: 11.279



как прилинковывать в случае пилота дллки луашные?
http://w3.impa.br/~diego/software/luasocke...stallation.html
нативно не получилось.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 9.4.2017, 12:32
Сообщение #53


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20894
Пользователь №: 16.156



Цитата
Там вручную устанавливается локаль



Где там ?

Цитата
если ты вставишь русскую локаль - у тебя будет та же самая запятая


Код
setlocale(LC_NUMERIC, "ru_RU.UTF-8");
printf("%1.3f", 2.645);


Выводит с точкой

Код
setlocale(LC_NUMERIC, "");
printf("%1.3f", 2.645);


С запятой.

Код
printf("%1.3f", 2.645);


Выводит с точкой. Без setlocale.

Если отказаться от си-функций

Код
std::cout << 2.64 << std::endl;


Выводит с точкой в независимости от того был ли вызов setlocale или нет.

Если же ты имеешь в виду класс locale, то он не работает для printf. Объект такого класса нужно привязывать к потокам и/о.


П.С. хочу еще заметить, что играет роль кодировка исходников, т.к. компилятор явно ( setlocale(LC_NUMERIC, "") ) и не явно задает локаль для функций, основываясь на кодировке исходника. У меня такая : Unicode (UTF-8 with signature) - Codepage 65001, у тебя же скорее всего Codepage -1251.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 9.4.2017, 14:12
Сообщение #54


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27707
Пользователь №: 11.279



я юникод не юзал, а в рульном ASCII все делал)


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 25.4.2017, 13:34
Сообщение #55


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26576
Пользователь №: 16.971
Возраст: 29



Код
--lua
arr = {{}}
arr [1][1] = 20
arr [2][1] = 15

Что не так?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 25.4.2017, 20:40
Сообщение #56


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27707
Пользователь №: 11.279



Если в 2 словах, то ты объявил некоторый массив и первому элементу присвоил другой массив. Дело в том, что второму элементу не присвоен массив, соответственно прозрачно не дает использовать индекс. В неявном виде подобное преобразование не проходит. Присмотрись

Код
arr [1][1] = 20
arr [2] = 15
--arr [2][1] = 15
log (arr[1][1], arr[2])


Нужно просто предварительно присвоить элементу массив.
Код
arr = {{}}
arr [1][1] = 20
arr [2] ={}
arr [2][1] = 15
log (arr[1][1], arr[2][1])

Либо можно это делать специальным оператором:
Код
local t = {1, 2, 3, 4, 5}
table.insert(t, 6) -- добавляет элемент в конец массива. Теперь  t = {1, 2, 3, 4, 5, 6}
table.insert(t, 0, 1) -- вставляет элемент по индексу, сдвигая оставшиеся элементы массива. Теперь  t = {0, 1, 2, 3, 4, 5, 6}
table.remove(t, 3) -- удаляет из таблицы элемент по индексу 3 и сдвигает оставшиеся элементы. Теперь t = {0, 1, 3, 4, 5, 6}


Сообщение отредактировал DarkMaster - 25.4.2017, 20:41


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 26.4.2017, 2:39
Сообщение #57


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26576
Пользователь №: 16.971
Возраст: 29



В пилотовском варианте намного проще (IMG:style_emoticons/default/smile.gif)
Код
--lua
arr = {}
arr [1] = 20
arr [2] = 15
table.sort(arr)
log (arr[1], arr[2])
--Тут всё понятно.

Как сортировать это?:
Код
--lua
arr = {}
arr [1] = {20, 10, 15}
arr [2] = {15, 5, 13}

Т. е. должно получится:
Код
arr [1] = {15, 5, 13}
arr [2] = {20, 10, 15}


Код
--lua
h, m , s = string.match("11:33:55", "(%d+):(%d+):(%d+)")
log (h, m , s)

Реально ли прикрутить регэкспы перл? В регулярках луа отсутствуют \d{3,5}, |, (?<=), (?=) и прочее. По сути они вообще какие-то урезанные.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 26.4.2017, 19:53
Сообщение #58


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27707
Пользователь №: 11.279



Цитата
Как сортировать это?:

table.sort (table [, comp])

Сортирует элементы таблицы в заданном порядке, внутри таблицы, начиная с table[1] и заканчивая table[n], где n – длина таблицы. Если параметр comp задан, то он должен быть функцией, которая для двух получаемых параметров возвращает true если первый из них меньше второго (т.о. not comp(a[i+1],a[i]) будет верно для любого i будет давать true после окончания сортировки). Если comp не задан, то вместо него будет использован стандартынй оператор Lua "<".

Алгоритм сортировки не стабилен; в том смысле, что равные элементы могут быть переставлены в процессе сортировки.

Цитата

Реально ли прикрутить регэкспы перл? В регулярках луа отсутствуют \d{3,5}, |, (?<=), (?=) и прочее. По сути они вообще какие-то урезанные.

можно попробовать линкануть либу, но я так и не понял как в пределах пилота это делать.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 27.4.2017, 3:19
Сообщение #59


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26576
Пользователь №: 16.971
Возраст: 29



Справку по луа я читал и не одну, так что копипаст не поможет. От примеров больше пользы.

Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 27.4.2017, 13:26
Сообщение #60


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26576
Пользователь №: 16.971
Возраст: 29



Можно ли сделать чтобы функция загружалась из тхт файла?
Т. е. вместо этого:
Код
function MyFunc()
    код функции
end

Загрузка функции из тхт файла.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

11 страниц V < 1 2 3 4 5 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 29.3.2024, 4:25
Designed by Nickostyle