Автор: Fire73 16.9.2019, 16:01
Ребят, такая ситуация, такой скрипт.
В текстовом документе REG.txt следующее:
@Zolotoy Serebro Bronza
Код
load_array %arr C:\Users\REG.txt
//log %arr [1] // первая строка из файла
//log %arr [2] // вторая
log clear
log mode compact
set $regexp "[^ ]+"
set #n regexp (#pos $one %arr[1] $regexp) // поиск в строке любого текста до пробела
if #n = 1
end_if
set $regexp "(?<= )[^ ]+"
set #n regexp (#pos $two %arr[1] $regexp) // поиск в строке текста после пробела
if #n = 1
end_if
set clipboard $two
sendex ^v
Вопрос:
1) $two в моем случае это - Serebro, но как сделать так, чтобы к слову генерировался дополнительный случайный символ, чтобы, например, в итоге получилось Serebrom, Serebroz...?
2) Какое составить регулярное выражение, чтобы к 3 слову в REG.txt было тоже присвоено имя #three
Автор: cirus 17.9.2019, 1:32
Цитата
чтобы к слову генерировался дополнительный случайный символ
Код
set $two serebro
set #rand 97 + random(26)
init_arr %a (1) $two chr(#rand)
log %a[1]
end_script
Цитата
2) Какое составить регулярное выражение, чтобы к 3 слову в REG.txt было тоже присвоено имя #three
Код
Автор: Fors1k 17.9.2019, 12:30
Цитата(Fire73 @ 16.9.2019, 16:01)
Ребят, такая ситуация, такой скрипт.
В текстовом документе REG.txt следующее:
@Zolotoy Serebro Bronza
Код
Код
load_array %arr C:\Users\REG.txt
//log %arr [1] // первая строка из файла
//log %arr [2] // вторая
log clear
log mode compact
set $regexp "[^ ]+"
set #n regexp (#pos $one %arr[1] $regexp) // поиск в строке любого текста до пробела
if #n = 1
end_if
set $regexp "(?<= )[^ ]+"
set #n regexp (#pos $two %arr[1] $regexp) // поиск в строке текста после пробела
if #n = 1
end_if
set clipboard $two
sendex ^v
Вопрос:
1) $two в моем случае это - Serebro, но как сделать так, чтобы к слову генерировался дополнительный случайный символ, чтобы, например, в итоге получилось Serebrom, Serebroz...?
2) Какое составить регулярное выражение, чтобы к 3 слову в REG.txt было тоже присвоено имя #three
Ну и вообще можешь в целом сильно сократить свой код:
Код
load_array %arr C:\Users\REG.txt
get word $two 2 %arr[1]
get word $three 3 %arr[1]
set #rand random(26) + 97
set $smbl chr(#rand)
set $two $two$smbl
log $two
log $three
end_script
Автор: Fire73 18.9.2019, 13:05
Спасибо, ребят!
А вот если добавить 2 рандомные буквы, а не одну?
Автор: Fors1k 18.9.2019, 13:48
Код
load_array %arr C:\Users\REG.txt
get word $two 2 %arr[1]
get word $three 3 %arr[1]
set #rand random(26) + 97
set #rand1 random(26) + 97
set $smbl chr(#rand)
set $smbl1 chr(#rand1)
set $two $two$smbl$smbl1
log $two
log $three
end_script
Автор: FREEON 16.2.2020, 16:52
Есть регулярное вырожение: -0x[0-5][0-9]$
как записать что бы числа могли искаться
-0x01
-0x10
-0x20
-0x59
но не включало в результат поиска два нуля:
-0x00
Автор: Fors1k 16.2.2020, 17:06
Цитата(FREEON @ 16.2.2020, 16:52)
Есть регулярное вырожение: -0x[0-5][0-9]$
как записать что бы числа могли искаться
-0x01
-0x10
-0x20
-0x59
но не включало в результат поиска два нуля:
-0x00
Код
load_array %a "C:\qwe.txt"
set $rgxp "(?<=(?!(-0x00)))-0x[0-5][0-9](?=$)"
for #i 1 size(%a)
set #n regexp (#p $a %a[#i] $rgxp)
if #n > 0
set $res $res $a
end_if
end_for
init_arr %result (1 1) $res
save_array %result "C:\qwe_result.txt"
end_script
Автор: cirus 16.2.2020, 17:55
Цитата
set $rgxp "(?<=(?!(-0x00)))-0x[0-5][0-9](?=$)"
Или так:
Код
set $rgxp "-0x(0[1-9]|[1-5][0-9])$"
Автор: Fors1k 16.2.2020, 18:09
Цитата(cirus @ 16.2.2020, 17:55)
Или так:
Код
set $rgxp "-0x(0[1-9]|[1-5][0-9])$"
Да, тоже интересный вариант
Автор: FREEON 17.2.2020, 15:38
Вот еще задачка. нужно найти все комментарии однострочные и многострочные, но данная регулярка не совсем корректно находит многострочные комментарии. Всего комментариев 7(для наглядности в тексте примера их пронумеровал и отметил жиром) из них: 5 однострочных и 2 многострочных
Вот рег: <!--(.+|(.|\s)*)-->
Вот пример текста:
<!--1 однострочный коментарий-->
текст <!-- 2 Это -- комментарий -->
текст
<!-- 3 многострочный
коментарий
текст какой-то--> текст
Эт0
к0д
какой-то
<!-- 4
это еще один
ногострочный
коментарий
--> текст
<!-- 5 это считается коментарием <!-- и это коментарием --> а этот текст уже нет-->
<!-- 6 --><!--7-->
Автор: Fors1k 17.2.2020, 19:07
Цитата(FREEON @ 17.2.2020, 15:38)
Вот еще задачка. нужно найти все комментарии однострочные и многострочные, но данная регулярка не совсем корректно находит многострочные комментарии.
Всего комментариев 7(для наглядности в тексте примера их пронумеровал и отметил жиром) из них:
5 однострочных и
2 многострочныхВот рег:
<!--(.+|(.|\s)*)-->Вот пример текста:
<!--1 однострочный коментарий-->
текст <!-- 2 Это -- комментарий -->
текст
<!-- 3 многострочный
коментарий
текст какой-то--> текст
Эт0
к0д
какой-то
<!-- 4
это еще один
ногострочный
коментарий
--> текст
<!-- 5 это считается коментарием <!-- и это коментарием --> а этот текст уже нет-->
<!-- 6 --><!--7-->
Код
log clear_current
log mode compact
load_array %a "C:\qwe.txt"
set $rgxp1 "<!--.*?(-->|$)(?!.*(?=<!--))"
set $rgxp2 "^.*?-->(?!.*(?=<!--))"
for #i 1 size(%a)
if regexp(#p $a %a[#i] $rgxp1)
log $a
while copy($a eval(size($a)-2) 3) != -->
set #i #i + 1
set #n regexp(#p $a %a[#i] $rgxp2)
if copy($a eval(size($a)-2) 3) = -->
log $a
break
else
log %a[#i]
end_if
end_while
log
end_if
end_for
log save_current C:\qwe_result.txt
exec notepad "C:\qwe_result.txt"
end_script
Автор: cirus 18.2.2020, 1:35
Fors1k, в твоём коде
Цитата
<!-- 6 --><!--7-->
считаются как один комментарий.
Код
--lua
log "clear" log "mode compact"
local f = io.open([[C:\qwe.txt]], "rb") -- открыть файл для чтения
local f2 = io.open([[C:\qwe_result.txt]], "wb") -- открыть файл для записи
if f and f2 then -- если открылся
local s = f:read("*a") -- прочитать файл
f:close() -- закрыть файл
for w in s:gmatch("<%!%-%-.-%-%->") do -- поиск
log (w .. "\r\n")
f2:write(w .. "\r\n")
end
f2:close() -- закрыть файл
end
Автор: Fors1k 18.2.2020, 4:03
Цитата(cirus @ 18.2.2020, 1:35)
Fors1k, в твоём коде
Цитата
<!-- 6 --><!--7-->
считаются как один комментарий.
Точно, спасибо. В заблуждение ввело отсутствие меж ними текста:)
Код
log clear_current
log mode compact
load_array %a C:\qwe.txt
for #i 1 size(%a)
set $a %a[#i]
while regexp(#p $r $a <!--.*?(-->|$))
log $r
while copy($r eval(size($r)-2) 3) != -->
set #i #i + 1
set $a %a[#i]
if regexp(#p $r $a ^.*?-->)
log $r
break
end_if
log %a[#i]
end_while
set $a string_replace($a $r "")
end_while
end_for
log save_current C:\qwe_result.txt
end_script
Автор: FREEON 18.2.2020, 12:40
Можно и так:
<!--(??!-->)[\s\S])*-->
Автор: Fors1k 18.2.2020, 13:22
code
Код
--lua
log "clear" log "mode compact"
local f = io.open([[C:\qwe.txt]], "rb") -- открыть файл для чтения
local f2 = io.open([[C:\qwe_result.txt]], "wb") -- открыть файл для записи
if f and f2 then -- если открылся
local s = f:read("*a") -- прочитать файл
f:close() -- закрыть файл
for w in s:gmatch("<%!%-%-.-%-%->") do -- поиск
log (w .. "\r\n")
f2:write(w .. "\r\n")
end
f2:close() -- закрыть файл
end
Удобно, что в луа есть поиск сразу по всему файлу, всех совпадений. Надеюсь в новой версии пилота тоже скоро появится такая возможность.
Цитата(FREEON @ 18.2.2020, 12:40)
Можно и так:
<!--(??!-->)[\s\S])*-->
В какое место кода это вставить?
Автор: FREEON 18.2.2020, 13:31
Цитата(Fors1k @ 18.2.2020, 13:22)
В какое место кода это вставить?
Простите, нужно было сразу указать что это регулярное выражение не для пилота нужна, а в скрипт патча андроид приложения, для сгонки веса если патчить с мобильного девайса. А так вам также огромное спасибо можно искать выводить файлы и комментарий в лог или файл, что также значительно упрощает работу.
Да и так багаж знаний пополнить можно...ведь совсем недавно я эти регулярки обходил стороной, казалось чем-то сверх фантастичным. Но надоело от них бегать и сейчас по-тиху уже стараюсь вникнуть в суть и они уже кажутся не такими страшными как раньше
Автор: FREEON 19.3.2020, 20:46
Цитата(Fors1k @ 18.2.2020, 13:22)
code
Код
--lua
log "clear" log "mode compact"
local f = io.open([[C:\qwe.txt]], "rb") -- открыть файл для чтения
local f2 = io.open([[C:\qwe_result.txt]], "wb") -- открыть файл для записи
if f and f2 then -- если открылся
local s = f:read("*a") -- прочитать файл
f:close() -- закрыть файл
for w in s:gmatch("<%!%-%-.-%-%->") do -- поиск
log (w .. "\r\n")
f2:write(w .. "\r\n")
end
f2:close() -- закрыть файл
end
Удобно, что в луа есть поиск сразу по всему файлу, всех совпадений. Надеюсь в новой версии пилота тоже скоро появится такая возможность.
Попытался я извлечь текст который находится между символами
«.+
» и как бы до первого совпадения работает норм, а после переписывает весь файл
Пример текста
Уважаемые игроки!
Напоминаем, что 20 марта в 5:00 по московскому времени все серверы игры будут закрыты для входа в связи с проведением технических работ. Ориентировочная длительность - 2 часа.
Пожалуйста, учтите данную информацию при планировании своей игровой активности.
В этой новости мы расскажем о том, какие события ожидают нас уже завтра. Пожалуйста, учтите, что ряд ивентов, объявленных на 20 марта, начнутся только после открытия серверов по завершении тех. работ.
1. 20 и 21 марта пополнение счета будет особенно выгодно с акцией «Сбор урожая».
uploads/images/custom/dk/events_png/xxsborurozhaya.png,Mic.HpRi9XL-ET.png.pagespeed.ic.5SAMOKHFIv.webp
2. С 20 по 23 марта вращайте «Великое колесо фортуны» - и пусть она будет к вам благосклонна.
uploads/images/custom/dk/events_png/xvelikoekolesofortuny.png.pagespeed.ic._RlGMxw727.webp
3. С 20 по 22 марта будет доступно «Колесо призывателя» - прокачайте своего маленького помощника.
uploads/images/custom/dk/events_png/xkolesoprizyvatelya.png.pagespeed.ic.IBjssuocCS.webp
4. С 20 по 24 марта вы можете активировать «Сундук бога войны» и получать ценные призы в течение 10 дней.
uploads/images/custom/dk/events_png/xsundukbogavoiny.png.pagespeed.ic.8E2SiWweBq.webp
5. С 20 по 26 марта вступайте на «Тропу войны», сражайтесь со своими двойниками и получайте ценные награды за победу!
uploads/images/custom/dk/events_png/xtropavoiny.png.pagespeed.ic.C6OSPVjGdA.webp
6. С 21 марта по 1 апреля пополняйте счет в игре и получайте бонусы «Возврата ресурсами за длительное пополнение счета».
uploads/images/custom/dk/events_png/xvozvrat_resursami.png.pagespeed.ic.0k0xkDUjAS.webp
7. С 22 по 26 марта открывайте «Сундук сокровищ» ключами, полученными за пополнение счета от 1000 баленов
uploads/images/custom/dk/events_png/xsunduksokrovisch.png.pagespeed.ic.3vBGWkRtJ2.webp
8. С 23 по 26 марта вас ждет «Статуя дракона». Монеты для молитвы можно добыть в Подземелье и Зале героев.
uploads/images/custom/dk/events_png/xstatuyadrakona.png.pagespeed.ic.g0Su0awTLR.webp
9. С 24 по 28 марта можно будет раскрыть «Тайны старого замка» и получить за это ценные призы.
uploads/images/custom/dk/events_png/xtainystarogozamka.png.pagespeed.ic.HQzn3ld2nC.webp
10. С 25 по 28 марта участвуйте в «Модной лотерее» и получайте редкие предметы моды
11. С 25 по 31 марта пройдет ивент «Яркий луч» и «Распродажа» - становитесь сильнее с каждым днем.
uploads/images/custom/dk/1time/xyarky_luch.jpg.pagespeed.ic.1jgaNiaOGW.webp
12. С 27 по 31 марта за пополнение счета от 1000 баленов вы получите возможность «Забить гол» и получить награду.
uploads/images/custom/dk/events_png/xxzabitgol.png,Mic.54WdjgC-hd.png.pagespeed.ic.jak0p7fh9b.webp
13. С 27 по 29 марта будут открыты двери «Мистического магазина» - добро пожаловать за покупками!
uploads/images/custom/dk/events_png/xmisticheskymagazin.png.pagespeed.ic.cxuz-xPADa.webp
14. С 29 марта по 2 апреля используйте винные бочки для получения напитков и наград «Королевской винодельни»
uploads/images/custom/dk/events_png/xxkorolevskayavinodelnya.png,Mic.adrXEpPFeb.png.pagespeed.ic.OdUsVYkFLK.webp
15. С 29 марта по 2 апреля откроется «Алтарь отважного героя». Побеждайте боссов ивента, зарабатывайте очки – и получайте награды!
uploads/images/custom/dk/events_png/xaltar.png.pagespeed.ic.Q1beNPj1zx.webp
16. С 30 марта по 2 апреля за прохождение Подземелья и Зала героев вы будете получать золотоискатели для «Таинственных сокровищ богов».
uploads/images/custom/dk/events_png/xtainstvennyesokrovischabogov.png.pagespeed.ic.pmh0cNlznp.webp
17. 1 и 2 апреля пополнение счета будет особенно выгодным с «Добычей баленов»
uploads/images/custom/dk/events_png/xxdobychabalenov.png,Mic.-sVxj5Gi8s.png.pagespeed.ic.pPhe4nABzJ.webp
На пилоте по-прывычней будет
Код
log clear
load_array %a "C:\qwe.txt"
log mode compact
for #i 1 size(%a)
set $regexp "«.+»"
set #n regexp (#position $hitstring %a[#i] $regexp)
if #n = 1
log $hitstring
end_if
end_for
End_script
Только что нужно научить пилот понимать кодировку файлов уж часто у меня после обработки приходится менять кодировку т.к. получаются сплошные крокозябры особено если файл был UTF-8