myDC.ru

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

 
53 страниц V  « < 50 51 52 53 >  
Ответить в данную темуНачать новую тему

> Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы)

alex82
сообщение 10.4.2015, 13:41
Сообщение #1021


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1394 раза




MIKHAIL, просто взять и "открыть видимость", естественно, не получится, поскольку у каждого скрипта свое собственное окружение. Однако, некоторые программы (например RusHub) позволяют скриптам обмениваться данными между собой при помощи специально предназначенных для этого функций.


Спасибо сказали:
Go to the top of the page
+Quote Post
MIKHAIL
сообщение 31.10.2015, 22:10
Сообщение #1022


KEEP CLEAR AT ALL TIMES
****

Группа: Пользователи
Сообщений: 139
Регистрация: 4.9.2011
Из: Беларусь, Минск
Пользователь №: 9 667
Спасибо сказали: 2 раза




Как наиболее правильно определить тип операционной системы (Windows/Unix) и её разрядность средствами самой Луа?
Go to the top of the page
+Quote Post
Tsd
сообщение 1.11.2015, 1:55
Сообщение #1023


Продвинутый участник
****

Группа: Пользователи
Сообщений: 176
Регистрация: 11.7.2008
Пользователь №: 171
Спасибо сказали: 181 раз




Core.GetDCStats()



Спасибо сказали:
Go to the top of the page
+Quote Post
Ksan
сообщение 1.11.2015, 5:16
Сообщение #1024


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 718
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 652 раза




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 в дальнейшем можно будет использовать в скрипте при необходимости.


Спасибо сказали:
Go to the top of the page
+Quote Post
Saymon21
сообщение 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 и читай выхлоп.


Спасибо сказали:
Go to the top of the page
+Quote Post
Ksan
сообщение 1.11.2015, 16:37
Сообщение #1026


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 718
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 652 раза




Saymon21, я прежде всего смотрел переменные окружения, включая PROCESSOR_ARCHITECTURE. Но нюанс в том, что система может стоять и 32-битная, даже если проц 64-битный, вот в чём дело.. Однозначного ответа не даёт эта переменная.
Потому я и решил через папку. big_smile.gif Ведь неважно как, главное результат.
А линух проверить не судьба, у меня на обеих машинах нынче стоит винда.
Go to the top of the page
+Quote Post
Saymon21
сообщение 1.11.2015, 18:13
Сообщение #1027


Site Reliability Engineer
*********

Группа: Модераторы
Сообщений: 1 772
Регистрация: 27.6.2009
Из: Чувашия, г. Чебоксары
Пользователь №: 3 719
Спасибо сказали: 479 раз




У меня вот венды нету. big_smile.gif Только маки и линуксы.
Go to the top of the page
+Quote Post
MIKHAIL
сообщение 8.11.2015, 2:27
Сообщение #1028


KEEP CLEAR AT ALL TIMES
****

Группа: Пользователи
Сообщений: 139
Регистрация: 4.9.2011
Из: Беларусь, Минск
Пользователь №: 9 667
Спасибо сказали: 2 раза




Вместо "длинной записи", содержащей вхождение, например, 5-ти цифр:
Код
if s:find("<здесь какие-то условия>%d%d%d%d%d<и здесь какие-то условия>") then

возможна ли какая-то упрощённая запись этого?
Что-то вроде:
Код
if s:find("<здесь какие-то условия>%d%5<и здесь какие-то условия>") then

Хотелось бы, конечно, так...
Go to the top of the page
+Quote Post
Ksan
сообщение 8.11.2015, 15:00
Сообщение #1029


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 718
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 652 раза




MIKHAIL, упростить вряд ли.. Усложнить можно. big_smile.gif
В лучшем случае можно заранее задать эти 5 цифр (в смысле не число, а некие 5 цифр).
Вот пример:
Код
local iD = "%d%d%d%d%d"
if s:find("<здесь какие-то условия>"..iD.."<и здесь какие-то условия>") then

Тут в условиях к find присутствует только iD вместо %d%d%d%d%d. Хотя лично меня не напрягает и последний вариант. big_smile.gif
Но не исключаю, что кто-нибудь подскажет и максимально простое решение..
Go to the top of the page
+Quote Post
MIKHAIL
сообщение 8.11.2015, 16:06
Сообщение #1030


KEEP CLEAR AT ALL TIMES
****

Группа: Пользователи
Сообщений: 139
Регистрация: 4.9.2011
Из: Беларусь, Минск
Пользователь №: 9 667
Спасибо сказали: 2 раза




