Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы) |
Здравствуйте, гость ( Вход | Регистрация )
Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы) |
10.4.2015, 13:41
Сообщение
#1021
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
MIKHAIL, просто взять и "открыть видимость", естественно, не получится, поскольку у каждого скрипта свое собственное окружение. Однако, некоторые программы (например RusHub) позволяют скриптам обмениваться данными между собой при помощи специально предназначенных для этого функций.
|
|
|
31.10.2015, 22:10
Сообщение
#1022
|
|
KEEP CLEAR AT ALL TIMES Группа: Пользователи Сообщений: 141 Регистрация: 4.9.2011 Из: Беларусь, Минск Пользователь №: 9 667 Спасибо сказали: 3 раза |
Как наиболее правильно определить тип операционной системы (Windows/Unix) и её разрядность средствами самой Луа?
|
|
|
1.11.2015, 1:55
Сообщение
#1023
|
|
Продвинутый участник Группа: Пользователи Сообщений: 176 Регистрация: 11.7.2008 Пользователь №: 171 Спасибо сказали: 182 раза |
Core.GetDCStats()
|
|
|
1.11.2015, 5:16
Сообщение
#1024
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
MIKHAIL, вот тут кодик, как определить - винда или *nix:
Код 1 Код local sAdmin = "MIKHAIL" f,e = io.popen("uname -o 2>/dev/null","r") if f then osname = f:read() end if osname then Core.SendToNick(sAdmin, osname) else Core.SendToNick(sAdmin, "Непонятно, что за ось тут, наверно, винда..") end Но как разрядность узнать, не знаю, возможно, нужно поиграться командой os.execute("команда") UPD: Возможно, для винды достаточно будет проверить наличие папки Program Files (x86) в корне системного диска (насколько я понимаю, эта папка присутствует только в 64-битной системе (в дополнение к папке Program Files), а в 32-битной винде только папка Program Files). Вот тут я накидал, как можно это сделать (на базе предыдущего кода): Код 2 Код local sAdmin = "MIKHAIL" local bWinBit f,e = io.popen("uname -o 2>/dev/null","r") if f then osname = f:read() end if osname then Core.SendToNick(sAdmin, osname) else Core.SendToNick(sAdmin, "Непонятно, что за ось тут, наверно, винда..") f,e = io.popen("C:\\Program Files (x86)\\desktop.ini") -- проверяем наличие этого файла if f then bWinBit = true -- это можно позже использовать для каких-то действий Core.SendToNick(sVipNick, "И, похоже, она 64-битная.") else bWinBit = false -- это можно позже использовать для каких-то действий Core.SendToNick(sVipNick, "И, похоже, она 32-битная.") end end Как в коде и написано, параметр bWinBit в дальнейшем можно будет использовать в скрипте при необходимости. |
|
|
1.11.2015, 10:34
Сообщение
#1025
|
|
Site Reliability Engineer Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз |
Код function get_os() local path_separator = package.config:sub(1,1) if path_separator == '/' then return 1 -- Unix/Mac elseif path_separator == '\\' then return 2 -- Win end end С архитектурой чуть сложнее. PROCESSOR_ARCHITECTURE - переменная окружения венды. $HOSTTYPE - маковская переменная. А в прочих дёргай uname -m и читай выхлоп. |
|
|
1.11.2015, 16:37
Сообщение
#1026
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
Saymon21, я прежде всего смотрел переменные окружения, включая PROCESSOR_ARCHITECTURE. Но нюанс в том, что система может стоять и 32-битная, даже если проц 64-битный, вот в чём дело.. Однозначного ответа не даёт эта переменная.
Потому я и решил через папку. Ведь неважно как, главное результат. А линух проверить не судьба, у меня на обеих машинах нынче стоит винда. |
|
|
1.11.2015, 18:13
Сообщение
#1027
|
|
Site Reliability Engineer Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз |
У меня вот венды нету. Только маки и линуксы.
|
|
|
8.11.2015, 2:27
Сообщение
#1028
|
|
KEEP CLEAR AT ALL TIMES Группа: Пользователи Сообщений: 141 Регистрация: 4.9.2011 Из: Беларусь, Минск Пользователь №: 9 667 Спасибо сказали: 3 раза |
Вместо "длинной записи", содержащей вхождение, например, 5-ти цифр:
Код if s:find("<здесь какие-то условия>%d%d%d%d%d<и здесь какие-то условия>") then возможна ли какая-то упрощённая запись этого? Что-то вроде: Код if s:find("<здесь какие-то условия>%d%5<и здесь какие-то условия>") then Хотелось бы, конечно, так... |
|
|
8.11.2015, 15:00
Сообщение
#1029
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
MIKHAIL, упростить вряд ли.. Усложнить можно.
В лучшем случае можно заранее задать эти 5 цифр (в смысле не число, а некие 5 цифр). Вот пример: Код local iD = "%d%d%d%d%d" if s:find("<здесь какие-то условия>"..iD.."<и здесь какие-то условия>") then Тут в условиях к find присутствует только iD вместо %d%d%d%d%d. Хотя лично меня не напрягает и последний вариант. Но не исключаю, что кто-нибудь подскажет и максимально простое решение.. |
|
|
8.11.2015, 16:06
Сообщение
#1030
|
|
KEEP CLEAR AT ALL TIMES Группа: Пользователи Сообщений: 141 Регистрация: 4.9.2011 Из: Беларусь, Минск Пользователь №: 9 667 Спасибо сказали: 3 раза |
Ksan, не стоит задача найти само вхождение этих 5-ти цифр и проверить его корректность.
Вопрос в том, возможна ли какая-то более краткая, приятная глазу и разуму запись количества вхождений одного типа, например, цифр... эдак 10-15. Ну ведь глаз мозолит такое выражение %d%d%d%d%d%d%d%d%d%d. Неужели нет такой фичи, как %d<n-вхождений>? Вроде этого: ("%d"):rep(10), но чтоб ещё кошерней.)) Идеально как-то так: %d%10, ну может вместо последнего % что-то иное... |
|
|
8.11.2015, 17:18
Сообщение
#1031
|
|
Site Reliability Engineer Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз |
pcre используй. Там было такое.
|
|
|
8.11.2015, 19:22
Сообщение
#1032
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
MIKHAIL, чем вас не устраивает одноразовая запись такого типа в самом начале скрипта?
Код local iD = "%d%d%d%d%d" Ведь в настройках скрипта бывают и намного подлиннее записи. Дальше можете это использовать сколько угодно раз и где угодно. Считаете, id хуже %d%d%d%d%d ? А насчёт %d%10 и аналогичных записей чисел (или чего угодно) - просто изучите Saymon21, в регэкспах есть [\d]{5}, но в Луа-скрипте это не применишь, нет аналога. |
|
|
8.11.2015, 20:59
Сообщение
#1033
|
|
Site Reliability Engineer Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз |
Ksan, В луа это реализуется
Код $ lua Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio > rex = require "rex_pcre" > return rex.match('some string 12345 eol','^.+([0-9]{5})') 12345 > Странно почему никто не использует в скриптах. |
|
|
8.11.2015, 22:39
Сообщение
#1034
|
|
KEEP CLEAR AT ALL TIMES Группа: Пользователи Сообщений: 141 Регистрация: 4.9.2011 Из: Беларусь, Минск Пользователь №: 9 667 Спасибо сказали: 3 раза |
MIKHAIL, чем вас не устраивает одноразовая запись такого типа в самом начале скрипта? Код local iD = "%d%d%d%d%d" Ведь в настройках скрипта бывают и намного подлиннее записи. Вот именно... Данный вариант, к сожалению, будет только "захломлять" скрипт. Ну вот представьте себе десяток самих регулярок + до кучи столько же переменных "хлама" к ним... А мы хотим по фэншую.)) Предполагаю, что вы не до конца поняли суть вопроса. |
|
|
8.11.2015, 23:16
Сообщение
#1035
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
MIKHAIL, уверен, что в каждой конкретной задаче-скрипте имеется решение, не обязательно требующее использование групп типа %d%d%d%d%d%d%d, либо сводящее их число до минимума.
Презентуйте сюда свою задачу и посмотрим, что можно сделать без нелюбимых вам %d%d%d%d%d%d%d и по фэншую. Ну или подключайте библиотеку регэкспов, изучайте сами регэкспы и делайте через них. Но скрипт короче не станет. Единственно, чего вы добьётесь - не будет %d%d%d%d%d%d%d. Но стоит ли игра свеч ради сомнительного фэншуя? И да, считаете, что я не понял сути вопроса, может, вы просто не так объясняли? Лично я бы не стал заморачиваться такой ерундой. Короче, нет конкретного задания, - нет понимания. Просто скажите, что вам надо конкретно? Что за задача? Почему я настаиваю - потому что я сам тоже стараюсь делать по фэншую, как я его понимаю, но если "нефэншуй" попадается только разок и нет лёгкого способа избежать, то я игнорирую. Главное - результат (разве что вам дали со стороны специальное задание - упростить до предела). А результат - не в коде, а в выхлопе кода. |
|
|
8.11.2015, 23:36
Сообщение
#1036
|
|
KEEP CLEAR AT ALL TIMES Группа: Пользователи Сообщений: 141 Регистрация: 4.9.2011 Из: Беларусь, Минск Пользователь №: 9 667 Спасибо сказали: 3 раза |
Ksan, да-да-да... просто-напросто "ужать" регулярку, сделать её короче. И, как вы заметили, меня больше интересует такого рода "ерунда" и я готов ей заморачиваться.))
Вообщем, неспеша попытаюсь собрать сие чудо (rex_pcre), но только под Венду с Птохой по аналогии с http://mydc.ru/topic4991.html?hl=rex_pcre. Буду признателен за помощь. |
|
|
8.11.2015, 23:49
Сообщение
#1037
|
|
Site Reliability Engineer Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз |
Ksan, Там есть и более полезные вещи, на самом деле:
Код _,_,res=rex.new('^(?P<some>.+)\\s(?P<string>.+)\\s+(?P<num>[0-9]{5})\\s+(?P<endofline>.+)$'):tfind('another_some my_string 12345 eol') print(table.print(res)) Код { [1] = "another_some", [2] = "my_string", [3] = "12345", [4] = "eol", ["endofline"] = "eol", ["num"] = "12345", ["string"] = "my_string", ["some"] = "another_some", } Использовать имена вместо нумерного индекса - очень хорошая практика. |
|
|
9.11.2015, 0:45
Сообщение
#1038
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
Вообщем, неспеша попытаюсь собрать сие чудо (rex_pcre), но только под Венду с Птохой по аналогии с http://mydc.ru/topic4991.html?hl=rex_pcre. Буду признателен за помощь. Ну пример, который подсказал Saymon21, я уже проверил на Птоке виндовой (а библиотеку можно поставить ту же, что и для РусХаба, нужно только поставить библиотеку под правильную разрядность винды). Вот примерно как выглядит пример: Код local sString = "Первое слово 12345 куча других слов"
function OnStartup() sRex = require"rex_pcre" if sRex.find(sString, "слово [0-9]{5} .+") then local sRes = sRex.match(sString, "слово ([0-9]{5}) .+$") Core.SendToAll(sRes) end end |
|
|
9.11.2015, 10:50
Сообщение
#1039
|
|
KEEP CLEAR AT ALL TIMES Группа: Пользователи Сообщений: 141 Регистрация: 4.9.2011 Из: Беларусь, Минск Пользователь №: 9 667 Спасибо сказали: 3 раза |
Странно, через консоль "rex_pcre" подключается и выполняется... нет проблем.
В Птохе (0.4.1.1, 0.5.1.0) требует "lua.dll": Unable To Locate Component This application has failed to start because lua.dll was not found. Re-installing the application may fix this problem. Подкидывал "lua.dll" от RusHub'a (32-bit), Lua AIO Distribution v2.0, PXControl'a... ну не хочет запускаться.( |
|
|
10.11.2015, 8:22
Сообщение
#1040
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
MIKHAIL, у меня стоит PtokaX 0.5.0.1 Mod9 от Alex82.
И на нём работает эта библиотека от Русхаба (я про "rex_pcre"). Рекомендую (и лучше ставить x32, а то некоторые библиотеки под x64 не найти, а под x32 уже включены в сборку). |
|
|
Похожие темы
|
Сейчас: 27.11.2024, 1:53 |