Ksan, не стоит задача найти само вхождение этих 5-ти цифр и проверить его корректность.
Вопрос в том, возможна ли какая-то более краткая, приятная глазу и разуму запись количества вхождений одного типа, например, цифр... эдак 10-15.
Ну ведь глаз мозолит такое выражение %d%d%d%d%d%d%d%d%d%d. Неужели нет такой фичи, как %d<n-вхождений>?
Вроде этого: ("%d"):rep(10), но чтоб ещё кошерней.))
Идеально как-то так: %d%10, ну может вместо последнего % что-то иное...
Go to the top of the page
+Quote Post
Saymon21
сообщение 8.11.2015, 17:18
Сообщение #1031


Site Reliability Engineer
*********

Группа: Модераторы
Сообщений: 1 772
Регистрация: 27.6.2009
Из: Чувашия, г. Чебоксары
Пользователь №: 3 719
Спасибо сказали: 479 раз




pcre используй. Там было такое.


Спасибо сказали:
Go to the top of the page
+Quote Post
Ksan
сообщение 8.11.2015, 19:22
Сообщение #1032


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 718
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 652 раза




MIKHAIL, чем вас не устраивает одноразовая запись такого типа в самом начале скрипта?
Код
local iD = "%d%d%d%d%d"
Ведь в настройках скрипта бывают и намного подлиннее записи. big_smile.gif
Дальше можете это использовать сколько угодно раз и где угодно.
Считаете, id хуже %d%d%d%d%d ?
А насчёт %d%10 и аналогичных записей чисел (или чего угодно) - просто изучите документацию Луа, убедитесь сами, что там нет такого метода.

Saymon21, в регэкспах есть [\d]{5}, но в Луа-скрипте это не применишь, нет аналога.
Go to the top of the page
+Quote Post
Saymon21
сообщение 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
>

Странно почему никто не использует в скриптах.


Спасибо сказали:
Go to the top of the page
+Quote Post
MIKHAIL
сообщение 8.11.2015, 22:39
Сообщение #1034


KEEP CLEAR AT ALL TIMES
****

Группа: Пользователи
Сообщений: 139
Регистрация: 4.9.2011
Из: Беларусь, Минск
Пользователь №: 9 667
Спасибо сказали: 2 раза




Цитата(Ksan @ 8.11.2015, 18:22) *
MIKHAIL, чем вас не устраивает одноразовая запись такого типа в самом начале скрипта?
Код
local iD = "%d%d%d%d%d"
Ведь в настройках скрипта бывают и намного подлиннее записи. big_smile.gif

Вот именно... Данный вариант, к сожалению, будет только "захломлять" скрипт. Ну вот представьте себе десяток самих регулярок + до кучи столько же переменных "хлама" к ним... А мы хотим по фэншую.))
Предполагаю, что вы не до конца поняли суть вопроса.
Go to the top of the page
+Quote Post
Ksan
сообщение 8.11.2015, 23:16
Сообщение #1035


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 718
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 652 раза




MIKHAIL, уверен, что в каждой конкретной задаче-скрипте имеется решение, не обязательно требующее использование групп типа %d%d%d%d%d%d%d, либо сводящее их число до минимума.
Презентуйте сюда свою задачу и посмотрим, что можно сделать без нелюбимых вам %d%d%d%d%d%d%d и по фэншую.
Ну или подключайте библиотеку регэкспов, изучайте сами регэкспы и делайте через них. Но скрипт короче не станет. Единственно, чего вы добьётесь - не будет %d%d%d%d%d%d%d. Но стоит ли игра свеч ради сомнительного фэншуя?

И да, считаете, что я не понял сути вопроса, может, вы просто не так объясняли? Лично я бы не стал заморачиваться такой ерундой. Короче, нет конкретного задания, - нет понимания.
Просто скажите, что вам надо конкретно? Что за задача?
Почему я настаиваю - потому что я сам тоже стараюсь делать по фэншую, как я его понимаю, но если "нефэншуй" попадается только разок и нет лёгкого способа избежать, то я игнорирую. Главное - результат (разве что вам дали со стороны специальное задание - упростить до предела). А результат - не в коде, а в выхлопе кода.
Go to the top of the page
+Quote Post
MIKHAIL
сообщение 8.11.2015, 23:36
Сообщение #1036


KEEP CLEAR AT ALL TIMES
****

Группа: Пользователи
Сообщений: 139
Регистрация: 4.9.2011
Из: Беларусь, Минск
Пользователь №: 9 667
Спасибо сказали: 2 раза




Ksan, да-да-да... просто-напросто "ужать" регулярку, сделать её короче. И, как вы заметили, меня больше интересует такого рода "ерунда" и я готов ей заморачиваться.))

Вообщем, неспеша попытаюсь собрать сие чудо (rex_pcre), но только под Венду с Птохой по аналогии с http://mydc.ru/topic4991.html?hl=rex_pcre.
Буду признателен за помощь.
Go to the top of the page
+Quote Post
Saymon21
сообщение 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",
}

Использовать имена вместо нумерного индекса - очень хорошая практика.
Go to the top of the page
+Quote Post
Ksan
сообщение 9.11.2015, 0:45
Сообщение #1038


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 718
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 652 раза




Цитата(MIKHAIL @ 9.11.2015, 2:36) *
Вообщем, неспеша попытаюсь собрать сие чудо (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
Go to the top of the page
+Quote Post
MIKHAIL
сообщение 9.11.2015, 10:50
Сообщение #1039


KEEP CLEAR AT ALL TIMES
****

Группа: Пользователи
Сообщений: 139
Регистрация: 4.9.2011
Из: Беларусь, Минск
Пользователь №: 9 667
Спасибо сказали: 2 раза




Странно, через консоль "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... ну не хочет запускаться.(
Go to the top of the page
+Quote Post
Ksan
сообщение 10.11.2015, 8:22
Сообщение #1040


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 718
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 652 раза




MIKHAIL, у меня стоит PtokaX 0.5.0.1 Mod9 от Alex82.
И на нём работает эта библиотека от Русхаба (я про "rex_pcre").
Рекомендую (и лучше ставить x32, а то некоторые библиотеки под x64 не найти, а под x32 уже включены в сборку).


Спасибо сказали:
Go to the top of the page
+Quote Post

53 страниц V  « < 50 51 52 53 >
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No new ВАЖНО: Topic has attachmentsМодули для скриптов RusHub
26 Setuper 29 253 21.3.2017, 17:31 Посл. сообщение: Alexey
No new ВАЖНО: Topic has attachmentsВаши Вопросы И Предложения По Поводу Форума
447 Svyat 188 572 20.10.2015, 19:39 Посл. сообщение: Ksan
No New Posts От: Вопросы Разработчикам Скриптов
От темы с ID: 173
0 MIKHAIL 1 865 23.1.2015, 0:56 Посл. сообщение: MIKHAIL
No new Topic has attachmentsВопросы по протоколу NMDC
Делаю программу
26 Master255 14 153 12.1.2015, 0:38 Посл. сообщение: Master255
No New Posts Вопросы к Phazeus по Экзекутору
Мастер может забанить мастера, как решить в Экзекуторе?
1 AndreiDC 2 432 31.10.2014, 19:20 Посл. сообщение: Ksan
No New Posts От: Установка скриптов
От темы с ID: 5657
0 MIKHAIL 2 336 29.7.2014, 23:37 Посл. сообщение: MIKHAIL
No New Posts Установка скриптов
Нужна помощь по установке
2 _wRz_ 3 415 29.7.2014, 16:11 Посл. сообщение: Артём
No new От: Вопросы Разработчикам Скриптов
От темы с ID: 173
29 Wariner 13 362 28.1.2014, 13:11 Посл. сообщение: Alexey
No new Topic has attachmentsВопросы по RusHub
Технические вопросы
316 Jaska 147 691 19.12.2013, 13:59 Посл. сообщение: mod
No new Topic has attachmentsМелкие вопросы
44 Wariner 29 369 19.9.2013, 12:34 Посл. сообщение: Alexey
No New Posts От: Ваши Вопросы И Предложения По Поводу Форума
От темы с ID: 753
3 anila 5 248 28.3.2013, 16:02 Посл. сообщение: настя
No New Posts Единая платформа для скриптов
Обсуждения вопроса создания единой платформы скриптов
5 Enyby 4 835 18.1.2012, 20:15 Посл. сообщение: Setuper
No new Topic has attachmentsПеределка скриптов
Прошу помощи
47 Fe(one)X 24 866 26.12.2011, 15:04 Посл. сообщение: Ksan
No new Topic has attachmentsВопросы Разработчикам Скриптов с SQL
вопросы по скриптам (мелкие вопросы)
101 Wariner 22 757 6.12.2011, 0:34 Посл. сообщение: Enyby
No New Posts От: Вопросы по RusHub
От темы с ID: 2902
4 Otshelnik-Fm 4 485 19.10.2011, 9:23 Посл. сообщение: Mangust

 



RSS Сейчас: 21.8.2019, 20:33