Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ UO Pilot _ Найти текст в документе и показать всю строку

Автор: dontail 1.4.2018, 15:12

Добрый день форумчане, надеюсь мне поможете)) Есть документ, в нем 600 строк и нужно найти в нем одно слово, может и повторяться. Мне нужно чтобы выводились все строки найденные с этим словом. Уже 2-ой день пыхчу и не могу найти(

Автор: dron4938 1.4.2018, 15:16

Цитата(dontail @ 1.4.2018, 15:12) *

Добрый день форумчане, надеюсь мне поможете)) Есть документ, в нем 600 строк и нужно найти в нем одно слово, может и повторяться. Мне нужно чтобы выводились все строки найденные с этим словом. Уже 2-ой день пыхчу и не могу найти(

Notepad ++ же)))

Автор: dontail 1.4.2018, 15:29

Цитата(dron4938 @ 1.4.2018, 18:16) *

Notepad ++ же)))

у меня через 9 дней экзамен) нужно скрытно чтоб искал

load_array %arr C:\текст\55.txt
set $arrForIf %arr [1] ////// как я понял - здесь он берет только первую строку, мне нужно чтоб охватывал все 600+ и показывал все в которых нашел поочередно.
if 1 >= $arrForIf
msg !!!
end_if
(один из вариантов которые я пытался. еще с "indexof" пытался, но не получается)

Автор: dron4938 1.4.2018, 16:10

Так сойдет?

Скачать архив, распаковать, запустить файл "Поиск строк с определенными словами.bat"
Создастся файл result.txt с найденными строками
===================================

параметры:
FINDSTR /L "dontail dron4938" "text.txt" > "result.txt"

dontail dron4938 - вместо этого свои слова которые надо искать
"text.txt" - имя файла в котором надо искать
"result.txt" - имя файла который создастся после поиска с найденными строками


Прикрепленные файлы
Прикрепленный файл  Poisk.rar ( 947 байт ) Кол-во скачиваний: 1928

Автор: dontail 1.4.2018, 16:17

Цитата(dron4938 @ 1.4.2018, 19:10) *

Так сойдет?

FINDSTR /L "dontail dron4938" "text.txt" > "result.txt"

dontail dron4938 - вместо этого свои слова которые надо искать
"text.txt" - имя файла в котором надо искать
"result.txt" - имя файла который создастся после поиска с найденными строками

Знаешь, ты мне поддал новую идею. Спасибо тебе. Теперь только реализовать осталось вроде)))

Автор: dontail 1.4.2018, 16:34

теперь застрял на том - как удалить в батнике прошлые данные чтобы ввести новый поиск)?

Автор: dron4938 1.4.2018, 16:46

Цитата(dontail @ 1.4.2018, 16:34) *

теперь застрял на том - как удалить в батнике прошлые данные чтобы ввести новый поиск)?

Код
write (C:\123abc.bat FINDSTR /L "dontail dron4938" "text.txt" > "result.txt")
//создастся файл bat со строкой (FINDSTR /L "dontail dron4938" "text.txt" > "result.txt")
end_script

Автор: dontail 1.4.2018, 17:00

Цитата(dron4938 @ 1.4.2018, 19:46) *

Код
write (C:\123abc.bat FINDSTR /L "dontail dron4938" "text.txt" > "result.txt")
//создастся файл bat со строкой (FINDSTR /L "dontail dron4938" "text.txt" > "result.txt")
end_script


Есть вариант не создавать новый, а менять его?

Хотя это можно решить удалением файла, а затем его снова создавать. Спасибо еще раз за помощь)

Автор: dron4938 1.4.2018, 17:04

Цитата(dontail @ 1.4.2018, 17:00) *

Есть вариант не создавать новый, а менять его?

Хотя это можно решить удалением файла, а затем его снова создавать. Спасибо еще раз за помощь)

одинаковое имя файла, просто заменит старый

Автор: dontail 1.4.2018, 17:06

Цитата(dron4938 @ 1.4.2018, 20:04) *

одинаковое имя файла, просто заменит старый

Он не заменяет, а дописывает еще текст поверх старого

Автор: dron4938 1.4.2018, 17:13

Цитата(dontail @ 1.4.2018, 17:06) *

Он не заменяет, а дописывает еще текст поверх старого

Код
filedelete (C:\123abc.bat) // удалит файл
write (C:\123abc.bat FINDSTR /L "dontail dron4938" "text.txt" > "result.txt") // создаст файл
wait 200
exec C:\123abc.bat // запустит файл
end_script

Автор: DarkMaster 1.4.2018, 18:44

Код
set linedelay 0
set $sub ywf // указываем ваше слово

load_array %arr text.txt
set #sizeArr size(%arr)
for #i 1 #sizeArr 1
    set #pos posEx($sub, %arr[#i])
    if  #pos > 0
        log %arr[#i]
    end_if
end_for


Не запускал, но смысл примерно такой.

Автор: dontail 1.4.2018, 19:20

Цитата(DarkMaster @ 1.4.2018, 21:44) *

Код
set linedelay 0
set $sub ywf // указываем ваше слово

load_array %arr text.txt
set #sizeArr size(%arr)
for #i 1 #sizeArr 1
    set #pos posEx($sub, %arr[#i])
    if  #pos > 0
        log %arr[#i]
    end_if
end_for


Не запускал, но смысл примерно такой.

Отлично работает, а можно выставить между сообщениями время? я хочу его через Hint выводить, а так он разом выводит все

Цитата(dontail @ 1.4.2018, 22:17) *

Отлично работает, а можно выставить между сообщениями время? я хочу его через Hint выводить, а так он разом выводит все

я плыву уже))) 2-ой день скрипт делаю и бошка не варит)
Код
set linedelay 0
set $sub ywf // указываем ваше слово

load_array %arr text.txt
set #sizeArr size(%arr)
for #i 1 #sizeArr 1
    set #pos posEx($sub, %arr[#i])
    if  #pos > 0
        hint %arr[#i]
wait 5s
    end_if
if 853 >= %arr[#i]    ///// 853 последняя пустая строка
    end_script
    end_if
end_for

Спасибо большое ребят, теперь он полностью закончен)

Автор: dron4938 1.4.2018, 19:29

Код
if #i == 853

Автор: DarkMaster 1.4.2018, 19:49

Цитата
if 853 >= %arr[#i] ///// 853 последняя пустая строка
end_script
end_if

выкинуть
после
end_for
поставить:
end_script

Автор: dontail 1.4.2018, 20:19

еще такой вопрос - как сохранить в "горячих клавишах" пуск/стоп скрипта, чтобы при переносе на другой комп он сохранялся

Автор: cirus 1.4.2018, 20:31

Все настройки хранятся в uopilot.ini. Т. е. на другой комп надо перекинуть этот файл.

Автор: dontail 1.4.2018, 20:43

Цитата(cirus @ 1.4.2018, 23:31) *

Все настройки хранятся в uopilot.ini. Т. е. на другой комп надо перекинуть этот файл.

А где именно и что менять?)

Автор: cirus 1.4.2018, 21:05

Цитата
А где именно и что менять?)

В пилоте, вкладка 'Ещё', кнопка 'Edit HotKeys'.

Автор: dontail 1.4.2018, 21:21

Цитата(cirus @ 2.4.2018, 0:05) *

В пилоте, вкладка 'Ещё', кнопка 'Edit HotKeys'.

При перезагрузке программы она не сохраняется

UPD нашел в настройках скрипта - OTHER - сохранять настройки при выходе

Автор: dontail 2.4.2018, 13:10

Кто нибудь может подсказать - можно ли создать текстовый документ размером 600+ строк? Просто сейчас не дома, проверить возможности нет. Заранее спасибо)

Автор: cirus 2.4.2018, 13:33

Код
for #i 1 600
    set %a[#i] Строка номер #i
end_for
save_array %a C:\textfile.txt
end_script

Автор: dontail 2.4.2018, 17:43

Цитата(cirus @ 2.4.2018, 16:33) *

Код
for #i 1 600
    set %a[#i] Строка номер #i
end_for
save_array %a C:\textfile.txt
end_script


не совсем понял

Автор: DarkMaster 2.4.2018, 18:24

Что именно не понятно? Вы просили создание документа из 600+ строк - вам его создали.

Автор: dontail 2.4.2018, 18:40

Цитата(DarkMaster @ 2.4.2018, 21:24) *

Что именно не понятно? Вы просили создание документа из 600+ строк - вам его создали.

как можно с этим кодом создать текст на 600 строк(все 600 строк разные)

Код
set %arr [1]вопрос 1, ответ 1
set %arr [2]вопрос 2, ответ 2
set %arr [3]вопрос 3, ответ 3
set %arr [4]вопрос 3, ответ 4
....
set %arr [600]вопрос 600, ответ 600
save_array %arr C:\вопросики\123abc.txt
end_script

сделал что то наподобие этого, есть ли варианты как нибудь упростить и сделать его быстрее?

Автор: cirus 3.4.2018, 1:26

Вопросы и ответы пилот должен придумать? smile.gif

Автор: DarkMaster 3.4.2018, 9:33

Цитата
Вопросы и ответы пилот должен придумать? smile.gif

Ща чего-нибудь на генериурем) Может заодно пару фундаментальных проблем ии решим =)

Автор: dontail 3.4.2018, 20:50

Всем большое спасибо за помощь и за ваше терпение)

Автор: dron4938 31.5.2018, 12:07

есть 2 текстовых файла.

1ый содержит такие строки:

Код
$*Game-EBoneDeformPart_CalfCircumference-Customizin=
$*Game-EBoneDeformPart_FootSize-Customizin=
$*Game-EBoneDeformPart_BodyCircumference-Customizin=
$*Game-EBoneDeformPart_Height-Customizin=
$*Game-Error_NPGAMEMON_ERROR_EXIST-Error=
$*Game-Error_NPGAMEMON_ERROR_NPSCAN-Error=
$*Game-Error_NPGAMEMON_ERROR_INIT-Error=


2ой содержит такие строки:
Код
Eyebrow Arch Horizontal Position
Eyebrow Tail Vertical Position
Eyebrow Curvature
Nose Vertical Position
Nose Size
Nose Projection
Nose Bridge Shape


нужно объединить оба файла, добавив в 1ый после знаков = строки из 2ого файла.

должно получиться так:
Код
$*Game-EBoneDeformPart_CalfCircumference-Customizin=Eyebrow Arch Horizontal Position
$*Game-EBoneDeformPart_FootSize-Customizin=Eyebrow Tail Vertical Position
$*Game-EBoneDeformPart_BodyCircumference-Customizin=Eyebrow Curvature
$*Game-EBoneDeformPart_Height-Customizin=Nose Vertical Position
$*Game-Error_NPGAMEMON_ERROR_EXIST-Error=Nose Size
$*Game-Error_NPGAMEMON_ERROR_NPSCAN-Error=Nose Projection
$*Game-Error_NPGAMEMON_ERROR_INIT-Error=Nose Bridge Shape


как реализовать такое?

Автор: cirus 31.5.2018, 12:54

Код
load_array %a C:\Users\abc\Desktop\222.txt
load_array %b C:\Users\abc\Desktop\333.txt

for #i 1 size(%a)
    set %c [#i] %a[#i]%b[#i]
end_for
save_array %c C:\Users\abc\Desktop\444.txt
end_script

Автор: dron4938 31.5.2018, 13:00

Цитата(cirus @ 31.5.2018, 12:54) *

Код
load_array %a C:\Users\abc\Desktop\222.txt
load_array %b C:\Users\abc\Desktop\333.txt

for #i 1 size(%a)
    set %c [#i] %a[#i]%b[#i]
end_for
save_array %c C:\Users\abc\Desktop\444.txt
end_script


Спасибо

Автор: DarkMaster 31.5.2018, 13:07

Из-за спецсимволов могут быть порблемы. Чтобы их избежать можно сделать так:

Код
--lua
log"clear"
local first  = io.open([[d:\1.txt]], "r")
local second = io.open([[d:\2.txt]], "r")
local result_file = io.open([[d:\result.txt]], "wb")

first_part={}
second_part={}

for v in first:lines() do
    first_part[#first_part + 1] = v
end

for v in second:lines() do
    second_part[#second_part + 1] = v
end

local result = ""

for i = 1, #first_part do
    result = result..first_part[i]..second_part[i].."\r\n"
end

result_file:write(result)
result_file:close()

Автор: dron4938 31.5.2018, 14:52

Цитата(cirus @ 31.5.2018, 12:54) *

Код
load_array %a C:\Users\abc\Desktop\222.txt
load_array %b C:\Users\abc\Desktop\333.txt

for #i 1 size(%a)
    set %c [#i] %a[#i]%b[#i]
end_for
save_array %c C:\Users\abc\Desktop\444.txt
end_script


Файлы состоят из 25тысяч строк. Запустил скрипт, работает уже минут 10. Результата стоит ждать? Или это слишком большие массивы?

Цитата(DarkMaster @ 31.5.2018, 13:07) *

Из-за спецсимволов могут быть порблемы. Чтобы их избежать можно сделать так:
Код
--lua
log"clear"
local first  = io.open([[d:\1.txt]], "r")
local second = io.open([[d:\2.txt]], "r")
local result_file = io.open([[d:\result.txt]], "wb")

first_part={}
second_part={}

for v in first:lines() do
    first_part[#first_part + 1] = v
end

for v in second:lines() do
    second_part[#second_part + 1] = v
end

local result = ""

for i = 1, #first_part do
    result = result..first_part[i]..second_part[i].."\r\n"
end

result_file:write(result)
result_file:close()



спс, сработало за 5 сек

Автор: DarkMaster 31.5.2018, 15:27

Цитата

Файлы состоят из 25тысяч строк. Запустил скрипт, работает уже минут 10. Результата стоит ждать? Или это слишком большие массивы?

Цитата
спс, сработало за 5 сек

Это называтся новый и старый скриптовый движок в сравнении =)

Автор: dron4938 31.5.2018, 18:56

как удалить все знаки = из текста файла, а затем следующим действием выставить знаки = в начале каждой строки?

Код
=Горящие Пески-Песчаный =Причал
Горящие Пески-Азуресанд
=Курия =- Fairy Song Ferry Inn
=Курия-Трущобы
=Курия -= Fairy Song Ferry Inn
=Курия-Еловая Поляна
Отрубями =Лес - Lupuscana
=Bellops-Daidan =Wanderers
=Bellops - Экспедиция Torenton


должно стать:
Код
=Горящие Пески-Песчаный Причал
=Горящие Пески-Азуресанд
=Курия - Fairy Song Ferry Inn
=Курия-Трущобы
=Курия - Fairy Song Ferry Inn
=Курия-Еловая Поляна
=Отрубями Лес - Lupuscana
=Bellops-Daidan Wanderers
=Bellops - Экспедиция Torenton

Автор: DarkMaster 31.5.2018, 19:10

Код
--lua
log"clear"
local first  = io.open([[d:\1.txt]], "r")
local result_file = io.open([[d:\result.txt]], "wb")

first_part={}
second_part={}

for v in first:lines() do
    result_file:write("=" .. string.gsub(v, "=", "").."\r\n")
end

result_file:close()

Автор: dron4938 31.5.2018, 20:06

Цитата(DarkMaster @ 31.5.2018, 19:10) *

Код
--lua
log"clear"
local first  = io.open([[d:\1.txt]], "r")
local result_file = io.open([[d:\result.txt]], "wb")

first_part={}
second_part={}

for v in first:lines() do
    result_file:write("=" .. string.gsub(v, "=", "").."\r\n")
end

result_file:close()


СПАСИБ

Автор: dron4938 1.6.2018, 16:50

нужен скрипт автозамены сложных наборов текстов в документе.

пример: В тексте есть много таких кракозябров, надо чтобы они автоматом заменились на заданное значение, например </I> пробелы должны учитываться.

< / I>
</Я>
< /I >
</I >
< /Я >
</Я >
< /Я>
</Я>
</ Я>

Автор: DarkMaster 1.6.2018, 22:40

было-стало приведите пример.

Автор: DarkMaster 1.6.2018, 22:54

Код
--lua
log"clear"
local first  = io.open([[d:\1.txt]], "r")
local result_file = io.open([[d:\result.txt]], "wb")

first_part={}

for v in first:lines() do
    result_file:write(string.gsub(v, "(%< *%/ *)([a-zA-Zа-яА-Я])( *%>)", "%1I%3").."\r\n")
end

first:close()
result_file:close()

Автор: dron4938 2.6.2018, 21:58

Цитата(DarkMaster @ 1.6.2018, 22:54) *

Код
--lua
log"clear"
local first  = io.open([[d:\1.txt]], "r")
local result_file = io.open([[d:\result.txt]], "wb")

first_part={}

for v in first:lines() do
    result_file:write(string.gsub(v, "(%< *%/ *)([a-zA-Zа-яА-Я])( *%>)", "%1I%3").."\r\n")
end

first:close()
result_file:close()


не работает

вот пример:
Код
[AccountInfo]
$*FixedChargeAdvInfo-green-local_name=<font size='20'><i>Game</ i> Прем</font>
$*FixedChargeAdvInfo-blue-local_name=<font size='20'><i>Game</я> Прем</font>
$*FixedChargeAdvInfo-purple-local_name=<font size='20'><i>Game< /i> Прем</font>


должно стать так:
Код
[AccountInfo]
$*FixedChargeAdvInfo-green-local_name=<font size='20'><i>Game</i> Прем</font>
$*FixedChargeAdvInfo-blue-local_name=<font size='20'><i>Game</i> Прем</font>
$*FixedChargeAdvInfo-purple-local_name=<font size='20'><i>Game</i> Прем</font>


тобеж нужна функция как в нотепаде замена текста, там это отлично работает.
т.е. там можно сделать единичную замену текста например </я> заменить </i> во всем документе.
а нужно чтобы все заданные значения </я> </ i> < /i> </I> заменялись на </i> во всем документе

Автор: DarkMaster 2.6.2018, 22:09

Т.е. пробелы нужно убрать? А я их наоборот сохранял всеми силами) Ща

Код
--lua
log"clear"
local first  = io.open([[d:\1.txt]], "r")
local result_file = io.open([[d:\result.txt]], "wb")

first_part={}

for v in first:lines() do
    result_file:write(string.gsub(v, "(%<) *(%/) *([яЯiI]) *(%>)", "%1%2i%4").."\r\n")
end

first:close()
result_file:close()

Автор: dron4938 2.6.2018, 22:14

Цитата(DarkMaster @ 2.6.2018, 22:09) *

Т.е. пробелы нужно убрать? А я их наоборот сохранял всеми силами) Ща

Код
--lua
log"clear"
local first  = io.open([[d:\1.txt]], "r")
local result_file = io.open([[d:\result.txt]], "wb")

first_part={}

for v in first:lines() do
    result_file:write(string.gsub(v, "(%<) *(%/) *([яЯiI]) *(%>)", "%1%2i%4").."\r\n")
end

first:close()
result_file:close()


не робит.в результате чистый документ выходит

Автор: cirus 2.6.2018, 22:18

Цитата
не робит.в результате чистый документ выходит

Всё работает.

Автор: dron4938 2.6.2018, 22:30

Цитата(cirus @ 2.6.2018, 22:18) *

Всё работает.

Изображение

пример проще:

Код
тумба
стол
стул
ящик
чемодан
рыба
азбука


как в этом тексте заменить слово чемодан на люстра

Автор: cirus 2.6.2018, 22:51

Цитата
как в этом тексте заменить слово чемодан на люстра

Код
--lua
log"clear"
local first  = io.open([[d:\1.txt]], "r")
local result_file = io.open([[d:\result.txt]], "wb")

first_part={}

for v in first:lines() do
    result_file:write(string.gsub(v, "чемодан", "люстра").."\r\n")
end

first:close()
result_file:close()

Автор: dron4938 2.6.2018, 23:00

Цитата(cirus @ 2.6.2018, 22:51) *

Код
--lua
log"clear"
local first  = io.open([[d:\1.txt]], "r")
local result_file = io.open([[d:\result.txt]], "wb")

first_part={}

for v in first:lines() do
    result_file:write(string.gsub(v, "чемодан", "люстра").."\r\n")
end

first:close()
result_file:close()


а как 2 слова чемодан и азбука заменить на люстра

Автор: dron4938 2.6.2018, 23:17

все заработало, проблема в юникоде файла была) Я файл не с нуля создавал, а расширение просто поменял на тхт.
Создал тхт с нуля и заработало, спасибо

Автор: cirus 2.6.2018, 23:24

Цитата
а как 2 слова чемодан и азбука заменить на люстра

Код
--lua
log"clear"
local first  = io.open([[d:\1.txt]], "r")
local result_file = io.open([[d:\result.txt]], "wb")

first_part={}

t={["чемодан"]="люстра", ["азбука"]="букварь"}  -- чемодан заменить на люстру, азбуку на букварь

for v in first:lines() do
--    log (v)
    result_file:write(string.gsub(v, "[%A%a]+", t).."\r\n")
end

first:close()
result_file:close()

Автор: dron4938 2.6.2018, 23:59

Код
--lua
log"clear"
local first  = io.open([[d:\1.txt]], "r")
local result_file = io.open([[d:\result.txt]], "wb")

first_part={}

t={["Game"]="Game2", ["Прем"]="Прем2"}  --

for v in first:lines() do
--    log (v)
    result_file:write(string.gsub(v, "[%A%a%/]+", t).."\r\n")
end

first:close()
result_file:close()


почему в этом тексте не меняет?
Код
[AccountInfo]
$*FixedChargeAdvInfo-green-local_name=<font size='20'><i>Game</ i> Прем</font>
$*FixedChargeAdvInfo-blue-local_name=<font size='20'><i>Game</я> Прем</font>
$*FixedChargeAdvInfo-purple-local_name=<font size='20'><i>Game< /i> Прем</font>

Автор: cirus 3.6.2018, 0:13

Цитата
почему в этом тексте не меняет?

Для начала неплохо бы это прочитать:
Цитата
. -- Любой символ
%a -- Буква (только англ.!)
%A -- Любая буква (русская), символ, или цифра, кроме английской буквы
%c -- Управляющий символ
%d -- Цифра
%D -- Любая буква, или символ, кроме цифры
%l -- Буква в нижней раскладке (только англ.!)
%L -- Любая буква, символ, или цифра, кроме английской буквы в нижней раскладке
%p -- Символ пунктуации
%P -- Любая буква, символ, или цифра, кроме символа пунктуации
%s -- Символ пробел
%S -- Любая буква, символ, или цифра, кроме символа пробела
%u -- Буква в верхней раскладке (только англ.!)
%U -- Любая буква, символ, или цифра, кроме английской буквы в верхней раскладке
%w -- Любая буква, или цифра (только англ.!)
%W -- Любой символ, или буква (русская), кроме английской буквы, или цифры
%x -- Шестнадцатеричное число
%X -- Любая буква, или символ, кроме цифры, или английской буквы, используемой в записи шестнадцатеричного числа
%z -- Строковые параметры, содержащие символы с кодом 0

Код
--lua
local first  = io.open([[d:\1.txt]], "r")
local result_file = io.open([[d:\result.txt]], "wb")

first_part={}

t={["Game"]="Game2", ["Прем"]="Прем2"}  --

for v in first:lines() do
    result_file:write(string.gsub(v, "[GameПрем]+", t).."\r\n")
end

first:close()
result_file:close()

Или так:
Код
--lua
local first  = io.open([[d:\1.txt]], "r")
local result_file = io.open([[d:\result.txt]], "wb")

first_part={}

t={["Game"]="Game2", ["Прем"]="Прем2"}

for v in first:lines() do
    result_file:write(string.gsub(v, "[a-zA-Zа-яА-Я]+", t).."\r\n")
end

first:close()
result_file:close()

Автор: dron4938 3.6.2018, 0:31

Код
"[GameПрем]+" 

т.е. тут должны быть вписаны все символы которые участвуют в поисковых словах?
ясно, спс

Автор: cirus 3.6.2018, 0:38

Цитата
т.е. тут должны быть вписаны все символы которые участвуют в поисковых словах?

Можно конкретные символы [aws]+, можно диапазон [a-d]+ или [%a]+ - все англ буквы.

Автор: dron4938 3.6.2018, 1:07

А можно пилот заставить искать в файлах с другой кодировкой?
Он в ANSI работает, а например UTF-8

Автор: DarkMaster 3.6.2018, 10:09

Цитата
А можно пилот заставить искать в файлах с другой кодировкой?
Он в ANSI работает, а например UTF-8

Это не пилот, а lua. В луа нет поддержки юникода, возможно решается сторонними либами - не искал.

Автор: cirus 3.6.2018, 11:29

Можно перевести в другую кодировку через батник.
Содержимое bat файла:

Код
powershell "get-content -encoding UTF8 'C:\folder\in.txt' | out-file -encoding default 'C:\folder\out.txt'"

Запускать можно через exec. Напрямую на диск не сохраняет, т. е. сохранять в какую-нибудь папку.

Автор: DarkMaster 3.6.2018, 14:35

Функции работы с utf-8, подгружать через require.


Прикрепленные файлы
Прикрепленный файл  utf8.lua ( 8,39 килобайт ) Кол-во скачиваний: 980

Автор: dron4938 3.6.2018, 16:35

Нужно сразу в нескольких файлах сделать одну и ту же замену.
как сделать, чтоб не писать по несколько раз одно и тоже
тобеж словарь замен чтобы не дублировать

код
Код
--lua
log"clear"

local first  = io.open([[c:\Rus\1.txt]], "r")
local result_file = io.open([[c:\Eng\1.txt]], "wb")
first_part={}
t={
["тумба"]="tuba",
["стол"]="table",
["стул"]="chair",
["ящик"]="box",
["чемодан"]="cement",
["рыба"]="alphabet",
}
for v in first:lines() do
result_file:write(string.gsub(v, "[a-zA-Zа-яА-Я]+", t).."\r\n")
end
first:close()
result_file:close()
-------------------------------------------------------
local first  = io.open([[c:\Rus\2.txt]], "r")
local result_file = io.open([[c:\Eng\2.txt]], "wb")
first_part={}
t={
["тумба"]="tuba",
["стол"]="table",
["стул"]="chair",
["ящик"]="box",
["чемодан"]="cement",
["рыба"]="alphabet",
}
for v in first:lines() do
result_file:write(string.gsub(v, "[a-zA-Zа-яА-Я]+", t).."\r\n")
end
first:close()
result_file:close()
-------------------------------------------------------
local first  = io.open([[c:\Rus\3.txt]], "r")
local result_file = io.open([[c:\Eng\3.txt]], "wb")
first_part={}
t={
["тумба"]="tuba",
["стол"]="table",
["стул"]="chair",
["ящик"]="box",
["чемодан"]="cement",
["рыба"]="alphabet",
}
for v in first:lines() do
result_file:write(string.gsub(v, "[a-zA-Zа-яА-Я]+", t).."\r\n")
end
first:close()
result_file:close()

Автор: cirus 3.6.2018, 17:21

Цитата
тобеж словарь замен чтобы не дублировать

А зачем его вообще писать несколько раз?
код
Код
--lua

local files_in = {[[c:\Rus\1.txt]], [[c:\Rus\2.txt]], [[c:\Rus\3.txt]]}   -- список файлов для замены
local files_out = {[[c:\Rus\11.txt]], [[c:\Rus\22.txt]], [[c:\Rus\33.txt]]}   -- куда сохранять
local first = {}
local result_file = {}

local t={
["тумба"]="tuba",
["стол"]="table",
["стул"]="chair",
["ящик"]="box",
["чемодан"]="cement",
["рыба"]="alphabet",
}

for i=1, #files_in do
    local first  = io.open(files_in[i], "r")
    local result_file = io.open(files_out[i], "wb")

    for v in first:lines() do
        result_file:write(string.gsub(v, "[a-zA-Zа-яА-Я]+", t).."\r\n")
    end
    first:close()
    result_file:close()
end

Вообще получить бы список файлов в папке, но пилотовской dir не работает в lua.

Автор: WKnight 3.6.2018, 19:13

Почему не работает

Код

--lua
resultarray, count = dir ("C:\\", "*.sys", "norecursion")
for i = 1, count do
  log (resultarray[i][1])
end

Автор: cirus 3.6.2018, 20:04

Цитата
Почему не работает

Склероз smile.gif Забыл что его правили.

Автор: dron4938 3.6.2018, 20:07

Цитата(cirus @ 3.6.2018, 17:21) *

А зачем его вообще писать несколько раз?
код
Код
--lua

local files_in = {[[c:\Rus\1.txt]], [[c:\Rus\2.txt]], [[c:\Rus\3.txt]]}   -- список файлов для замены
local files_out = {[[c:\Rus\11.txt]], [[c:\Rus\22.txt]], [[c:\Rus\33.txt]]}   -- куда сохранять
local first = {}
local result_file = {}

local t={
["тумба"]="tuba",
["стол"]="table",
["стул"]="chair",
["ящик"]="box",
["чемодан"]="cement",
["рыба"]="alphabet",
}

for i=1, #files_in do
    local first  = io.open(files_in[i], "r")
    local result_file = io.open(files_out[i], "wb")

    for v in first:lines() do
        result_file:write(string.gsub(v, "[a-zA-Zа-яА-Я]+", t).."\r\n")
    end
    first:close()
    result_file:close()
end

Вообще получить бы список файлов в папке, но пилотовской dir не работает в lua.

Спасибо, еще вопрос)
Можно ли в этом коде сделать так, чтобы он делал поиск только после знака =

цикорий=тумба
орехи=дерево стол
апельсины=стул
стол= ящик
абрикос=чемодан
рыба=рыба

т.е надо чтобы поиск игнорировал всё что написано до знака = в каждой строчке

Автор: cirus 3.6.2018, 21:25

Цитата
т.е надо чтобы поиск игнорировал всё что написано до знака = в каждой строчке

код
Код
--lua
log "clear" log "mode compact"
local path=[[C:\\Rus]]   -- путь к папке с файлами
local path2=[[C:\\Rus2]]  -- куда сохранять изменённые файлы

local files_in, count = dir (path, "*.txt", "norecursion")   -- получаем список всех txt файлов в папке
dircreate (path2)  -- создаём папку если её не было

local first, result_file = {}, {}

local t={
["тумба"]="tuba",
["стол"]="table",
["стул"]="chair",
["ящик"]="box",
["чемодан"]="cement",
["рыба"]="alphabet",
}

for i=1, count do
    local first  = io.open(files_in[i][1], "r")
    local result_file = io.open(path2.."\\"..files_in[i][3]..files_in[i][4], "wb")

    for v in first:lines() do
        local v1 = v:match(".-%=")         -- получаем из строки всё что идёт до = (включая и сам знак равно)
        if v1 then                               -- если строка не пустая
            local v2 = v:match("%=(.*)")   -- получаем из строки всё что идёт после =
            result_file:write(v1 .. string.gsub(v2, "[a-zA-Zа-яА-Я]+", t).."\r\n")
        else                                      -- если знак = не был найден
            result_file:write(v .. "\r\n")        -- записываем строку без изменений
        end
    end
    first:close()
    result_file:close()
end

Автор: dron4938 5.6.2018, 16:09

Цитата(cirus @ 3.6.2018, 21:25) *

код
Код
--lua
log "clear" log "mode compact"
local path=[[C:\\Rus]]   -- путь к папке с файлами
local path2=[[C:\\Rus2]]  -- куда сохранять изменённые файлы

local files_in, count = dir (path, "*.txt", "norecursion")   -- получаем список всех txt файлов в папке
dircreate (path2)  -- создаём папку если её не было

local first, result_file = {}, {}

local t={
["тумба"]="tuba",
["стол"]="table",
["стул"]="chair",
["ящик"]="box",
["чемодан"]="cement",
["рыба"]="alphabet",
}

for i=1, count do
    local first  = io.open(files_in[i][1], "r")
    local result_file = io.open(path2.."\\"..files_in[i][3]..files_in[i][4], "wb")

    for v in first:lines() do
        local v1 = v:match(".-%=")         -- получаем из строки всё что идёт до = (включая и сам знак равно)
        if v1 then                               -- если строка не пустая
            local v2 = v:match("%=(.*)")   -- получаем из строки всё что идёт после =
            result_file:write(v1 .. string.gsub(v2, "[a-zA-Zа-яА-Я]+", t).."\r\n")
        else                                      -- если знак = не был найден
            result_file:write(v .. "\r\n")        -- записываем строку без изменений
        end
    end
    first:close()
    result_file:close()
end


Спасибо, отлично работает)

Автор: dron4938 7.6.2018, 23:48

Проблемка образовалась, не работает 12 13 и 14 задача в примере. т.е скрипт делает замену, только если меняется первое слово после знака =, либо же фраза от первого слова после знака =. А если менять текст в середине строки, то не работает.В чем косяк?

Код
задача1=слово
задача2 =слово
задача3= слово
задача4 = слово
задача5=слово=слово
задача6=слово =слово=+слово
задача7=мемуар истины
задача8 =мемуар истины
задача9= мемуар истины
задача10 = мемуар истины
задача11 = мемуар истины =мемуар истины
задача12=Пишем мемуар истины
задача13=Hello how are you
задача14 = Hello how are you =Hello how are you  


код
Код
--lua
log "clear" log "mode compact"
local path=[[C:\\Rus\\TEST]]   -- путь к папке с файлами
local path2=[[C:\\Rus\\TEST2]]  -- куда сохранять изменённые файлы
local files_in, count = dir (path, "*.txt", "norecursion")   -- получаем список всех txt файлов в папке
dircreate (path2)  -- создаём папку если её не было

local first, result_file = {}, {}

local t={
["слово"]="ОК",
[" слово"]="ОК",
["слово "]="ОК",
[" слово "]="ОК",
["мемуар истины"]="ОК",
[" мемуар истины"]="ОК",
["мемуар истины "]="ОК",
[" мемуар истины "]="ОК",
["how are"]="ОК",
["how are "]="ОК",
[" how are"]="ОК",
[" how are "]="ОК",
}

for i=1, count do
    local first  = io.open(files_in[i][1], "r")
    local result_file = io.open(path2.."\\"..files_in[i][3]..files_in[i][4], "wb")

    for v in first:lines() do
        local v1 = v:match(".-%=")         -- получаем из строки всё что идёт до = (включая и сам знак равно)
        if v1 then                               -- если строка не пустая
            local v2 = v:match("%=(.*)")   -- получаем из строки всё что идёт после =
            result_file:write(v1 .. string.gsub(v2, "[ a-zA-Zа-яА-Я]+", t).."\r\n")
        else                                      -- если знак = не был найден
            result_file:write(v .. "\r\n")        -- записываем строку без изменений
        end
    end
    first:close()
    result_file:close()
end

Автор: dron4938 8.6.2018, 0:57

Цитата(dron4938 @ 7.6.2018, 23:48) *

Проблемка образовалась, не работает 12 13 и 14 задача в примере. т.е скрипт делает замену, только если меняется первое слово после знака =, либо же фраза от первого слова после знака =. А если менять текст в середине строки, то не работает.В чем косяк?
Код
задача1=слово
задача2 =слово
задача3= слово
задача4 = слово
задача5=слово=слово
задача6=слово =слово=+слово
задача7=мемуар истины
задача8 =мемуар истины
задача9= мемуар истины
задача10 = мемуар истины
задача11 = мемуар истины =мемуар истины
задача12=Пишем мемуар истины
задача13=Hello how are you
задача14 = Hello how are you =Hello how are you  


код
Код
--lua
log "clear" log "mode compact"
local path=[[C:\\Rus\\TEST]]   -- путь к папке с файлами
local path2=[[C:\\Rus\\TEST2]]  -- куда сохранять изменённые файлы
local files_in, count = dir (path, "*.txt", "norecursion")   -- получаем список всех txt файлов в папке
dircreate (path2)  -- создаём папку если её не было

local first, result_file = {}, {}

local t={
["слово"]="ОК",
[" слово"]="ОК",
["слово "]="ОК",
[" слово "]="ОК",
["мемуар истины"]="ОК",
[" мемуар истины"]="ОК",
["мемуар истины "]="ОК",
[" мемуар истины "]="ОК",
["how are"]="ОК",
["how are "]="ОК",
[" how are"]="ОК",
[" how are "]="ОК",
}

for i=1, count do
    local first  = io.open(files_in[i][1], "r")
    local result_file = io.open(path2.."\\"..files_in[i][3]..files_in[i][4], "wb")

    for v in first:lines() do
        local v1 = v:match(".-%=")         -- получаем из строки всё что идёт до = (включая и сам знак равно)
        if v1 then                               -- если строка не пустая
            local v2 = v:match("%=(.*)")   -- получаем из строки всё что идёт после =
            result_file:write(v1 .. string.gsub(v2, "[ a-zA-Zа-яА-Я]+", t).."\r\n")
        else                                      -- если знак = не был найден
            result_file:write(v .. "\r\n")        -- записываем строку без изменений
        end
    end
    first:close()
    result_file:close()
end




Либо так. Но так не ищет двойные слова, тобеж трабла с пробелом:
код2
Код
--lua
log "clear" log "mode compact"
local path=[[C:\\Rus\\TEST]]   -- путь к папке с файлами
local path2=[[C:\\Rus\\TEST2]]  -- куда сохранять изменённые файлы
local files_in, count = dir (path, "*.txt", "norecursion")   -- получаем список всех txt файлов в папке
dircreate (path2)  -- создаём папку если её не было

local first, result_file = {}, {}

local t={
["слово"]="+",
["мемуар истины"]="+",
["how are"]="+",
["яблоко"]="+",
["апельсин"]="+",
["мандарин"]="+",
["груша"]="+",
["киви"]="+",
}

for i=1, count do
    local first  = io.open(files_in[i][1], "r")
    local result_file = io.open(path2.."\\"..files_in[i][3]..files_in[i][4], "wb")

    for v in first:lines() do
        local v1 = v:match(".-%=")         -- получаем из строки всё что идёт до = (включая и сам знак равно)
        if v1 then                               -- если строка не пустая
            local v2 = v:match("%=(.*)")   -- получаем из строки всё что идёт после =
            result_file:write(v1 .. string.gsub(v2, "[a-zA-Zа-яА-Я]+", t).."\r\n")
        else                                      -- если знак = не был найден
            result_file:write(v .. "\r\n")        -- записываем строку без изменений
        end
    end
    first:close()
    result_file:close()
end


Код
задача1=слово
задача2 =слово
задача3= слово
задача4 = слово
задача5=слово=слово
задача6=слово =слово=+слово
задача7=мемуар истины
задача8 =мемуар истины
задача9= мемуар истины
задача10 = мемуар истины
задача11 = мемуар истины =мемуар истины
задача12=Пишем мемуар истины
задача13=Hello how are you
задача14 = Hello how are you =Hello how are you
задача15=яблоко апельсин апельсиновый мандарин груша киви


Автор: dron4938 8.6.2018, 1:23

Код
тест1=привет как дела(заменить "привет" на +)
тест2=здрасти как дела (заменить "здрасти как дела" на +)
тест3=хеллоу как ваши дела (заменить "как ваши" на +)

вот, чтобы всё менялось над)

Код
["привет"]="+",
["здрасти как дела"]="+",
["как ваши"]="+",

Автор: cirus 8.6.2018, 2:51

Если менять фразы, а не только слова, то проще так:

код
Код
--lua
log "clear" log "mode compact"
local path=[[C:\Rus\TEST]]   -- путь к папке с файлами
local path2=[[C:\Rus\TEST2]]  -- куда сохранять изменённые файлы
local files_in, count = dir (path, "*.txt", "norecursion")   -- получаем список всех txt файлов в папке
dircreate (path2)  -- создаём папку если её не было

local t, first, result_file = {}, {}, {}

table.insert(t, {"привет", "+++"})    -- 'привет' заменить на '+++'
table.insert(t, {"здрасти как дела", "---"})   -- 'здрасти как дела' заменить на '---'
table.insert(t, {"как ваши", "12345"})  -- 'как ваши' заменить на '12345'

for i=1, count do
    local first  = io.open(files_in[i][1], "r")
    local result_file = io.open(path2.."\\"..files_in[i][3]..files_in[i][4], "wb")

    for v in first:lines() do
        local v1 = v:match(".-%=")         -- получаем из строки всё что идёт до = (включая и сам знак равно)
        if v1 then                               -- если строка не пустая
            local v2 = v:match("%=(.*)")   -- получаем из строки всё что идёт после =

            for j=1, #t do  -- заменяем
                v2 =v2:gsub(t[j][1] , t[j][2])
            end

            result_file:write(v1 .. v2 .."\r\n")
        else                                      -- если знак = не был найден
            result_file:write(v .. "\r\n")        -- записываем строку без изменений
        end
    end
    first:close()
    result_file:close()
end

Автор: dron4938 8.6.2018, 9:27

Цитата(cirus @ 8.6.2018, 2:51) *

Если менять фразы, а не только слова, то проще так:
код
Код
--lua
log "clear" log "mode compact"
local path=[[C:\Rus\TEST]]   -- путь к папке с файлами
local path2=[[C:\Rus\TEST2]]  -- куда сохранять изменённые файлы
local files_in, count = dir (path, "*.txt", "norecursion")   -- получаем список всех txt файлов в папке
dircreate (path2)  -- создаём папку если её не было

local t, first, result_file = {}, {}, {}

table.insert(t, {"привет", "+++"})    -- 'привет' заменить на '+++'
table.insert(t, {"здрасти как дела", "---"})   -- 'здрасти как дела' заменить на '---'
table.insert(t, {"как ваши", "12345"})  -- 'как ваши' заменить на '12345'

for i=1, count do
    local first  = io.open(files_in[i][1], "r")
    local result_file = io.open(path2.."\\"..files_in[i][3]..files_in[i][4], "wb")

    for v in first:lines() do
        local v1 = v:match(".-%=")         -- получаем из строки всё что идёт до = (включая и сам знак равно)
        if v1 then                               -- если строка не пустая
            local v2 = v:match("%=(.*)")   -- получаем из строки всё что идёт после =

            for j=1, #t do  -- заменяем
                v2 =v2:gsub(t[j][1] , t[j][2])
            end

            result_file:write(v1 .. v2 .."\r\n")
        else                                      -- если знак = не был найден
            result_file:write(v .. "\r\n")        -- записываем строку без изменений
        end
    end
    first:close()
    result_file:close()
end



Так коллапсик возникает для одиночных слов:
Если например менять слово "ок" на что-нить, то во всех словах заменится этот предлог
Код
1=хозяйственный
2=здраво
3=ок
4=сельскохозяйственный
5=здравохранение
6=крокодил


Код
table.insert(t, {"хозяйственный", "-ХОЗЯЙСТВЕННЫЙ-"})
table.insert(t, {"здраво", "-ЗДРАВО-"})
table.insert(t, {"ок", "-ОК-"})
table.insert(t, {"сельскохозяйственный", "+++"})
table.insert(t, {"здравохранение", "+++"})
table.insert(t, {"крокодил", "+++"})


Или для одиночных использовать тот скрипт? А для фраз этот?


Автор: cirus 8.6.2018, 13:51

А так?:

код
Код
--lua
log "clear" log "mode compact"
local path=[[C:\Rus\TEST]]   -- путь к папке с файлами
local path2=[[C:\Rus\TEST2]]  -- куда сохранять изменённые файлы

local files_in, count = dir (path, "*.txt", "norecursion")   -- получаем список всех txt файлов в папке
dircreate (path2)  -- создаём папку если её не было

local t, first, result_file = {}, {}, {}

table.insert(t, {"привет", "+++"})    -- 'привет' заменить на '+++'
table.insert(t, {"здрасти как дела", "---"})   -- 'здрасти как дела' заменить на '---'
table.insert(t, {"как ваши", "12345"})  -- 'как ваши' заменить на '12345'
table.insert(t, {"хозяйственный", "-ХОЗЯЙСТВЕННЫЙ-"})
table.insert(t, {"здраво", "-ЗДРАВО-"})
table.insert(t, {"ок", "-ОК-"})
table.insert(t, {"сельскохозяйственный", "+++"})
table.insert(t, {"здравохранение", "+++"})
table.insert(t, {"крокодил", "+++"})

-- в одной таблице слова, в другой строки из нескольких слов
local t1, t2 ={}, {}
for i=1, #t do
    if t[i][1]:match("%s") == nil then   -- если нет пробела, значит ищем 1 слово
        t1[t[i][1]]=t[i][2]   -- таблица со словами
    else                                 -- иначе строка из нескольких слов
        t2[t[i][1]]=t[i][2]   -- таблица со строками
    end
end

for i=1, count do
    local first  = io.open(files_in[i][1], "r")
    local result_file = io.open(path2.."\\"..files_in[i][3]..files_in[i][4], "wb")

    for v in first:lines() do
        local v1 = v:match(".-%=")         -- получаем из строки всё что идёт до = (включая и сам знак равно)
        if v1 then                               -- если строка не пустая
            local v2 = v:match("%=(.*)")   -- получаем из строки всё что идёт после =

            for j=1, #t do
                if t[j][1]:match("%s") then  
                    for key, val in pairs(t2) do
                        v2 = v2:gsub(key, val)
                    end
                else
                    v2=v2:gsub("[a-zA-Zа-яА-Я]+", t1)
                end
            end

            result_file:write(v1 .. v2 .."\r\n")
        else                                      -- если знак = не был найден
            result_file:write(v .. "\r\n")        -- записываем строку без изменений
        end
    end
    first:close()
    result_file:close()
end

Автор: dron4938 8.6.2018, 15:14

Цитата(cirus @ 8.6.2018, 13:51) *

А так?:
код
Код
--lua
log "clear" log "mode compact"
local path=[[C:\Rus\TEST]]   -- путь к папке с файлами
local path2=[[C:\Rus\TEST2]]  -- куда сохранять изменённые файлы

local files_in, count = dir (path, "*.txt", "norecursion")   -- получаем список всех txt файлов в папке
dircreate (path2)  -- создаём папку если её не было

local t, first, result_file = {}, {}, {}

table.insert(t, {"привет", "+++"})    -- 'привет' заменить на '+++'
table.insert(t, {"здрасти как дела", "---"})   -- 'здрасти как дела' заменить на '---'
table.insert(t, {"как ваши", "12345"})  -- 'как ваши' заменить на '12345'
table.insert(t, {"хозяйственный", "-ХОЗЯЙСТВЕННЫЙ-"})
table.insert(t, {"здраво", "-ЗДРАВО-"})
table.insert(t, {"ок", "-ОК-"})
table.insert(t, {"сельскохозяйственный", "+++"})
table.insert(t, {"здравохранение", "+++"})
table.insert(t, {"крокодил", "+++"})

-- в одной таблице слова, в другой строки из нескольких слов
local t1, t2 ={}, {}
for i=1, #t do
    if t[i][1]:match("%s") == nil then   -- если нет пробела, значит ищем 1 слово
        t1[t[i][1]]=t[i][2]   -- таблица со словами
    else                                 -- иначе строка из нескольких слов
        t2[t[i][1]]=t[i][2]   -- таблица со строками
    end
end

for i=1, count do
    local first  = io.open(files_in[i][1], "r")
    local result_file = io.open(path2.."\\"..files_in[i][3]..files_in[i][4], "wb")

    for v in first:lines() do
        local v1 = v:match(".-%=")         -- получаем из строки всё что идёт до = (включая и сам знак равно)
        if v1 then                               -- если строка не пустая
            local v2 = v:match("%=(.*)")   -- получаем из строки всё что идёт после =

            for j=1, #t do
                if t[j][1]:match("%s") then  
                    for key, val in pairs(t2) do
                        v2 = v2:gsub(key, val)
                    end
                else
                    v2=v2:gsub("[a-zA-Zа-яА-Я]+", t1)
                end
            end

            result_file:write(v1 .. v2 .."\r\n")
        else                                      -- если знак = не был найден
            result_file:write(v .. "\r\n")        -- записываем строку без изменений
        end
    end
    first:close()
    result_file:close()
end


Так очень долго работает, на 1 файл с 20к строк ушло минут 5.
Быстрее поочередно запустить 2 кода. Тогда за 10 сек справляется

Автор: cirus 9.6.2018, 1:34

Цитата
на 1 файл с 20к строк ушло минут 5.

Хз как так. Тут даже не чему выполняться столько времени.
Файл в 20000 строк, в каждой строке 9 замен ушло 0.25 сек.
Цитата
Быстрее поочередно запустить 2 кода

Это те же 2 кода слепленные в один.

Автор: dron4938 9.6.2018, 13:55

Цитата(cirus @ 9.6.2018, 1:34) *

Хз как так. Тут даже не чему выполняться столько времени.
Файл в 20000 строк, в каждой строке 9 замен ушло 0.25 сек.

Это те же 2 кода слепленные в один.


код1 Выполняется за секунду
Код
--lua
log "clear" log "mode compact"
local path=[[C:\Rus\TEST]]   -- путь к папке с файлами
local path2=[[C:\Rus\TEST2]]  -- куда сохранять изменённые файлы
local files_in, count = dir (path, "*.txt", "norecursion")   -- получаем список всех txt файлов в папке
dircreate (path2)  -- создаём папку если её не было
log "Перевожу фразы..."
local t, first, result_file = {}, {}, {}

table.insert(t, {"Fighting Spirit", "Боевой дух"})
table.insert(t, {"Select Character", "Выбор персонажа"})
table.insert(t, {"Character Available", "Пустой слот"})
table.insert(t, {"Select Server", "Выбор сервера"})
table.insert(t, {"Create Character", "Создание персонажа"})
table.insert(t, {"Change Appearance", "Сменить Внешность"})
table.insert(t, {"Save Appearance", "Сохранить внешность"})
table.insert(t, {"Quit Game", "Выйти из игры"})
table.insert(t, {"Will you quit the game", "Действительно выйти"})
table.insert(t, {"System Settings", "Системные настройки"})
table.insert(t, {"Sound Settings", "Звук"})
table.insert(t, {"Graphical Settings", "Графика"})
table.insert(t, {"Default Settings", "Основные"})
table.insert(t, {"Advanced Settings", "Дополнительные"})
table.insert(t, {"Created by", "Создатели"})
table.insert(t, {"Screen Mode", "Режим видео"})
table.insert(t, {"Window Mode", "Оконный"})
table.insert(t, {"Full Screen Mode", "На весь экран"})
table.insert(t, {"Maximized Window Mode", "Развёрнутое окно"})
table.insert(t, {"Screen Settings", "Настройки Экрана"})
table.insert(t, {"Screen Ratio", "Соотношение"})
table.insert(t, {"Screen Resolution", "Разрешение"})
table.insert(t, {"Visual Quality", "Качество графики"})
table.insert(t, {"Texture Resolution", "Качество текстур"})
table.insert(t, {"Sight Distanсe", "Дистанция видимости"})
table.insert(t, {"Character Detail", "Детали персонажей"})
table.insert(t, {"Background Distance", "Дистанция фона"})
table.insert(t, {"Object Detail", "Детали объектов"})
table.insert(t, {"Terrain Detail", "Детали земли"})
table.insert(t, {"Visual Effect Quality", "Визуальные эффекты"})
table.insert(t, {"Visual Effect Distance", "<font color='#feb63e'><font size='12'>Дистанция Виз.Эффектов</font></font>"})
table.insert(t, {"Shadow Detail", "Детали теней"})
table.insert(t, {"Max number of", "Максимум"})
table.insert(t, {"Max number of NPC", "Максимум Нпс"})
table.insert(t, {"Set All", "Выбрать всё"})
table.insert(t, {"Custom Settings", "Пользовательские"})
table.insert(t, {"Loading. Please wait.", "Идёт загрузка.Ждите."})
table.insert(t, {"Skill Growth", "Повышение навыков"})
table.insert(t, {"Use 1 Tactic", "Исп.1 тактику"})
table.insert(t, {"Tactic", "Тактика"})
table.insert(t, {"Tactics 1 Reset", "Сброс 1 тактики"})
table.insert(t, {"Stance Chain skill", "Основной навык"})
table.insert(t, {"Non-Chain skill", "Дополнительный навык"})
table.insert(t, {"Cancel Change", "<font size='12'>Отменить Изменение</font>"})
table.insert(t, {"Gem Conversion", "Преобразовать"})
table.insert(t, {"Gladiator Tactic", "Гладиатор"})
table.insert(t, {"Combat Stance", "Боевая Стойка"})
table.insert(t, {"Lasting effect", "Постоянный эффект"})
table.insert(t, {"Conversion Effect", "При использовании"})
table.insert(t, {"Enhancement and Enervated", "Повышение и ослабление"})
table.insert(t, {"Charge Tactic", "Обвинение"})
table.insert(t, {"Defense Tactic", "Защита"})
table.insert(t, {"Endurance Tactic", "Выносливость"})
table.insert(t, {"Survival tactics 1", "Выживание 1"})
table.insert(t, {"Survival Tactics 2", "Выживание 2"})
table.insert(t, {"Emergency Reset", "Спасение (30м)"})
table.insert(t, {"System Menu", "Системное Меню"})
table.insert(t, {"Character Info", "Персонаж"})
table.insert(t, {"Special Shop", "Магазин Люменов"})
table.insert(t, {"Craft List", "Крафт"})
table.insert(t, {"Market Status", "Аукцион"})
table.insert(t, {"Account Inbox", "Ящик Аккаунта"})
table.insert(t, {"Exchange Office", "Обмен Валюты"})
table.insert(t, {"World Map", "Карта"})
table.insert(t, {"Chain Start Skill", "Основной навык"})
table.insert(t, {"Chain Skill", "Основной навык"})
table.insert(t, {"targeting skill", "Цель: Да"})
table.insert(t, {"non targeting skill", "Цель: Нет"})
table.insert(t, {"Last Chain Skill", "Основной навык +"})
table.insert(t, {"Claim All ", "Взять Всё "})
table.insert(t, {"Transition effect", "Переходящий эффект"})
table.insert(t, {"Strengthen and Decrease", "Укрепление и Ослабление"})
table.insert(t, {"Growth Effects", "Растущий эффект"})
table.insert(t, {"Fire Element", "Огонь"})
table.insert(t, {"Ice Element", "Лёд"})
table.insert(t, {"Air Element", "Воздух"})
table.insert(t, {"fire element", "Огонь"})
table.insert(t, {"ice element", "Лёд"})
table.insert(t, {"air element", "Воздух"})
table.insert(t, {"Casting Time", "Время каста"})
table.insert(t, {"maximum mana", "Максимум маны"})
table.insert(t, {"Non-Chain Skill", "Дополнительный навык"})
table.insert(t, {"Acquisition condition", "Требуется"})
table.insert(t, {"Погрузочный.Подождать.", "Идет загрузка. Ждите."})
table.insert(t, {"Цепные навыки", "Основные навыки"})
table.insert(t, {"Не цепные навыки", "Дополнительные навыки"})
table.insert(t, {"Рост Навыков", "Улучшение Навыков"})
table.insert(t, {"Время Литья", "Время каста"})
table.insert(t, {"системное меню", "Системное меню"})
table.insert(t, {"Средний Урон От Атаки Оружия ", "Средний урон "})
table.insert(t, {"Урон От Атаки Оружием ", "Урон "})
table.insert(t, {"Доступный для продажи", "Доступно для продажи"})
table.insert(t, {"главное оружие", "Главное оружие"})
table.insert(t, {"Оценка экипировки", "Экипировка"})
table.insert(t, {"Maximum Health", "Здоровье"})
table.insert(t, {"Fighting Power", "Боевая мощь"})
table.insert(t, {"Ability Power", "Сила способностей"})
table.insert(t, {"Maximum Bravery", "Храбрость"})
table.insert(t, {"Physical Defense", "Физическая защита"})
table.insert(t, {"Magic Defense", "Магическая защита"})
table.insert(t, {"Weapon Damage", "Атака Оружием"})
table.insert(t, {"Weapon Power", "Сила Оружия"})
table.insert(t, {"Critical Hit", "Критический удар"})
table.insert(t, {"Shield Absorption", "Поглощение Щитом"})
table.insert(t, {"Magic Resistance", "Сопротивление Магии"})
table.insert(t, {"Главные квесты", "Главные"})
table.insert(t, {"Руководство квесты", "Руководство"})
table.insert(t, {"Побочные квесты", "Дополнительные"})
table.insert(t, {"Охота Квесты", "Охота на монстров"})
table.insert(t, {"Королевские квесты", "Королевские"})
table.insert(t, {"Окончательное Вознаграждение", "Вознаграждение"})
table.insert(t, {"черный список", "Чёрный список"})
table.insert(t, {"настройка интерфейса", "Настройка интерфейса"})
table.insert(t, {"Автоматическое Выравнивание Элементов", "Сортировка"})
table.insert(t, {"автоматический запуск", "Автоматический запуск"})
table.insert(t, {"Требовать Все ", "Взять всё "})
table.insert(t, {"Возвращение к экрану выбора символов", "Вернуться к выбору персонажа"})
table.insert(t, {"Слот свободен", "Пустой слот"})
table.insert(t, {"Вы выйдете из игры?", "Выйти из игры?"})
table.insert(t, {"Вы приобрели ", "Вы получили"})
table.insert(t, {"Transitional effects", " Переходящий эффект"})
table.insert(t, {"эффекты роста", "Улучшение:"})
table.insert(t, {"условие приобретения", "Необходимо:"})
table.insert(t, {"Преобразование Драгоценных Камней", "Преобразовать"})
table.insert(t, {"Оценка Продвижения По Службе", "Продвижение по службе"})
table.insert(t, {"Хранитель Склада", "Склад"})
table.insert(t, {"Боковое Оружие", "Второе Оружие"})
table.insert(t, {"Сбор инструмент требуется", "Требуется инструмент для сбора"})
table.insert(t, {"Non-Chain skill", "Дополнительный навык"})
table.insert(t, {"damage to the enemy", "урона противнику"})
table.insert(t, {"Возвращение к экрану выбора символов", "Вернуться к выбору персонажа?"})
table.insert(t, {"Уровень Обучения", "Уровень"})
table.insert(t, {"Обязательные Бериллы", "Бериллы"})
table.insert(t, {"Вы находитесь в канале ", "Вы находитесь на канале "})
table.insert(t, {"член партии", "Член отряда"})
table.insert(t, {"рука судьбы", "Возврат"})
table.insert(t, {"A good day to make", "Хороший день для крафта"})
table.insert(t, {"A good day to repair", "Хороший день для ремонта"})
table.insert(t, {"A good day to hunt", "Хороший день для охоты"})
table.insert(t, {"A Good Day to Adventure", "Хороший день для приключений"})
table.insert(t, {"элемент огня", "Огонь "})
table.insert(t, {"элемент Ice", "Лёд "})
table.insert(t, {"элемент Air", "Воздух "})
table.insert(t, {"Погрузочный. Подождать.", "Идёт загрузка. Ждите."})
table.insert(t, {"effective distance ", "Дистанция "})
table.insert(t, {"time until can be used again", "Откат"})
table.insert(t, {"Внешний Вид Нагрузки", "Загрузить Внешний Вид"})
table.insert(t, {"экранный режим", "Экранный режим"})
table.insert(t, {"человеческий тип", "Человек"})
table.insert(t, {"Тип Животного", "Животное"})
table.insert(t, {"skill damage", "урон навыков"})
table.insert(t, {"удар rate", "удар"})
table.insert(t, {"Stacks up to 15 time", "суммируется до 15 раз"})
table.insert(t, {"Reflect damage", "Отражает урон"})
table.insert(t, {"damage dealt", "урон"})
table.insert(t, {"Damage to enemies", "Урон врагам"})
table.insert(t, {"Временный эффект", "Постоянный эффект"})
table.insert(t, {"Преобразующий эффект", "При смене тактики"})
table.insert(t, {"Non-Основной навык", "Дополнительный навык"})
table.insert(t, {"изменить вид", "Доступна смена вида"})
table.insert(t, {"to the enemy", "урона противнику"})
table.insert(t, {"the damage of", "урон от"})
table.insert(t, {"Air skills", "Воздушные навыки"})
table.insert(t, {"Наносит maximum", "Наносит максимум"})
table.insert(t, {"and Magical Защиту на", "и Магическую защиту на"})
table.insert(t, {"Наносит Отражает урон на", "Отражает урон в течении"})
table.insert(t, {"Увеличивает Критический удар на", "Увеличивает шанс критического удара на"})
table.insert(t, {"суммируется до", "Суммируется до"})
table.insert(t, {"врагам увеличивает", "врагам увеличивается"})
table.insert(t, {"of maximum health", "от максимального здоровья"})
table.insert(t, {"when using certain", "при использовании некоторых"})
table.insert(t, {"Переходящий эффект", "При смене тактики"})
table.insert(t, {"Damage increased", "Увеличение урона"})
table.insert(t, {"crafting speed", "скорость крафта"})
table.insert(t, {"in EXP obtained from hunting", "опыта, полученного при охоте"})
table.insert(t, {"Giving damage increased", "Уеличение урона"})
table.insert(t, {"Damage reduced", "Снижение получаемого урона"})
table.insert(t, {"Health recovery rate", "Скорость восстановления здоровья +"})
table.insert(t, {"Physical and Magical", "Физическую и Магическую"})
table.insert(t, {"of wearing", "от ношения"})
table.insert(t, {"В удаление расходы", "Цена удаления:"})
table.insert(t, {"экранный режим", "Экранный режим"})
table.insert(t, {"экранный режим", "Экранный режим"})
table.insert(t, {"экранный режим", "Экранный режим"})
table.insert(t, {"экранный режим", "Экранный режим"})

for i=1, count do
    local first  = io.open(files_in[i][1], "r")
    local result_file = io.open(path2.."\\"..files_in[i][3]..files_in[i][4], "wb")
    for v in first:lines() do
        local v1 = v:match(".-%=")         -- получаем из строки всё что идёт до = (включая и сам знак равно)
        if v1 then                               -- если строка не пустая
            local v2 = v:match("%=(.*)")   -- получаем из строки всё что идёт после =

            for j=1, #t do  -- заменяем
                v2 =v2:gsub(t[j][1] , t[j][2])
            end

            result_file:write(v1 .. v2 .."\r\n")
        else                                      -- если знак = не был найден
            result_file:write(v .. "\r\n")        -- записываем строку без изменений
        end
    end
    first:close()
    result_file:close()
end
log "ОК"
log "Жду 2 секунды"
wait(2000)
log "Перевожу слова..."
-----------------------------------------------------------------------------------
local path=[[C:\\Rus\\TEST2]]   -- путь к папке с файлами
local path2=[[C:\\Rus\\TEST3]]  -- куда сохранять изменённые файлы

local files_in, count = dir (path, "*.txt", "norecursion")   -- получаем список всех txt файлов в папке
dircreate (path2)  -- создаём папку если её не было
local first, result_file = {}, {}
local t={
["Fire"]="Огонь",
["Lightning"]="Молния",
["Ice"]="Лёд",
["Adrenaline"]="Адреналин",
["Concentration"]="Концентрация",
["Potential"]="Потенциал",
["Lv."]="Ур.",
["Delete"]="Удалить",
["Cancel"]="Отмена",
["Apply"]="Принять",
["Reset"]="Сброс",
["Start"]="Старт",
["Brightness"]="Яркость",
["Ability"]="Способность",
["Selected"]="Выбор",
["Equip"]="Эквип",
["Change/OK"]="Подтвердить",
["Journal"]="Журнал",
["Friends"]="Друзья",
["Companions"]="Питомцы",
["Dungeon"]="Подземелья",
["War"]="Война",
["Interface"]="Интерфейс",
["Help"]="Помощь",
["Inventory"]="Инвентарь",
["Missions"]="Миссии",
["Mail"]="Почта",
["Guild"]="Гильдия",
["Spirit"]="Спирит",
["store"]="Магазин",
["seconds"]=" секунд",
["Bravery "]="Храбрость ",
["obtain"]=" +",
["Deals"]="Наносит",
["Obtain"]="Взять",
["consumption"]="-",
["Иерона"]="Гирона",
["Иерон"]="Гирон",
["Преобразование"]="Преобразовать",
["Изменение/ОК"]="Изменить",
["Монтировать"]="Эквип",
["Претезия"]="Получить",
["Оснащение"]="Требуется",
["оборудованный"]="надето",
["Разрушаемый"]="Разрушаемое",
["Strength"]="Сила",
["Жизнеспособность"]="Магазин",
["Wisdom"]="Мудрость",
["Intelligence"]="Интеллект",
["Agility"]="Ловкость",
["Stability"]="Стабильность",
["Hit"]="Удар",
["Acceleration"]="Ускорение",
["Dodge"]="Уклонение",
["Parry"]="Парирование",
["Block"]="Блок",
["Toughness"]="Стойкость",
["Долговечность"]="Прочность",
["Рынок"]="Аукцион",
["ОПЦИОНЫ"]="Опции Карты",
["Отвечать"]="Ответить",
["Получать"]="Взять",
["Применять"]="Принять",
["Vitality"]="Жизнеспособность",
["ОПЫТ"]="-Опыта",
["Маунты"]="Питомцы",
["менеджер"]="Аукцион",
["Темница"]="Подземелье",
["Вспоминать"]="Возврат",
["Collect"]="Сбор",
["Сапфировый"]="Сапфир",
["Погрузочный"]="Загрузка",
["Объединение"]="Союз",
["Спина"]="Назад",
["Установочный"]="Установки",
["CT_урона"]="CT_damage урона",
["Decreases"]="Уменьшает",
["decreases"]="уменьшает",
["Defense"]="Защиту",
["by"]="на",
["but"]="но",
["increases"]="увеличивает",
["Increases"]="Увеличивает",
["seconds."]="секунд.",
["for"]="на",
["Магазин"]="Живучесть",
["Сдвиг"]="Shift",
["котлов"]="меди",
["Странник"]="Лучник",
["skills"]="навыки",
["разs"]="раз",
["Restores"]="Восстанавливает",
["Non-Основной навык"]="Дополнительный навык",
["Increase"]="Увеличение",
["increase"]="увеличение",
["Удар"]="Точность",
["Hits"]="Точность",
["Frenzy"]="Бешенство",
["Knowledge"]="Знания",
["Effect"]="Эффект",
["parts"]="частей",
["Мисс"]="Промах",
["Удар"]="Точность",
["Удар"]="Точность",
["Удар"]="Точность",
["Удар"]="Точность",
["Удар"]="Точность",

}
for i=1, count do
    local first  = io.open(files_in[i][1], "r")
    local result_file = io.open(path2.."\\"..files_in[i][3]..files_in[i][4], "wb")
    for v in first:lines() do
        local v1 = v:match(".-%=")         -- получаем из строки всё что идёт до = (включая и сам знак равно)
        if v1 then                               -- если строка не пустая
            local v2 = v:match("%=(.*)")   -- получаем из строки всё что идёт после =
            result_file:write(v1 .. string.gsub(v2, "[0-9a-zA-Zа-яА-Я/._-]+", t).."\r\n")
        else                                      -- если знак = не был найден
            result_file:write(v .. "\r\n")        -- записываем строку без изменений
        end
    end
    first:close()
    result_file:close()
end
log "ОК"
wait(1000)
log "close"

код2 Не стал засекать время, проработал >5 мин
Код
--lua
log "clear" log "mode compact"
local path=[[C:\Rus\TEST]]   -- путь к папке с файлами
local path2=[[C:\Rus\TEST2]]  -- куда сохранять изменённые файлы

local files_in, count = dir (path, "*.txt", "norecursion")   -- получаем список всех txt файлов в папке
dircreate (path2)  -- создаём папку если её не было

local t, first, result_file = {}, {}, {}

table.insert(t, {"Fighting Spirit", "Боевой дух"})
table.insert(t, {"Select Character", "Выбор персонажа"})
table.insert(t, {"Character Available", "Пустой слот"})
table.insert(t, {"Select Server", "Выбор сервера"})
table.insert(t, {"Create Character", "Создание персонажа"})
table.insert(t, {"Change Appearance", "Сменить Внешность"})
table.insert(t, {"Save Appearance", "Сохранить внешность"})
table.insert(t, {"Quit Game", "Выйти из игры"})
table.insert(t, {"Will you quit the game", "Действительно выйти"})
table.insert(t, {"System Settings", "Системные настройки"})
table.insert(t, {"Sound Settings", "Звук"})
table.insert(t, {"Graphical Settings", "Графика"})
table.insert(t, {"Default Settings", "Основные"})
table.insert(t, {"Advanced Settings", "Дополнительные"})
table.insert(t, {"Created by", "Создатели"})
table.insert(t, {"Screen Mode", "Режим видео"})
table.insert(t, {"Window Mode", "Оконный"})
table.insert(t, {"Full Screen Mode", "На весь экран"})
table.insert(t, {"Maximized Window Mode", "Развёрнутое окно"})
table.insert(t, {"Screen Settings", "Настройки Экрана"})
table.insert(t, {"Screen Ratio", "Соотношение"})
table.insert(t, {"Screen Resolution", "Разрешение"})
table.insert(t, {"Visual Quality", "Качество графики"})
table.insert(t, {"Texture Resolution", "Качество текстур"})
table.insert(t, {"Sight Distanсe", "Дистанция видимости"})
table.insert(t, {"Character Detail", "Детали персонажей"})
table.insert(t, {"Background Distance", "Дистанция фона"})
table.insert(t, {"Object Detail", "Детали объектов"})
table.insert(t, {"Terrain Detail", "Детали земли"})
table.insert(t, {"Visual Effect Quality", "Визуальные эффекты"})
table.insert(t, {"Visual Effect Distance", "<font color='#feb63e'><font size='12'>Дистанция Виз.Эффектов</font></font>"})
table.insert(t, {"Shadow Detail", "Детали теней"})
table.insert(t, {"Max number of", "Максимум"})
table.insert(t, {"Max number of NPC", "Максимум Нпс"})
table.insert(t, {"Set All", "Выбрать всё"})
table.insert(t, {"Custom Settings", "Пользовательские"})
table.insert(t, {"Loading. Please wait.", "Идёт загрузка.Ждите."})
table.insert(t, {"Skill Growth", "Повышение навыков"})
table.insert(t, {"Use 1 Tactic", "Исп.1 тактику"})
table.insert(t, {"Tactic", "Тактика"})
table.insert(t, {"Tactics 1 Reset", "Сброс 1 тактики"})
table.insert(t, {"Stance Chain skill", "Основной навык"})
table.insert(t, {"Non-Chain skill", "Дополнительный навык"})
table.insert(t, {"Cancel Change", "<font size='12'>Отменить Изменение</font>"})
table.insert(t, {"Gem Conversion", "Преобразовать"})
table.insert(t, {"Gladiator Tactic", "Гладиатор"})
table.insert(t, {"Combat Stance", "Боевая Стойка"})
table.insert(t, {"Lasting effect", "Постоянный эффект"})
table.insert(t, {"Conversion Effect", "При использовании"})
table.insert(t, {"Enhancement and Enervated", "Повышение и ослабление"})
table.insert(t, {"Charge Tactic", "Обвинение"})
table.insert(t, {"Defense Tactic", "Защита"})
table.insert(t, {"Endurance Tactic", "Выносливость"})
table.insert(t, {"Survival tactics 1", "Выживание 1"})
table.insert(t, {"Survival Tactics 2", "Выживание 2"})
table.insert(t, {"Emergency Reset", "Спасение (30м)"})
table.insert(t, {"System Menu", "Системное Меню"})
table.insert(t, {"Character Info", "Персонаж"})
table.insert(t, {"Special Shop", "Магазин Люменов"})
table.insert(t, {"Craft List", "Крафт"})
table.insert(t, {"Market Status", "Аукцион"})
table.insert(t, {"Account Inbox", "Ящик Аккаунта"})
table.insert(t, {"Exchange Office", "Обмен Валюты"})
table.insert(t, {"World Map", "Карта"})
table.insert(t, {"Chain Start Skill", "Основной навык"})
table.insert(t, {"Chain Skill", "Основной навык"})
table.insert(t, {"targeting skill", "Цель: Да"})
table.insert(t, {"non targeting skill", "Цель: Нет"})
table.insert(t, {"Last Chain Skill", "Основной навык +"})
table.insert(t, {"Claim All ", "Взять Всё "})
table.insert(t, {"Transition effect", "Переходящий эффект"})
table.insert(t, {"Strengthen and Decrease", "Укрепление и Ослабление"})
table.insert(t, {"Growth Effects", "Растущий эффект"})
table.insert(t, {"Fire Element", "Огонь"})
table.insert(t, {"Ice Element", "Лёд"})
table.insert(t, {"Air Element", "Воздух"})
table.insert(t, {"fire element", "Огонь"})
table.insert(t, {"ice element", "Лёд"})
table.insert(t, {"air element", "Воздух"})
table.insert(t, {"Casting Time", "Время каста"})
table.insert(t, {"maximum mana", "Максимум маны"})
table.insert(t, {"Non-Chain Skill", "Дополнительный навык"})
table.insert(t, {"Acquisition condition", "Требуется"})
table.insert(t, {"Погрузочный.Подождать.", "Идет загрузка. Ждите."})
table.insert(t, {"Цепные навыки", "Основные навыки"})
table.insert(t, {"Не цепные навыки", "Дополнительные навыки"})
table.insert(t, {"Рост Навыков", "Улучшение Навыков"})
table.insert(t, {"Время Литья", "Время каста"})
table.insert(t, {"системное меню", "Системное меню"})
table.insert(t, {"Средний Урон От Атаки Оружия ", "Средний урон "})
table.insert(t, {"Урон От Атаки Оружием ", "Урон "})
table.insert(t, {"Доступный для продажи", "Доступно для продажи"})
table.insert(t, {"главное оружие", "Главное оружие"})
table.insert(t, {"Оценка экипировки", "Экипировка"})
table.insert(t, {"Maximum Health", "Здоровье"})
table.insert(t, {"Fighting Power", "Боевая мощь"})
table.insert(t, {"Ability Power", "Сила способностей"})
table.insert(t, {"Maximum Bravery", "Храбрость"})
table.insert(t, {"Physical Defense", "Физическая защита"})
table.insert(t, {"Magic Defense", "Магическая защита"})
table.insert(t, {"Weapon Damage", "Атака Оружием"})
table.insert(t, {"Weapon Power", "Сила Оружия"})
table.insert(t, {"Critical Hit", "Критический удар"})
table.insert(t, {"Shield Absorption", "Поглощение Щитом"})
table.insert(t, {"Magic Resistance", "Сопротивление Магии"})
table.insert(t, {"Главные квесты", "Главные"})
table.insert(t, {"Руководство квесты", "Руководство"})
table.insert(t, {"Побочные квесты", "Дополнительные"})
table.insert(t, {"Охота Квесты", "Охота на монстров"})
table.insert(t, {"Королевские квесты", "Королевские"})
table.insert(t, {"Окончательное Вознаграждение", "Вознаграждение"})
table.insert(t, {"черный список", "Чёрный список"})
table.insert(t, {"настройка интерфейса", "Настройка интерфейса"})
table.insert(t, {"Автоматическое Выравнивание Элементов", "Сортировка"})
table.insert(t, {"автоматический запуск", "Автоматический запуск"})
table.insert(t, {"Требовать Все ", "Взять всё "})
table.insert(t, {"Возвращение к экрану выбора символов", "Вернуться к выбору персонажа"})
table.insert(t, {"Слот свободен", "Пустой слот"})
table.insert(t, {"Вы выйдете из игры?", "Выйти из игры?"})
table.insert(t, {"Вы приобрели ", "Вы получили"})
table.insert(t, {"Transitional effects", " Переходящий эффект"})
table.insert(t, {"эффекты роста", "Улучшение:"})
table.insert(t, {"условие приобретения", "Необходимо:"})
table.insert(t, {"Преобразование Драгоценных Камней", "Преобразовать"})
table.insert(t, {"Оценка Продвижения По Службе", "Продвижение по службе"})
table.insert(t, {"Хранитель Склада", "Склад"})
table.insert(t, {"Боковое Оружие", "Второе Оружие"})
table.insert(t, {"Сбор инструмент требуется", "Требуется инструмент для сбора"})
table.insert(t, {"Non-Chain skill", "Дополнительный навык"})
table.insert(t, {"damage to the enemy", "урона противнику"})
table.insert(t, {"Возвращение к экрану выбора символов", "Вернуться к выбору персонажа?"})
table.insert(t, {"Уровень Обучения", "Уровень"})
table.insert(t, {"Обязательные Бериллы", "Бериллы"})
table.insert(t, {"Вы находитесь в канале ", "Вы находитесь на канале "})
table.insert(t, {"член партии", "Член отряда"})
table.insert(t, {"рука судьбы", "Возврат"})
table.insert(t, {"A good day to make", "Хороший день для крафта"})
table.insert(t, {"A good day to repair", "Хороший день для ремонта"})
table.insert(t, {"A good day to hunt", "Хороший день для охоты"})
table.insert(t, {"A Good Day to Adventure", "Хороший день для приключений"})
table.insert(t, {"элемент огня", "Огонь "})
table.insert(t, {"элемент Ice", "Лёд "})
table.insert(t, {"элемент Air", "Воздух "})
table.insert(t, {"Погрузочный. Подождать.", "Идёт загрузка. Ждите."})
table.insert(t, {"effective distance ", "Дистанция "})
table.insert(t, {"time until can be used again", "Откат"})
table.insert(t, {"Внешний Вид Нагрузки", "Загрузить Внешний Вид"})
table.insert(t, {"экранный режим", "Экранный режим"})
table.insert(t, {"человеческий тип", "Человек"})
table.insert(t, {"Тип Животного", "Животное"})
table.insert(t, {"skill damage", "урон навыков"})
table.insert(t, {"удар rate", "удар"})
table.insert(t, {"Stacks up to 15 time", "суммируется до 15 раз"})
table.insert(t, {"Reflect damage", "Отражает урон"})
table.insert(t, {"damage dealt", "урон"})
table.insert(t, {"Damage to enemies", "Урон врагам"})
table.insert(t, {"Временный эффект", "Постоянный эффект"})
table.insert(t, {"Преобразующий эффект", "При смене тактики"})
table.insert(t, {"Non-Основной навык", "Дополнительный навык"})
table.insert(t, {"изменить вид", "Доступна смена вида"})
table.insert(t, {"to the enemy", "урона противнику"})
table.insert(t, {"the damage of", "урон от"})
table.insert(t, {"Air skills", "Воздушные навыки"})
table.insert(t, {"Наносит maximum", "Наносит максимум"})
table.insert(t, {"and Magical Защиту на", "и Магическую защиту на"})
table.insert(t, {"Наносит Отражает урон на", "Отражает урон в течении"})
table.insert(t, {"Увеличивает Критический удар на", "Увеличивает шанс критического удара на"})
table.insert(t, {"суммируется до", "Суммируется до"})
table.insert(t, {"врагам увеличивает", "врагам увеличивается"})
table.insert(t, {"of maximum health", "от максимального здоровья"})
table.insert(t, {"when using certain", "при использовании некоторых"})
table.insert(t, {"Переходящий эффект", "При смене тактики"})
table.insert(t, {"Damage increased", "Увеличение урона"})
table.insert(t, {"crafting speed", "скорость крафта"})
table.insert(t, {"in EXP obtained from hunting", "опыта, полученного при охоте"})
table.insert(t, {"Giving damage increased", "Уеличение урона"})
table.insert(t, {"Damage reduced", "Снижение получаемого урона"})
table.insert(t, {"Health recovery rate", "Скорость восстановления здоровья +"})
table.insert(t, {"Physical and Magical", "Физическую и Магическую"})
table.insert(t, {"of wearing", "от ношения"})
table.insert(t, {"В удаление расходы", "Цена удаления:"})
-------------------------------------------------------------------
table.insert(t, {"Fire", "Огонь"})
table.insert(t, {"Lightning", "Молния"})
table.insert(t, {"Ice", "Лёд"})
table.insert(t, {"Adrenaline", "Адреналин"})
table.insert(t, {"Concentration", "Концентрация"})
table.insert(t, {"Potential", "Потенциал"})
table.insert(t, {"Lv.", "Ур."})
table.insert(t, {"Delete", "Удалить"})
table.insert(t, {"Cancel", "Отмена"})
table.insert(t, {"Apply", "Принять"})
table.insert(t, {"Reset", "Сброс"})
table.insert(t, {"Start", "Старт"})
table.insert(t, {"Brightness", "Яркость"})
table.insert(t, {"Ability", "Способность"})
table.insert(t, {"Selected", "Выбор"})
table.insert(t, {"Equip", "Эквип"})
table.insert(t, {"Change/OK", "Подтвердить"})
table.insert(t, {"Journal", "Журнал"})
table.insert(t, {"Friends", "Друзья"})
table.insert(t, {"Companions", "Питомцы"})
table.insert(t, {"Dungeon", "Подземелья"})
table.insert(t, {"War", "Война"})
table.insert(t, {"Interface", "Интерфейс"})
table.insert(t, {"Help", "Помощь"})
table.insert(t, {"Inventory", "Инвентарь"})
table.insert(t, {"Missions", "Миссии"})
table.insert(t, {"Mail", "Почта"})
table.insert(t, {"Guild", "Гильдия"})
table.insert(t, {"Spirit", "Спирит"})
table.insert(t, {"store", "Магазин"})
table.insert(t, {"seconds", " секунд"})
table.insert(t, {"Bravery ", "Храбрость "})
table.insert(t, {"obtain", " +"})
table.insert(t, {"Deals", "Наносит"})
table.insert(t, {"Obtain", "Взять"})
table.insert(t, {"consumption", "-"})
table.insert(t, {"Иерона", "Гирона"})
table.insert(t, {"Иерон", "Гирон"})
table.insert(t, {"Преобразование", "Преобразовать"})
table.insert(t, {"Изменение/ОК", "Изменить"})
table.insert(t, {"Монтировать", "Эквип"})
table.insert(t, {"Претезия", "Получить"})
table.insert(t, {"Оснащение", "Требуется"})
table.insert(t, {"оборудованный", "надето"})
table.insert(t, {"Разрушаемый", "Разрушаемое"})
table.insert(t, {"Strength", "Сила"})
table.insert(t, {"Жизнеспособность", "Магазин"})
table.insert(t, {"Wisdom", "Мудрость"})
table.insert(t, {"Intelligence", "Интеллект"})
table.insert(t, {"Agility", "Ловкость"})
table.insert(t, {"Stability", "Стабильность"})
table.insert(t, {"Hit", "Удар"})
table.insert(t, {"Acceleration", "Ускорение"})
table.insert(t, {"Dodge", "Уклонение"})
table.insert(t, {"Parry", "Парирование"})
table.insert(t, {"Block", "Блок"})
table.insert(t, {"Toughness", "Стойкость"})
table.insert(t, {"Долговечность", "Прочность"})
table.insert(t, {"Рынок", "Аукцион"})
table.insert(t, {"ОПЦИОНЫ", "Опции Карты"})
table.insert(t, {"Отвечать", "Ответить"})
table.insert(t, {"Получать", "Взять"})
table.insert(t, {"Применять", "Принять"})
table.insert(t, {"Vitality", "Жизнеспособность"})
table.insert(t, {"ОПЫТ", "-Опыта"})
table.insert(t, {"Маунты", "Питомцы"})
table.insert(t, {"менеджер", "Аукцион"})
table.insert(t, {"Темница", "Подземелье"})
table.insert(t, {"Вспоминать", "Возврат"})
table.insert(t, {"Collect", "Сбор"})
table.insert(t, {"Сапфировый", "Сапфир"})
table.insert(t, {"Погрузочный", "Загрузка"})
table.insert(t, {"Объединение", "Союз"})
table.insert(t, {"Спина", "Назад"})
table.insert(t, {"Установочный", "Установки"})
table.insert(t, {"CT_урона", "CT_damage урона"})
table.insert(t, {"Decreases", "Уменьшает"})
table.insert(t, {"decreases", "уменьшает"})
table.insert(t, {"Defense", "Защиту"})
table.insert(t, {"by", "на"})
table.insert(t, {"but", "но"})
table.insert(t, {"increases", "увеличивает"})
table.insert(t, {"Increases", "Увеличивает"})
table.insert(t, {"seconds.", "секунд."})
table.insert(t, {"for", "на"})
table.insert(t, {"Магазин", "Живучесть"})
table.insert(t, {"Сдвиг", "Shift"})
table.insert(t, {"котлов", "меди"})
table.insert(t, {"Странник", "Лучник"})
table.insert(t, {"skills", "навыки"})
table.insert(t, {"разs", "раз"})
table.insert(t, {"Restores", "Восстанавливает"})
table.insert(t, {"Non-Основной навык", "Дополнительный навык"})
table.insert(t, {"Increase", "Увеличение"})
table.insert(t, {"increase", "увеличение"})
table.insert(t, {"Удар", "Точность"})
table.insert(t, {"Hits", "Точность"})
table.insert(t, {"Frenzy", "Бешенство"})
table.insert(t, {"Knowledge", "Знания"})
table.insert(t, {"Effect", "Эффект"})
table.insert(t, {"parts", "частей"})
table.insert(t, {"Мисс", "Промах"})

-- в одной таблице слова, в другой строки из нескольких слов
local t1, t2 ={}, {}
for i=1, #t do
    if t[i][1]:match("%s") == nil then   -- если нет пробела, значит ищем 1 слово
        t1[t[i][1]]=t[i][2]   -- таблица со словами
    else                                 -- иначе строка из нескольких слов
        t2[t[i][1]]=t[i][2]   -- таблица со строками
    end
end

for i=1, count do
    local first  = io.open(files_in[i][1], "r")
    local result_file = io.open(path2.."\\"..files_in[i][3]..files_in[i][4], "wb")

    for v in first:lines() do
        local v1 = v:match(".-%=")         -- получаем из строки всё что идёт до = (включая и сам знак равно)
        if v1 then                               -- если строка не пустая
            local v2 = v:match("%=(.*)")   -- получаем из строки всё что идёт после =

            for j=1, #t do
                if t[j][1]:match("%s") then
                    for key, val in pairs(t2) do
                        v2 = v2:gsub(key, val)
                    end
                else
                    v2=v2:gsub("[a-zA-Zа-яА-Я]+", t1)
                end
            end

            result_file:write(v1 .. v2 .."\r\n")
        else                                      -- если знак = не был найден
            result_file:write(v .. "\r\n")        -- записываем строку без изменений
        end
    end
    first:close()
    result_file:close()
end

+файл прикрепил


Прикрепленные файлы
Прикрепленный файл  Skill.txt ( 1,95 мегабайт ) Кол-во скачиваний: 405

Автор: cirus 9.6.2018, 19:40

Лишний цикл был, исправил:

код
Код
--lua
time=os.clock()
log "clear" log "mode compact"
local path=[[C:\Rus\TEST]]   -- путь к папке с файлами
local path2=[[C:\Rus\TEST2]]  -- куда сохранять изменённые файлы

local files_in, count = dir (path, "*.txt", "norecursion")   -- получаем список всех txt файлов в папке
dircreate (path2)  -- создаём папку если её не было

local t, first, result_file = {}, {}, {}

table.insert(t, {"Fighting Spirit", "Боевой дух"})
table.insert(t, {"Select Character", "Выбор персонажа"})
table.insert(t, {"Character Available", "Пустой слот"})
table.insert(t, {"Select Server", "Выбор сервера"})
table.insert(t, {"Create Character", "Создание персонажа"})
table.insert(t, {"Change Appearance", "Сменить Внешность"})
table.insert(t, {"Save Appearance", "Сохранить внешность"})
table.insert(t, {"Quit Game", "Выйти из игры"})
table.insert(t, {"Will you quit the game", "Действительно выйти"})
table.insert(t, {"System Settings", "Системные настройки"})
table.insert(t, {"Sound Settings", "Звук"})
table.insert(t, {"Graphical Settings", "Графика"})
table.insert(t, {"Default Settings", "Основные"})
table.insert(t, {"Advanced Settings", "Дополнительные"})
table.insert(t, {"Created by", "Создатели"})
table.insert(t, {"Screen Mode", "Режим видео"})
table.insert(t, {"Window Mode", "Оконный"})
table.insert(t, {"Full Screen Mode", "На весь экран"})
table.insert(t, {"Maximized Window Mode", "Развёрнутое окно"})
table.insert(t, {"Screen Settings", "Настройки Экрана"})
table.insert(t, {"Screen Ratio", "Соотношение"})
table.insert(t, {"Screen Resolution", "Разрешение"})
table.insert(t, {"Visual Quality", "Качество графики"})
table.insert(t, {"Texture Resolution", "Качество текстур"})
table.insert(t, {"Sight Distanсe", "Дистанция видимости"})
table.insert(t, {"Character Detail", "Детали персонажей"})
table.insert(t, {"Background Distance", "Дистанция фона"})
table.insert(t, {"Object Detail", "Детали объектов"})
table.insert(t, {"Terrain Detail", "Детали земли"})
table.insert(t, {"Visual Effect Quality", "Визуальные эффекты"})
table.insert(t, {"Visual Effect Distance", "<font color='#feb63e'><font size='12'>Дистанция Виз.Эффектов</font></font>"})
table.insert(t, {"Shadow Detail", "Детали теней"})
table.insert(t, {"Max number of", "Максимум"})
table.insert(t, {"Max number of NPC", "Максимум Нпс"})
table.insert(t, {"Set All", "Выбрать всё"})
table.insert(t, {"Custom Settings", "Пользовательские"})
table.insert(t, {"Loading. Please wait.", "Идёт загрузка.Ждите."})
table.insert(t, {"Skill Growth", "Повышение навыков"})
table.insert(t, {"Use 1 Tactic", "Исп.1 тактику"})
table.insert(t, {"Tactic", "Тактика"})
table.insert(t, {"Tactics 1 Reset", "Сброс 1 тактики"})
table.insert(t, {"Stance Chain skill", "Основной навык"})
table.insert(t, {"Non-Chain skill", "Дополнительный навык"})
table.insert(t, {"Cancel Change", "<font size='12'>Отменить Изменение</font>"})
table.insert(t, {"Gem Conversion", "Преобразовать"})
table.insert(t, {"Gladiator Tactic", "Гладиатор"})
table.insert(t, {"Combat Stance", "Боевая Стойка"})
table.insert(t, {"Lasting effect", "Постоянный эффект"})
table.insert(t, {"Conversion Effect", "При использовании"})
table.insert(t, {"Enhancement and Enervated", "Повышение и ослабление"})
table.insert(t, {"Charge Tactic", "Обвинение"})
table.insert(t, {"Defense Tactic", "Защита"})
table.insert(t, {"Endurance Tactic", "Выносливость"})
table.insert(t, {"Survival tactics 1", "Выживание 1"})
table.insert(t, {"Survival Tactics 2", "Выживание 2"})
table.insert(t, {"Emergency Reset", "Спасение (30м)"})
table.insert(t, {"System Menu", "Системное Меню"})
table.insert(t, {"Character Info", "Персонаж"})
table.insert(t, {"Special Shop", "Магазин Люменов"})
table.insert(t, {"Craft List", "Крафт"})
table.insert(t, {"Market Status", "Аукцион"})
table.insert(t, {"Account Inbox", "Ящик Аккаунта"})
table.insert(t, {"Exchange Office", "Обмен Валюты"})
table.insert(t, {"World Map", "Карта"})
table.insert(t, {"Chain Start Skill", "Основной навык"})
table.insert(t, {"Chain Skill", "Основной навык"})
table.insert(t, {"targeting skill", "Цель: Да"})
table.insert(t, {"non targeting skill", "Цель: Нет"})
table.insert(t, {"Last Chain Skill", "Основной навык +"})
table.insert(t, {"Claim All ", "Взять Всё "})
table.insert(t, {"Transition effect", "Переходящий эффект"})
table.insert(t, {"Strengthen and Decrease", "Укрепление и Ослабление"})
table.insert(t, {"Growth Effects", "Растущий эффект"})
table.insert(t, {"Fire Element", "Огонь"})
table.insert(t, {"Ice Element", "Лёд"})
table.insert(t, {"Air Element", "Воздух"})
table.insert(t, {"fire element", "Огонь"})
table.insert(t, {"ice element", "Лёд"})
table.insert(t, {"air element", "Воздух"})
table.insert(t, {"Casting Time", "Время каста"})
table.insert(t, {"maximum mana", "Максимум маны"})
table.insert(t, {"Non-Chain Skill", "Дополнительный навык"})
table.insert(t, {"Acquisition condition", "Требуется"})
table.insert(t, {"Погрузочный.Подождать.", "Идет загрузка. Ждите."})
table.insert(t, {"Цепные навыки", "Основные навыки"})
table.insert(t, {"Не цепные навыки", "Дополнительные навыки"})
table.insert(t, {"Рост Навыков", "Улучшение Навыков"})
table.insert(t, {"Время Литья", "Время каста"})
table.insert(t, {"системное меню", "Системное меню"})
table.insert(t, {"Средний Урон От Атаки Оружия ", "Средний урон "})
table.insert(t, {"Урон От Атаки Оружием ", "Урон "})
table.insert(t, {"Доступный для продажи", "Доступно для продажи"})
table.insert(t, {"главное оружие", "Главное оружие"})
table.insert(t, {"Оценка экипировки", "Экипировка"})
table.insert(t, {"Maximum Health", "Здоровье"})
table.insert(t, {"Fighting Power", "Боевая мощь"})
table.insert(t, {"Ability Power", "Сила способностей"})
table.insert(t, {"Maximum Bravery", "Храбрость"})
table.insert(t, {"Physical Defense", "Физическая защита"})
table.insert(t, {"Magic Defense", "Магическая защита"})
table.insert(t, {"Weapon Damage", "Атака Оружием"})
table.insert(t, {"Weapon Power", "Сила Оружия"})
table.insert(t, {"Critical Hit", "Критический удар"})
table.insert(t, {"Shield Absorption", "Поглощение Щитом"})
table.insert(t, {"Magic Resistance", "Сопротивление Магии"})
table.insert(t, {"Главные квесты", "Главные"})
table.insert(t, {"Руководство квесты", "Руководство"})
table.insert(t, {"Побочные квесты", "Дополнительные"})
table.insert(t, {"Охота Квесты", "Охота на монстров"})
table.insert(t, {"Королевские квесты", "Королевские"})
table.insert(t, {"Окончательное Вознаграждение", "Вознаграждение"})
table.insert(t, {"черный список", "Чёрный список"})
table.insert(t, {"настройка интерфейса", "Настройка интерфейса"})
table.insert(t, {"Автоматическое Выравнивание Элементов", "Сортировка"})
table.insert(t, {"автоматический запуск", "Автоматический запуск"})
table.insert(t, {"Требовать Все ", "Взять всё "})
table.insert(t, {"Возвращение к экрану выбора символов", "Вернуться к выбору персонажа"})
table.insert(t, {"Слот свободен", "Пустой слот"})
table.insert(t, {"Вы выйдете из игры?", "Выйти из игры?"})
table.insert(t, {"Вы приобрели ", "Вы получили"})
table.insert(t, {"Transitional effects", " Переходящий эффект"})
table.insert(t, {"эффекты роста", "Улучшение:"})
table.insert(t, {"условие приобретения", "Необходимо:"})
table.insert(t, {"Преобразование Драгоценных Камней", "Преобразовать"})
table.insert(t, {"Оценка Продвижения По Службе", "Продвижение по службе"})
table.insert(t, {"Хранитель Склада", "Склад"})
table.insert(t, {"Боковое Оружие", "Второе Оружие"})
table.insert(t, {"Сбор инструмент требуется", "Требуется инструмент для сбора"})
table.insert(t, {"Non-Chain skill", "Дополнительный навык"})
table.insert(t, {"damage to the enemy", "урона противнику"})
table.insert(t, {"Возвращение к экрану выбора символов", "Вернуться к выбору персонажа?"})
table.insert(t, {"Уровень Обучения", "Уровень"})
table.insert(t, {"Обязательные Бериллы", "Бериллы"})
table.insert(t, {"Вы находитесь в канале ", "Вы находитесь на канале "})
table.insert(t, {"член партии", "Член отряда"})
table.insert(t, {"рука судьбы", "Возврат"})
table.insert(t, {"A good day to make", "Хороший день для крафта"})
table.insert(t, {"A good day to repair", "Хороший день для ремонта"})
table.insert(t, {"A good day to hunt", "Хороший день для охоты"})
table.insert(t, {"A Good Day to Adventure", "Хороший день для приключений"})
table.insert(t, {"элемент огня", "Огонь "})
table.insert(t, {"элемент Ice", "Лёд "})
table.insert(t, {"элемент Air", "Воздух "})
table.insert(t, {"Погрузочный. Подождать.", "Идёт загрузка. Ждите."})
table.insert(t, {"effective distance ", "Дистанция "})
table.insert(t, {"time until can be used again", "Откат"})
table.insert(t, {"Внешний Вид Нагрузки", "Загрузить Внешний Вид"})
table.insert(t, {"экранный режим", "Экранный режим"})
table.insert(t, {"человеческий тип", "Человек"})
table.insert(t, {"Тип Животного", "Животное"})
table.insert(t, {"skill damage", "урон навыков"})
table.insert(t, {"удар rate", "удар"})
table.insert(t, {"Stacks up to 15 time", "суммируется до 15 раз"})
table.insert(t, {"Reflect damage", "Отражает урон"})
table.insert(t, {"damage dealt", "урон"})
table.insert(t, {"Damage to enemies", "Урон врагам"})
table.insert(t, {"Временный эффект", "Постоянный эффект"})
table.insert(t, {"Преобразующий эффект", "При смене тактики"})
table.insert(t, {"Non-Основной навык", "Дополнительный навык"})
table.insert(t, {"изменить вид", "Доступна смена вида"})
table.insert(t, {"to the enemy", "урона противнику"})
table.insert(t, {"the damage of", "урон от"})
table.insert(t, {"Air skills", "Воздушные навыки"})
table.insert(t, {"Наносит maximum", "Наносит максимум"})
table.insert(t, {"and Magical Защиту на", "и Магическую защиту на"})
table.insert(t, {"Наносит Отражает урон на", "Отражает урон в течении"})
table.insert(t, {"Увеличивает Критический удар на", "Увеличивает шанс критического удара на"})
table.insert(t, {"суммируется до", "Суммируется до"})
table.insert(t, {"врагам увеличивает", "врагам увеличивается"})
table.insert(t, {"of maximum health", "от максимального здоровья"})
table.insert(t, {"when using certain", "при использовании некоторых"})
table.insert(t, {"Переходящий эффект", "При смене тактики"})
table.insert(t, {"Damage increased", "Увеличение урона"})
table.insert(t, {"crafting speed", "скорость крафта"})
table.insert(t, {"in EXP obtained from hunting", "опыта, полученного при охоте"})
table.insert(t, {"Giving damage increased", "Уеличение урона"})
table.insert(t, {"Damage reduced", "Снижение получаемого урона"})
table.insert(t, {"Health recovery rate", "Скорость восстановления здоровья +"})
table.insert(t, {"Physical and Magical", "Физическую и Магическую"})
table.insert(t, {"of wearing", "от ношения"})
table.insert(t, {"В удаление расходы", "Цена удаления:"})
-------------------------------------------------------------------
table.insert(t, {"Fire", "Огонь"})
table.insert(t, {"Lightning", "Молния"})
table.insert(t, {"Ice", "Лёд"})
table.insert(t, {"Adrenaline", "Адреналин"})
table.insert(t, {"Concentration", "Концентрация"})
table.insert(t, {"Potential", "Потенциал"})
table.insert(t, {"Lv.", "Ур."})
table.insert(t, {"Delete", "Удалить"})
table.insert(t, {"Cancel", "Отмена"})
table.insert(t, {"Apply", "Принять"})
table.insert(t, {"Reset", "Сброс"})
table.insert(t, {"Start", "Старт"})
table.insert(t, {"Brightness", "Яркость"})
table.insert(t, {"Ability", "Способность"})
table.insert(t, {"Selected", "Выбор"})
table.insert(t, {"Equip", "Эквип"})
table.insert(t, {"Change/OK", "Подтвердить"})
table.insert(t, {"Journal", "Журнал"})
table.insert(t, {"Friends", "Друзья"})
table.insert(t, {"Companions", "Питомцы"})
table.insert(t, {"Dungeon", "Подземелья"})
table.insert(t, {"War", "Война"})
table.insert(t, {"Interface", "Интерфейс"})
table.insert(t, {"Help", "Помощь"})
table.insert(t, {"Inventory", "Инвентарь"})
table.insert(t, {"Missions", "Миссии"})
table.insert(t, {"Mail", "Почта"})
table.insert(t, {"Guild", "Гильдия"})
table.insert(t, {"Spirit", "Спирит"})
table.insert(t, {"store", "Магазин"})
table.insert(t, {"seconds", " секунд"})
table.insert(t, {"Bravery ", "Храбрость "})
table.insert(t, {"obtain", " +"})
table.insert(t, {"Deals", "Наносит"})
table.insert(t, {"Obtain", "Взять"})
table.insert(t, {"consumption", "-"})
table.insert(t, {"Иерона", "Гирона"})
table.insert(t, {"Иерон", "Гирон"})
table.insert(t, {"Преобразование", "Преобразовать"})
table.insert(t, {"Изменение/ОК", "Изменить"})
table.insert(t, {"Монтировать", "Эквип"})
table.insert(t, {"Претезия", "Получить"})
table.insert(t, {"Оснащение", "Требуется"})
table.insert(t, {"оборудованный", "надето"})
table.insert(t, {"Разрушаемый", "Разрушаемое"})
table.insert(t, {"Strength", "Сила"})
table.insert(t, {"Жизнеспособность", "Магазин"})
table.insert(t, {"Wisdom", "Мудрость"})
table.insert(t, {"Intelligence", "Интеллект"})
table.insert(t, {"Agility", "Ловкость"})
table.insert(t, {"Stability", "Стабильность"})
table.insert(t, {"Hit", "Удар"})
table.insert(t, {"Acceleration", "Ускорение"})
table.insert(t, {"Dodge", "Уклонение"})
table.insert(t, {"Parry", "Парирование"})
table.insert(t, {"Block", "Блок"})
table.insert(t, {"Toughness", "Стойкость"})
table.insert(t, {"Долговечность", "Прочность"})
table.insert(t, {"Рынок", "Аукцион"})
table.insert(t, {"ОПЦИОНЫ", "Опции Карты"})
table.insert(t, {"Отвечать", "Ответить"})
table.insert(t, {"Получать", "Взять"})
table.insert(t, {"Применять", "Принять"})
table.insert(t, {"Vitality", "Жизнеспособность"})
table.insert(t, {"ОПЫТ", "-Опыта"})
table.insert(t, {"Маунты", "Питомцы"})
table.insert(t, {"менеджер", "Аукцион"})
table.insert(t, {"Темница", "Подземелье"})
table.insert(t, {"Вспоминать", "Возврат"})
table.insert(t, {"Collect", "Сбор"})
table.insert(t, {"Сапфировый", "Сапфир"})
table.insert(t, {"Погрузочный", "Загрузка"})
table.insert(t, {"Объединение", "Союз"})
table.insert(t, {"Спина", "Назад"})
table.insert(t, {"Установочный", "Установки"})
table.insert(t, {"CT_урона", "CT_damage урона"})
table.insert(t, {"Decreases", "Уменьшает"})
table.insert(t, {"decreases", "уменьшает"})
table.insert(t, {"Defense", "Защиту"})
table.insert(t, {"by", "на"})
table.insert(t, {"but", "но"})
table.insert(t, {"increases", "увеличивает"})
table.insert(t, {"Increases", "Увеличивает"})
table.insert(t, {"seconds.", "секунд."})
table.insert(t, {"for", "на"})
table.insert(t, {"Магазин", "Живучесть"})
table.insert(t, {"Сдвиг", "Shift"})
table.insert(t, {"котлов", "меди"})
table.insert(t, {"Странник", "Лучник"})
table.insert(t, {"skills", "навыки"})
table.insert(t, {"разs", "раз"})
table.insert(t, {"Restores", "Восстанавливает"})
table.insert(t, {"Non-Основной навык", "Дополнительный навык"})
table.insert(t, {"Increase", "Увеличение"})
table.insert(t, {"increase", "увеличение"})
table.insert(t, {"Удар", "Точность"})
table.insert(t, {"Hits", "Точность"})
table.insert(t, {"Frenzy", "Бешенство"})
table.insert(t, {"Knowledge", "Знания"})
table.insert(t, {"Effect", "Эффект"})
table.insert(t, {"parts", "частей"})
table.insert(t, {"Мисс", "Промах"})

-- в одной таблице слова, в другой строки из нескольких слов
local t1, t2 ={}, {}
for i=1, #t do
    if t[i][1]:match("%s") == nil then   -- если нет пробела, значит ищем 1 слово
        t1[t[i][1]]=t[i][2]   -- таблица со словами
    else                                 -- иначе строка из нескольких слов
        table.insert(t2, {t[i][1], t[i][2]})    -- таблица со строками
    end
end

for i=1, count do
    local first  = io.open(files_in[i][1], "r")
    local result_file = io.open(path2.."\\"..files_in[i][3]..files_in[i][4], "wb")

    for v in first:lines() do
        local v1 = v:match(".-%=")         -- получаем из строки всё что идёт до = (включая и сам знак равно)
        if v1 then                               -- если строка не пустая
            local v2 = v:match("%=(.*)")   -- получаем из строки всё что идёт после =
            
            for k=1, #t2 do   -- заменяем строки
                v2 = v2:gsub(t2[k][1], t2[k][2])
            end

            v2=v2:gsub("[a-zA-Zа-яА-Я]+", t1)   -- заменяем слова

            result_file:write(v1 .. v2 .."\r\n")
        else                                      -- если знак = не был найден
            result_file:write(v .. "\r\n")        -- записываем строку без изменений
        end
    end
    first:close()
    result_file:close()
end
log (os.clock()-time)

Автор: portos 25.8.2018, 23:02

Цитата(cirus @ 8.6.2018, 1:51) *

Если менять фразы, а не только слова, то проще так:
код
Код
--lua
log "clear" log "mode compact"
local path=[[C:\Rus\TEST]]   -- путь к папке с файлами
local path2=[[C:\Rus\TEST2]]  -- куда сохранять изменённые файлы
local files_in, count = dir (path, "*.txt", "norecursion")   -- получаем список всех txt файлов в папке
dircreate (path2)  -- создаём папку если её не было

local t, first, result_file = {}, {}, {}

table.insert(t, {"привет", "+++"})    -- 'привет' заменить на '+++'
table.insert(t, {"здрасти как дела", "---"})   -- 'здрасти как дела' заменить на '---'
table.insert(t, {"как ваши", "12345"})  -- 'как ваши' заменить на '12345'

for i=1, count do
    local first  = io.open(files_in[i][1], "r")
    local result_file = io.open(path2.."\\"..files_in[i][3]..files_in[i][4], "wb")

    for v in first:lines() do
        local v1 = v:match(".-%=")         -- получаем из строки всё что идёт до = (включая и сам знак равно)
        if v1 then                               -- если строка не пустая
            local v2 = v:match("%=(.*)")   -- получаем из строки всё что идёт после =

            for j=1, #t do  -- заменяем
                v2 =v2:gsub(t[j][1] , t[j][2])
            end

            result_file:write(v1 .. v2 .."\r\n")
        else                                      -- если знак = не был найден
            result_file:write(v .. "\r\n")        -- записываем строку без изменений
        end
    end
    first:close()
    result_file:close()
end



это с lua работает только ,как работать с файлами на пк ?

Автор: cirus 25.8.2018, 23:27

Цитата
как работать с файлами на пк ?

А что требуется сделать?

Автор: portos 25.8.2018, 23:33

Цитата(cirus @ 25.8.2018, 21:27) *

А что требуется сделать?


заменить одно слово в одном док , на другое в другом док или фразу

Автор: cirus 26.8.2018, 0:00

Код
--lua
local path_in=[[C:\Users\abc\Desktop\file1.txt]]     -- путь к файлу, в котором надо найти текст
local path_out=[[C:\Users\abc\Desktop\file2.txt]]    -- куда сохранить

local f  = io.open(path_in, "r")    -- открываем файл для чтения
local result_f = io.open(path_out, "wb")  -- открываем для записи, если файла не существует он будет создан

for v in f:lines() do       -- читаем файл по строкам
    result_f:write(v:gsub("Hello", "Привет") .."\r\n")   -- пишем в файл, при этом заменить все слова Hello на Привет
end

f:close()        -- закрываем файл
result_f:close()  -- закрываем файл

Автор: portos 26.8.2018, 0:04

Цитата(cirus @ 25.8.2018, 22:00) *

Код
--lua
local path_in=[[C:\Users\abc\Desktop\file1.txt]]     -- путь к файлу, в котором надо найти текст
local path_out=[[C:\Users\abc\Desktop\file2.txt]]    -- куда сохранить

local f  = io.open(path_in, "r")    -- открываем файл для чтения
local result_f = io.open(path_out, "wb")  -- открываем для записи, если файла не существует он будет создан

for v in f:lines() do       -- читаем файл по строкам
    result_f:write(v:gsub("Hello", "Привет") .."\r\n")   -- пишем в файл, при этом заменить все слова Hello на Привет
end

f:close()        -- закрываем файл
result_f:close()  -- закрываем файл



--lua
local path_in=[[C:\Users\portos\Desktop\1111.txt]] -- путь к файлу, в котором надо найти текст
local path_out=[[C:\Users\portos\Desktop\2222.txt]] -- куда сохранить

local f = io.open(path_in, "r") -- открываем файл для чтения
local result_f = io.open(path_out, "wb") -- открываем для записи, если файла не существует он будет создан

for v in f:lines() do -- читаем файл по строкам
result_f:write(v:gsub(".18", "Привет") .."\r\n") -- пишем в файл, при этом заменить все слова Hello на Привет
end

f:close() -- закрываем файл
result_f:close() -- закрываем файл

выдаёт ошибку

0:02:51 47 (autosaved_47.txt, 3): local - (3): Ошибка! Проверьте правильность скрипта! EAccessViolation Access violation at address 005501CD in module 'uopilot.exe'. Write of address 000000C0
--lua
local path_in=[[C:\Users\portos\Desktop\1111.txt]] -- путь к файлу, в котором надо найти текс
0:03:40 47 (autosaved_47.txt, 3): local - (3): Ошибка! Проверьте правильность скрипта! EAccessViolation Access violation at address 005501CD in module 'uopilot.exe'. Write of address 000000C0
--lua
local path_in=[[C:\Users\portos\Desktop\1111.txt]] -- путь к файлу, в котором надо найти текс

Автор: cirus 26.8.2018, 0:29

А версия пилота какая?
Последнюю стабильную скачайте: http://uopilot.uokit.com

Автор: portos 26.8.2018, 0:36

Цитата(cirus @ 25.8.2018, 22:29) *

А версия пилота какая?
Последнюю стабильную скачайте: http://uopilot.uokit.com


0:34:52 0 (autosaved_0.txt, 0): Error while creating Lua virtual mashine
0:34:55 0 (autosaved_0.txt, 0): --lua - Неопознанная команда: --lua
0:35:34 0 (autosaved_0.txt, 1): --lua - Error while creating Lua virtual mashine
0:35:35 0 (autosaved_0.txt, 1): local - Неопознанная команда: local
0:36:16 0 (autosaved_0.txt, 2): local - Error while creating Lua virtual mashine
0:36:17 0 (autosaved_0.txt, 1): local - Неопознанная команда: local

Автор: cirus 26.8.2018, 0:38

Эту:
Night version
Stable
01.07.2018 Build 013

Автор: portos 26.8.2018, 0:42

Цитата(cirus @ 25.8.2018, 22:29) *

А версия пилота какая?
Последнюю стабильную скачайте: http://uopilot.uokit.com


скачал

0:41:11 1 (autosaved_1.txt, 0): Lua загружен.
0:41:11 1 (autosaved_1.txt, 0): a runtime error.
8: attempt to index local 'f' (a nil value)
--lua
local path_in=[[C:\Users\abc\Desktop\file1.txt]] -- путь к файлу, в котором надо найти текст
local path_out=[[C:\Users\abc\Desktop\file2.txt]] -- куда сохран

Автор: cirus 26.8.2018, 0:46

А путь кто будет менять...

Цитата
C:\Users\abc\Desktop\file1.txt

Цитата
C:\Users\portos\Desktop\1111.txt

Проверки на существование файла нет в данном коде.

Автор: portos 26.8.2018, 0:57

Цитата(cirus @ 25.8.2018, 22:46) *

А путь кто будет менять...
Проверки на существование файла нет в данном коде.


--lua
local path_in=[[C:\Users\portos\Desktop\1111.txt]] -- путь к файлу, в котором надо найти текст
local path_out=[[C:\Users\portos\Desktop\2222.txt]] -- куда сохранить

local f = io.open(path_in, "r") -- открываем файл для чтения
local result_f = io.open(path_out, "wb") -- открываем для записи, если файла не существует он будет создан

for v in f:lines() do -- читаем файл по строкам
result_f:write(v:gsub(".18", "Привет") .."\r\n") -- пишем в файл, при этом заменить все слова Hello на Привет
end

f:close() -- закрываем файл
result_f:close() -- закрываем файл

вообще ничего не происходит , не запускается

Автор: cirus 26.8.2018, 1:06

А файл C:\Users\portos\Desktop\2222.txt открывали? Если в 1111.txt были ".18", то они заменятся.

Автор: portos 26.8.2018, 1:14

Цитата(cirus @ 25.8.2018, 23:06) *

А файл C:\Users\portos\Desktop\2222.txt открывали? Если в 1111.txt были ".18", то они заменятся.


да в этот раз заменился , было ощущение , что скрипт не включился . спс

Автор: portos 26.8.2018, 1:31

как если надо несколько слов заменить на Привет ?

Автор: cirus 26.8.2018, 1:48

Цитата
как если надо несколько слов заменить на Привет ?

код
Код
--lua
local path_in=[[C:\Users\portos\Desktop\1111.txt]] -- путь к файлу, в котором надо найти текст
local path_out=[[C:\Users\portos\Desktop\2222.txt]] -- куда сохранить

local f = io.open(path_in, "r") -- открываем файл для чтения
local result_f = io.open(path_out, "wb") -- открываем для записи, если файла не существует он будет создан

local t = {}  -- массив, в котором хранится что на что менять
table.insert(t, {"Hello", "Привет"})    -- Hello на привет
table.insert(t, {".18", "qwerty"})      -- .18 заменить на qwerty
table.insert(t, {"text", "99"})         -- text заменить на 99


for v in f:lines() do -- читаем файл по строкам
    local temp=v
    for j=1, #t do  -- заменяем
        temp =temp:gsub(t[j][1], t[j][2])
    end
    result_f:write(temp .."\r\n")
end

f:close() -- закрываем файл
result_f:close() -- закрываем файл

Автор: DarkMaster 26.8.2018, 13:24

Цитата
local t = {} -- массив, в котором хранится что на что менять
table.insert(t, {"Hello", "Привет"}) -- Hello на привет
table.insert(t, {".18", "qwerty"}) -- .18 заменить на qwerty
table.insert(t, {"text", "99"}) -- text заменить на 99

Имхо элегантнее выглядит:
local t = {}
t[#t +1] = ...
t[#t +1] = ...
t[#t +1] = ...
Благо луа такое позволяет без инсерта.

Автор: portos 26.8.2018, 16:42

Цитата(DarkMaster @ 26.8.2018, 11:24) *

Имхо элегантнее выглядит:
local t = {}
t[#t +1] = ...
t[#t +1] = ...
t[#t +1] = ...
Благо луа такое позволяет без инсерта.


можно слова обозначить массивами ?

Автор: cirus 26.8.2018, 16:55

Цитата
можно слова обозначить массивами ?

Как-то понятнее объясните что нужно.

Автор: portos 26.8.2018, 16:59

Цитата(cirus @ 26.8.2018, 14:55) *

Как-то понятнее объясните что нужно.


записать слова в массивы и заменить в
{"Hello", "Привет"})
типа
a = Hello
b = Привет

{a, b})

Автор: portos 26.8.2018, 17:10

надо выполнить
взять из док 1111.txt первую строку , и в док 2222.txt найти первое слово из 1111.txt первой строки и дописать третье слово из 1111.txt в строку с найденным словом в док 2222.txt.
и так далее , пока не закончатся строки в док 1111.txt

Автор: cirus 26.8.2018, 17:18

Цитата
записать слова в массивы и заменить в
{"Hello", "Привет"})
типа
a = Hello
b = Привет
{a, b})

Код
--lua
local arr = {"Hello", "Привет", "text", "99"}  --  arr[1] - будет Hello, arr[2] - Привет и т. д.

local t = {}
t[#t+1] = {arr[1], arr[2]}
t[#t+1] = {arr[3], arr[4]}

log(t[1][1], t[1][2])
log(t[2][1], t[2][2])

Цитата
взять из док 1111.txt первую строку , и в док 2222.txt найти первое слово из 1111.txt первой строки и дописать третье слово из 1111.txt в строку с найденным словом в док 2222.txt.

Для примера напишите содержимое файлов 1111.txt и 2222.txt, и что должно получиться на выходе.

Автор: portos 26.8.2018, 17:35

Цитата(cirus @ 26.8.2018, 15:18) *

Код
--lua
local arr = {"Hello", "Привет", "text", "99"}  --  arr[1] - будет Hello, arr[2] - Привет и т. д.

local t = {}
t[#t+1] = {arr[1], arr[2]}
t[#t+1] = {arr[3], arr[4]}

log(t[1][1], t[1][2])
log(t[2][1], t[2][2])


Для примера напишите содержимое файлов 1111.txt и 2222.txt, и что должно получиться на выходе.


в док 1111.txt

12623337369 uopilot1 17.07.18 07 18
14582563263 uopilot2 27.07.18 07 19
12109811481 uopilot4 04.07.18 07 19
16614242721 uopilot4 26.06.18 07 18
18438822829 uopilot8 03.07.18 07 19

в док 2222.txt

12623337369 xxxxxxx uopilot1 xxxxxxx
14582563263 xxxxxxx uopilot2 xxxxxxx
13313003643 xxxxxxx uopilot2 xxxxxxx
12109811481 xxxxxxx uopilot4 xxxxxxx
16145055191 xxxxxxx uopilot3 xxxxxxx
16614242721 xxxxxxx uopilot4 xxxxxxx
12104696429 xxxxxxx uopilot7 xxxxxxx
18438822829 xxxxxxx uopilot8 xxxxxxx

надо что бы записалось в 2222.txt

12623337369 xxxxxxx uopilot1 xxxxxxx 17.07.18 07 18
14582563263 xxxxxxx uopilot2 xxxxxxx 27.07.18 07 19
13313003643 xxxxxxx uopilot2 xxxxxxx
12109811481 xxxxxxx uopilot4 xxxxxxx 04.07.18 07 19
16145055191 xxxxxxx uopilot3 xxxxxxx
16614242721 xxxxxxx uopilot4 xxxxxxx 26.06.18 07 18
12104696429 xxxxxxx uopilot7 xxxxxxx
18438822829 xxxxxxx uopilot8 xxxxxxx 03.07.18 07 19

Автор: cirus 26.8.2018, 18:58

код
Код
--lua
-- не забываем указать нужный путь к файлам
local path_in1=[[C:\Users\abc\Desktop\1111.txt]]     -- путь к файл, в котором надо найти текст
local path_in2=[[C:\Users\abc\Desktop\2222.txt]]     -- путь к файл, в котором надо найти текст
local path_out=[[C:\Users\abc\Desktop\3333.txt]]    -- куда сохранить

local f1 = io.open(path_in1, "r")    -- открываем файл 1111.txt для чтения
local f2 = io.open(path_in2, "r")    -- открываем файл 2222.txt для чтения
local f3 = io.open(path_out, "wb")   -- открываем файл 3333.txt для записи, если файла не существует он будет создан

local arr1, arr2 = {}, {}
for v in f1:lines() do       -- читаем файл  1111.txt по строкам
    arr1[#arr1+1]=v          -- добавляем в массив
end
for v in f2:lines() do       -- читаем файл  2222.txt по строкам
    arr2[#arr2+1]=v          -- добавляем в массив
end

for i=1, #arr2 do    -- для всех строк файла 2222.txt
    local k = 0
     for j=1, #arr1 do     -- для всех строк файла 1111.txt
        local first_word = arr1[j]:match("[^%s]+")    -- первое слово из строки
        k = k + 1
        if arr2[i]:match(first_word) then      -- если слово найдено
            local end_string = arr1[j]:match("uopilot.-%s(.+)")     -- находит всё что идет после uopilot
            f3:write(arr2[i] .. " " .. end_string .."\r\n")         -- пишем в файл
            break       -- выходим из цикла
        end

        if k == #arr1 then        -- если слово не было найдено
            f3:write(arr2[i] .. "\r\n")  -- пишем строку без изменений
        end
     end
end

f1:close()  -- закрываем файл
f2:close()  -- закрываем файл
f3:close()  -- закрываем файл

Автор: portos 26.8.2018, 19:11

Цитата(cirus @ 26.8.2018, 16:58) *

код
Код
--lua
-- не забываем указать нужный путь к файлам
local path_in1=[[C:\Users\abc\Desktop\1111.txt]]     -- путь к файл, в котором надо найти текст
local path_in2=[[C:\Users\abc\Desktop\2222.txt]]     -- путь к файл, в котором надо найти текст
local path_out=[[C:\Users\abc\Desktop\3333.txt]]    -- куда сохранить

local f1 = io.open(path_in1, "r")    -- открываем файл 1111.txt для чтения
local f2 = io.open(path_in2, "r")    -- открываем файл 2222.txt для чтения
local f3 = io.open(path_out, "wb")   -- открываем файл 3333.txt для записи, если файла не существует он будет создан

local arr1, arr2 = {}, {}
for v in f1:lines() do       -- читаем файл  1111.txt по строкам
    arr1[#arr1+1]=v          -- добавляем в массив
end
for v in f2:lines() do       -- читаем файл  2222.txt по строкам
    arr2[#arr2+1]=v          -- добавляем в массив
end

for i=1, #arr2 do    -- для всех строк файла 2222.txt
    local k = 0
     for j=1, #arr1 do     -- для всех строк файла 1111.txt
        local first_word = arr1[j]:match("[^%s]+")    -- первое слово из строки
        k = k + 1
        if arr2[i]:match(first_word) then      -- если слово найдено
            local end_string = arr1[j]:match("uopilot.-%s(.+)")     -- находит всё что идет после uopilot
            f3:write(arr2[i] .. " " .. end_string .."\r\n")         -- пишем в файл
            break       -- выходим из цикла
        end

        if k == #arr1 then        -- если слово не было найдено
            f3:write(arr2[i] .. "\r\n")  -- пишем строку без изменений
        end
     end
end

f1:close()  -- закрываем файл
f2:close()  -- закрываем файл
f3:close()  -- закрываем файл




то что надо ,спасибо

Автор: portos 26.8.2018, 21:32

парни , последний вопрос ))
как сделать , с такими же документами (1111.txt и 2222.txt ) что бы с 1111.txt брало с первой строки первое слово (12623337369) ,находило в 2222.txt , удаляла полную строку (12623337369 xxxxxxx uopilot1 xxxxxxx) , и записывало в 3333.txt ?

Автор: cirus 26.8.2018, 21:42

Т. е. чтобы в 2222 остались те строки, в которых не было совпадения, а в 3333 те, в которых были совпадения?

Автор: portos 26.8.2018, 21:51

Цитата(cirus @ 26.8.2018, 19:42) *

Т. е. чтобы в 2222 остались те строки, в которых не было совпадения, а в 3333 те, в которых были совпадения?


именно так

Автор: cirus 26.8.2018, 21:54

код
Код
--lua
-- не забываем указать нужный путь к файлам
local path_in1=[[C:\Users\abc\Desktop\1111.txt]]     -- путь к файлу, в котором надо найти текст
local path_in2=[[C:\Users\abc\Desktop\2222.txt]]     -- путь к файлу, в котором надо найти текст
local path_out=[[C:\Users\abc\Desktop\3333.txt]]    -- куда сохранить

local f1 = io.open(path_in1, "r")    -- открываем файл 1111.txt для чтения
local f2 = io.open(path_in2, "r")    -- открываем файл 2222.txt для чтения
local f3 = io.open(path_out, "wb")   -- открываем файл 3333.txt для записи, если файла не существует он будет создан

local arr1, arr2 = {}, {}
for v in f1:lines() do       -- читаем файл  1111.txt по строкам
    arr1[#arr1+1]=v          -- добавляем в массив
end
for v in f2:lines() do       -- читаем файл  2222.txt по строкам
    arr2[#arr2+1]=v          -- добавляем в массив
end
f1:close()  -- закрываем файл 1111
f2:close()  -- закрываем файл 2222

f2 = io.open(path_in2, "wb")    -- открываем файл 2222.txt для записи
for i=1, #arr2 do    -- для всех строк файла 2222.txt
    local k = 0
     for j=1, #arr1 do     -- для всех строк файла 1111.txt
        local first_word = arr1[j]:match("[^%s]+")    -- первое слово из строки
        k = k + 1
        if arr2[i]:match(first_word) then      -- если слово найдено
            local end_string = arr1[j]:match("uopilot.-%s(.+)")     -- находит всё что идет после uopilot
            f3:write(arr2[i] .. " " .. end_string .."\r\n")         -- пишем в файл 3333
            break       -- выходим из цикла
        end

        if k == #arr1 then        -- если слово не было найдено
            f2:write(arr2[i] .. "\r\n")  -- пишем в файл 2222
        end
     end
end

f2:close()  -- закрываем файл 2222
f3:close()  -- закрываем файл 3333

Автор: portos 26.8.2018, 22:24

Цитата(cirus @ 26.8.2018, 19:54) *

код
Код
--lua
-- не забываем указать нужный путь к файлам
local path_in1=[[C:\Users\abc\Desktop\1111.txt]]     -- путь к файлу, в котором надо найти текст
local path_in2=[[C:\Users\abc\Desktop\2222.txt]]     -- путь к файлу, в котором надо найти текст
local path_out=[[C:\Users\abc\Desktop\3333.txt]]    -- куда сохранить

local f1 = io.open(path_in1, "r")    -- открываем файл 1111.txt для чтения
local f2 = io.open(path_in2, "r")    -- открываем файл 2222.txt для чтения
local f3 = io.open(path_out, "wb")   -- открываем файл 3333.txt для записи, если файла не существует он будет создан

local arr1, arr2 = {}, {}
for v in f1:lines() do       -- читаем файл  1111.txt по строкам
    arr1[#arr1+1]=v          -- добавляем в массив
end
for v in f2:lines() do       -- читаем файл  2222.txt по строкам
    arr2[#arr2+1]=v          -- добавляем в массив
end
f1:close()  -- закрываем файл 1111
f2:close()  -- закрываем файл 2222

f2 = io.open(path_in2, "wb")    -- открываем файл 2222.txt для записи
for i=1, #arr2 do    -- для всех строк файла 2222.txt
    local k = 0
     for j=1, #arr1 do     -- для всех строк файла 1111.txt
        local first_word = arr1[j]:match("[^%s]+")    -- первое слово из строки
        k = k + 1
        if arr2[i]:match(first_word) then      -- если слово найдено
            local end_string = arr1[j]:match("uopilot.-%s(.+)")     -- находит всё что идет после uopilot
            f3:write(arr2[i] .. " " .. end_string .."\r\n")         -- пишем в файл 3333
            break       -- выходим из цикла
        end

        if k == #arr1 then        -- если слово не было найдено
            f2:write(arr2[i] .. "\r\n")  -- пишем в файл 2222
        end
     end
end

f2:close()  -- закрываем файл 2222
f3:close()  -- закрываем файл 3333




делает отлично , но добавляет в 3333.txt (17.07.18 07 18) .... надо только ту строку в 2222.txt без добавления (17.07.18 07 18)

Автор: portos 26.8.2018, 22:40

убрал из строки
f3:write(arr2[i] .. " " .. end_string .."\r\n") -- пишем в файл 3333
оставил так
f3:write(arr2[i] .."\r\n") -- пишем в файл 3333
записало как надо
спасибо ))

Автор: portos 27.8.2018, 14:58

парни ,как можно этот код под lua настроить , что бы перезаписывал батник по поиску слов

filedelete (D:\uopilot\поиск.bat) // удалит файл
filedelete (D:\uopilot\11.txt) // удалит файл
write (D:\uopilot\поиск.bat FINDSTR /L "26.08.18" "text.txt" > "11") // создаст файл
wait 200
exec D:\uopilot\поиск.bat // запустит файл
end_script

Автор: cirus 28.8.2018, 1:45

Код
--lua
filedelete ([[D:\uopilot\поиск.bat]]) -- удалит файл
filedelete ([[D:\uopilot\11.txt]]) -- удалит файл
local f = io.open([[D:\uopilot\поиск.bat]], "wb")  -- открыть файл для записи
f:write([[FINDSTR /L "26.08.18" "text.txt" > "11"]]  .."\r\n")  -- записать
f:close()  -- закрыть файл
exec ([[D:\uopilot\поиск.bat]])   -- запуск

Автор: portos 28.8.2018, 2:26

Цитата(cirus @ 27.8.2018, 23:45) *

Код
--lua
filedelete ([[D:\uopilot\поиск.bat]]) -- удалит файл
filedelete ([[D:\uopilot\11.txt]]) -- удалит файл
local f = io.open([[D:\uopilot\поиск.bat]], "wb")  -- открыть файл для записи
f:write([[FINDSTR /L "26.08.18" "text.txt" > "11"]]  .."\r\n")  -- записать
f:close()  -- закрыть файл
exec ([[D:\uopilot\поиск.bat]])   -- запуск



соединил два скрипта

--lua
filedelete ([[D:\uopilot\поиск.bat]]) -- удалит файл
filedelete ([[D:\uopilot\11]]) -- удалит файл
local f = io.open([[D:\uopilot\поиск.bat]], "wb") -- открыть файл для записи
f:write([[FINDSTR /L "28.08.18" "text.txt" > "11"]] .."\r\n") -- записать
f:close() -- закрыть файл
exec ([[D:\uopilot\поиск.bat]]) -- запуск


-------------------------------------------------------------------------
-- ВЫБИРАЕМ СТРОКИ ИЗ ОСНОВНОГО ДОКУМЕНТА
-- не забываем указать нужный путь к файлам

local path_in1=[[D:\uopilot\11]] -- путь к файл, в котором надо найти текст
local path_in2=[[D:\uopilot\12]] -- путь к файл, в котором надо найти текст ДОКУМЕНТ ОСНОВА
local path_out=[[D:\uopilot\13]] -- куда сохранить

local f1 = io.open(path_in1, "r") -- открываем файл 11 для чтения
local f2 = io.open(path_in2, "r") -- открываем файл 12 для чтения
local f3 = io.open(path_out, "wb") -- открываем файл 13 для записи, если файла не существует он будет создан

local arr1, arr2 = {}, {}
for v in f1:lines() do -- читаем файл 11 по строкам
arr1[#arr1+1]=v -- добавляем в массив
end
for v in f2:lines() do -- читаем файл 12 по строкам
arr2[#arr2+1]=v -- добавляем в массив
end
f1:close() -- закрываем файл 11
f2:close() -- закрываем файл 12

f2 = io.open(path_in2, "wb") -- открываем файл 12 для записи
for i=1, #arr2 do -- для всех строк файла 12
local k = 0
for j=1, #arr1 do -- для всех строк файла 11
local first_word = arr1[j]:match("[^%s]+") -- первое слово из строки
k = k + 1
if arr2[i]:match(first_word) then -- если слово найдено
local end_string = arr1[j]:match("27.08.-%s(.+)") -- находит всё что идет после uopilot
f3:write(arr2[i] .."\r\n") -- пишем в файл 13
break -- выходим из цикла
end

if k == #arr1 then -- если слово не было найдено
f2:write(arr2[i] .. "\r\n") -- пишем в файл 12
end
end
end

f2:close() -- закрываем файл 12
f3:close() -- закрываем файл 13

выдаёт ошибку

2:25:18 18 (autosaved_18.txt, 0): (-1): Ошибка! Проверьте правильность скрипта! ELuaScript unit "GLOBAL_NAME_SPACE", line 22.
attempt to index local 'f1' (a nil value)
--lua
filedelete ([[D:\uopilot\поиск.bat]]) -- удалит файл
filedelete ([[D:\uopilot\11]]) -- удалит файл
local f = io

Автор: cirus 28.8.2018, 2:45

Цитата
attempt to index local 'f1' (a nil value)

Значит файла не существует.
Паузу поставьте после запуска батника, возможно файл 11 не успевает сохраниться.

Автор: portos 28.8.2018, 3:16

Цитата(cirus @ 28.8.2018, 0:45) *

Значит файла не существует.
Паузу поставьте после запуска батника, возможно файл 11 не успевает сохраниться.


ставлю команду между скриптами
sleep(2000) -- Sleeps for 2 second
выбивает uopilot

Автор: DarkMaster 28.8.2018, 3:19

в пилоте нет sleep. Только wait. В луа sleep есть в составе luasocket.

Автор: portos 28.8.2018, 3:24

Цитата(DarkMaster @ 28.8.2018, 1:19) *

в пилоте нет sleep. Только wait. В луа sleep есть в составе luasocket.

с wait сработало .спс

Автор: FREEON 19.6.2019, 12:55

Требуется решить с виду простую задачу...есть 1 строка из данных разделенная символом(не принципиально каким можно заменить на любой). Примерно такого вида текст1 % text ^ text ? , текст2 % text ^ text ? ,
нам необходимо разделить ее на подстроки и вместо символов % ^ ? подставить значения которые берем из других массивов

Код

log clear
log mode compact

set %arr [1 1] текст1 % text ^ text ? . текст2 % text ^ text ? . текст3 % text ^ text ? .
log %arr [1 1]
set delimiter '.' //устанавливаем делиметр что бы смогли получить строку и разбить на подстроки
init_arr %a %arr [1 1] //представляем ее в виде подстрок %a [1 1] %a [1 2] %a [1 3] %a [1 4] и т.д.
set delimiter ' '
set $sub1 % // указываем ваше слово
set $sub2 ^ // указываем ваше слово
set $sub3 ? // указываем ваше слово
set %b [1 2] 10 20 30 //подстановка вместо % числа из этой строки
set %c [1 3] 600г 555г 3кг //подстановка вместо ^ текста из этой строки
set %d [1 4] 18кг 9г 10т //подстановка вместо ? текста из этой строки
for #i 1 size(%a)
    log нач строка %a [#i 1]
    set #pos posEx($sub1, %b[#i])
    set #pos posEx($sub2, %c[#i])
    set #pos posEx($sub3, %d[#i])
    //log подстановка значений в строку
    //log %a[#i]
end_for
end_script

в итоге должен получить:
текст1 10 text 600г text 18кг
текст2 20 text 555г text 9г
текст3 30 text 3кг text 10т
Но чо-то с виду что казалось простым делом подставить скриптом пока не выходит

Автор: cirus 19.6.2019, 13:16

Код
log clear
log mode compact

set %arr [1] текст1 % text ^ text ? . текст2 % text ^ text ? . текст3 % text ^ text ? .
set $a %arr [1]

init_arr %sub "%" "^" "?"
init_arr %b (1) "10 " "20 " "30 " //подстановка вместо % числа из этой строки
init_arr %b (2) 600г 555г 3кг //подстановка вместо ^ текста из этой строки
init_arr %b (3) 18кг 9г 10т //подстановка вместо ? текста из этой строки

for #i 1 size(%b)
    for #j 1 size(%b[])
        set $b %sub[#i] // что ищем
        set $c %b[#i #j]  // чем заменяем
        set $a string_replace ($a $b $c)   // замена
    end_for
end_for

log $a
end_script

Автор: Fors1k 19.6.2019, 16:55

Цитата(FREEON @ 19.6.2019, 12:55) *

необходимо разделить ее на подстроки...

Итог будет разделен на подстроки в массиве %result и логе:
Код
set $a текст1 % text ^ text ? . текст2 % text ^ text ? . текст3 % text ^ text ? .
set $a string_replace ($a "." "" all)
set delimiter ' '
init_arr %arr (1 6) $a
init_arr %a (1) 10 20 30
init_arr %b (1) 600г 555г 3кг
init_arr %c (1) 18кг 9г 10т
for #a 1 size(%arr)
    set $a %arr[#a]
    set $a string_replace ($a "%" "%a[1 #a]")
    set $a string_replace ($a "^" "%b[1 #a]")
    set $a string_replace ($a "?" "%c[1 #a]")
    init_arr %result (#a) $a                              
    log %result[#a]
end_for
end_script


cirus

Почему не работает так:
set %arr[#a] string_replace (%arr[#a] "%" "%a[1 #a]")
?
Приходится делать так:
set $a %arr[#a]
set $a string_replace ($a "%" "%a[1 #a]")
.
Это баг, или норм? Не делает s_r в строке массива..

Автор: cirus 20.6.2019, 1:24

Цитата
Почему не работает так:

Некоторые функции не работают с массивами.

Автор: dron4938 24.6.2019, 10:37

1)заменить все русские буквы в тексте на нижний регистр, затем
2)найти в тексте все строки содержащие русские буквы и заменить первую русскую букву на заглавную?
Можно так сделать пилотом? А то notepad регистры с кириллицей не работают

apple
apple смартфон купить
apple СМАРТФОН КУПИТЬ
сМАртфон
<СМАРТФОН>
МОЖЕТ КУПИМ СМАРТФОН


apple
apple Смартфон купить
apple Смартфон купить
Смартфон
<Смартфон>
Может купим смартфон

Автор: cirus 24.6.2019, 11:54

Цитата
1)заменить все русские буквы в тексте на нижний регистр, затем
2)найти в тексте все строки содержащие русские буквы и заменить первую русскую букву на заглавную?

код
Код
--lua
log "clear" log "mode compact"
local path=[[C:\123.txt]]   -- путь к файлу
local path2=[[C:\456.txt]]  -- куда сохранить

-- таблица, в которой храним какую букву на какую меняем
local t={["А"]="а", ["Б"]="б", ["В"]="в", ["Г"]="г", ["Д"]="д", ["Е"]="е",
["Ё"]="ё", ["Ж"]="ж", ["З"]="з", ["И"]="и", ["Й"]="й", ["К"]="к", ["Л"]="л",
["М"]="м", ["Н"]="н", ["О"]="о", ["П"]="п", ["Р"]="р", ["С"]="с", ["Т"]="т",
["У"]="у", ["Ф"]="ф", ["Х"]="х", ["Ц"]="ц", ["Ч"]="ч", ["Ш"]="ш", ["Щ"]="щ",
["Ы"]="ы", ["Ь"]="ь", ["Ъ"]="ъ", ["Э"]="э", ["Ю"]="ю", ["Я"]="я"}

local t2={}
for i, v in pairs(t) do  t2[v]=i end

local f = io.open(path, "r")    -- открыть файл для чтения
if f then    -- если файл открылся
    local f_result = io.open(path2, "wb")   -- открыть файл для записи
    if f_result then    -- если файл открылся
        for v in f:lines() do    -- прочитать файл по строкам
            log(v)
            v=string.gsub(v, "[а-яА-Я]", t)      -- заменить все заглавные русские на строчные
            v=string.gsub(v, "[а-яА-Я]", t2, 1)  -- заменить первую строчную русскую букву на заглавную
            log(v .. "\r\n")
            f_result:write(v .. "\r\n")  -- записать в файл
        end
    else
        log ("Файл " .. path2 .. "не открылся")
    end
    f:close()    -- закрыть файл
    f_result:close()   -- закрыть файл
else
    log ("Файл " .. path .. " не найден")
end


Автор: dron4938 24.6.2019, 14:32

Цитата(cirus @ 24.6.2019, 11:54) *

код
Код
--lua
log "clear" log "mode compact"
local path=[[C:\123.txt]]   -- путь к файлу
local path2=[[C:\456.txt]]  -- куда сохранить

-- таблица, в которой храним какую букву на какую меняем
local t={["А"]="а", ["Б"]="б", ["В"]="в", ["Г"]="г", ["Д"]="д", ["Е"]="е",
["Ё"]="ё", ["Ж"]="ж", ["З"]="з", ["И"]="и", ["Й"]="й", ["К"]="к", ["Л"]="л",
["М"]="м", ["Н"]="н", ["О"]="о", ["П"]="п", ["Р"]="р", ["С"]="с", ["Т"]="т",
["У"]="у", ["Ф"]="ф", ["Х"]="х", ["Ц"]="ц", ["Ч"]="ч", ["Ш"]="ш", ["Щ"]="щ",
["Ы"]="ы", ["Ь"]="ь", ["Ъ"]="ъ", ["Э"]="э", ["Ю"]="ю", ["Я"]="я"}

local t2={}
for i, v in pairs(t) do  t2[v]=i end

local f = io.open(path, "r")    -- открыть файл для чтения
if f then    -- если файл открылся
    local f_result = io.open(path2, "wb")   -- открыть файл для записи
    if f_result then    -- если файл открылся
        for v in f:lines() do    -- прочитать файл по строкам
            log(v)
            v=string.gsub(v, "[а-яА-Я]", t)      -- заменить все заглавные русские на строчные
            v=string.gsub(v, "[а-яА-Я]", t2, 1)  -- заменить первую строчную русскую букву на заглавную
            log(v .. "\r\n")
            f_result:write(v .. "\r\n")  -- записать в файл
        end
    else
        log ("Файл " .. path2 .. "не открылся")
    end
    f:close()    -- закрыть файл
    f_result:close()   -- закрыть файл
else
    log ("Файл " .. path .. " не найден")
end


почемуто на этой фразе ошибку выдает, а так работает нормально, спасиб
https://i.yapx.ru/EZ2IR.png
https://i.yapx.ru/EZ2Oy.png

Код
рОгаЛИК
AppEarance
ПОЗитиф
Save as a screenshot
GameStart
I can not start the game right now.
Save UI location
Заметка
Whether to save the UI location
Do you want to save the layout?
Initialize UI location
Заметка
Whether the UI location is initialized
Reset layouts?


и если фразу эту изменить то всеравно ошибка, что за крень?

Автор: cirus 24.6.2019, 14:42

Цитата
почемуто на этой фразе ошибку выдает

save это зарезервированное слово, видимо для ультимы используется как переменная.
Убрать вывод в лог и не будет ошибки.

Автор: dron4938 24.6.2019, 14:46

Цитата(cirus @ 24.6.2019, 14:42) *

save это зарезервированное слово, видимо для ультимы используется как переменная.
Убрать вывод в лог и не будет ошибки.

Ясно, но оно переводит до этого слова, в новом файле. Тобеж отрубает перевод после ошибки. Убрать вывод лога не катит(
Надо както тогда чтобы игнорировало такие слова и дальше переводило.

Автор: cirus 24.6.2019, 14:52

Что не переводит? Пилот перезапустите.

Автор: dron4938 24.6.2019, 15:09

Цитата(cirus @ 24.6.2019, 14:52) *

Что не переводит? Пилот перезапустите.

А всё норм, спасиб)

Автор: Fors1k 25.6.2019, 16:47

Цитата(dron4938 @ 24.6.2019, 10:37) *

1)заменить все русские буквы в тексте на нижний регистр, затем
2)найти в тексте все строки содержащие русские буквы и заменить первую русскую букву на заглавную?

текст

Код
рОгаЛИК rtrt
AppEarance
ПОЗитиф
Save as a screenshot прИВет
GameStart
I can not start the game right now.
Save UI location
ЗамЕтка
Whether to save the UI location
Do you want to save the layout?
Initialize UI location
ЗамЕтка
Whether the UI location is initialized
Reset layouts?


Для тренировки решил запилить это на пилоте.
Код
load_array %a C:\1234.txt
set delimiter ' '
for #i 1 size(%a)
     set $e %a[#i]
     set $e trim($e)
     set #s string_count(" " $e) + 1
    for #j 1 #s
         get word $a #j $e
         set $a1 ord($a)
        if_not $a1 > 64 and $a1 < 123
         set $b string_lower($a)
         set $c copy($b 1 1)
         set $c1 string_upper($c)
         set $b string_replace($b $c $c1)
         set %a[#i #j] $b
        else
         set %a[#i #j] $a
        end_if
    end_for
end_for
save_array %a C:\12345.txt
end_script

Все получилось и работает, но...
Я с таким количеством глюков столкнулся, cirus, жду помощи =)
Поехали:
1. В строке 6 будет неверно считать если вместо #s написать size(%a[#i]). Пришлось дописывать строку 5.
2. Запускаю, в логе все идеально. Как бы.. В лог пишет все четко как надо, а в файле 12345.txt вместо обычных пробелов - какие-то километровые(похоже табуляция). Кстати,оказывается, это не первый случай. В https://forum.uokit.com/index.php?s=&showtopic=68902&view=findpost&p=432777 скрипте так же в логе все красиво, а если мы %result сохраним в файл, то опять будут огромные пробелы. Попробуй сам запустить.
Log

Рогалик rtrt
AppEarance
Позитиф
Save as a screenshot Привет
GameStart
I can not start the game right now
Save UI location
Заметка
Whether to save the UI location
Do you want to save the layout?
Initialize UI location
Заметка
Whether the UI location is initialized
Reset layouts?

12345.txt

Код
Рогалик    rtrt                            
AppEarance                                
Позитиф                                
Save    as    a    screenshot    Привет                
GameStart                                
I    can    not    start    the    game    right    now    
Save    UI    location                        
Заметка                            
Whether    to    save    the    UI    location            
Do    you    want    to    save    the    layout?        
Initialize    UI    location                        
Заметка                                
Whether    the    UI    location    is    initialized            
Reset    layouts?



3. Еще одна мистика. По идее, 15 и 16 строки в коде не нужны. Но, после #i1 и #j2 результат должен быть: Рогалик rtrt. Но, результат : Рогалик, без второго слова. Проверил вот так:

init_arr %a (1) test qwe
set delimiter ' '
set #i 1
set #j 1
set $b рогалик
log ДО: %a[#i] // Log- ДО: test qwe
set %a[#i #j] $b
log ПОСЛЕ: %a[#i] // Log- ПОСЛЕ: рогалик qwe

и все норм.
Замена одного из слов в строке массива, не трогает остальные слова. Там же такое не катит..

В итоге скрипт полностью рабочий, но над этими моментами я пол дня голову ломаю Изображение

Автор: Fors1k 25.6.2019, 18:54

Upd.
Насчет первого - походу эта команда считает максимальное количество элементов в строках всего массива, а не в заданной строке...Изображение
Насчет второго - по пробелам пока непонятно, но нашел временное решение:

Код
load_array %a C:\1234.txt
set delimiter ' '
save_array %clear C:\12345.txt
for #i 1 size(%a)
     set $e %a[#i]
     set $e trim($e)
     set #s string_count(" " $e) + 1
    for #j 1 #s
         get word $a #j $e
         set $a1 ord($a)
        if_not $a1 > 64 and $a1 < 123
         set $b string_lower($a)
         set $c copy($b 1 1)
         set $c1 string_upper($c)
         set $b string_replace($b $c $c1)
         set %a[#i #j] $b
        else
         set %a[#i #j] $a
        end_if
    end_for
write ( C:\12345.txt %a[#i] \r\n)
end_for
end_script

Удивительно, но через write сохраняет правильно. dron4938, можешь попробовать)

Автор: dron4938 28.6.2019, 13:22

Нужен скрипт который найдет все слова в текстовом документе которые в таких скобках {} [], и запишет эти слова в отдельный файл, удалив дубликаты повторяющиеся.

пример текста:
Удаление [STRING]. <br> Вы действительно хотите удалить выбранный элемент?
.Получено [ITEM] x [INT].
[INT] {STR_ICON = GOLD}
Стоимость [INT] {STR_ICON = GOLD}
цена [прайс]
интерфейс {СТР = ЗОЛОТО}
[STRING] получил [ITEM].

должно получиться в новом файле:
[STRING]
[ITEM]
[INT]
{STR_ICON = GOLD}
[прайс]
{СТР = ЗОЛОТО}

Автор: cirus 28.6.2019, 14:31

Цитата
скрипт который найдет все слова в текстовом документе которые в таких скобках {} [], и запишет эти слова в отдельный файл, удалив дубликаты повторяющиеся.

код
Код
--lua
log "clear" log "mode compact"
local path=[[C:\123.txt]]   -- путь к файлу
local path2=[[C:\456.txt]]  -- куда сохранить


local arr={}
local f = io.open(path, "r")    -- открыть файл для чтения
if f then    -- если файл открылся
    local f_result = io.open(path2, "wb")   -- открыть файл для записи
    if f_result then    -- если файл открылся
        for v in f:lines() do    -- прочитать файл по строкам
            for s in v:gmatch("%[.-%]") do arr[#arr+1]=s end  -- поиск слов в []
            for s in v:gmatch("%{.-%}") do arr[#arr+1]=s end  -- поиск слов в {}
        end
        local flags = {}
        for i=1, #arr  do
            if not flags[arr[i]] then
                f_result:write(arr[i] .. "\r\n")  -- записать в файл
                flags[arr[i]] = true
            end
        end
    else
        log ("Файл " .. path2 .. "не открылся")
    end
    f:close()    -- закрыть файл
    f_result:close()   -- закрыть файл
else
    log ("Файл " .. path .. " не найден")
end


Автор: dron4938 28.6.2019, 15:08

Цитата(cirus @ 28.6.2019, 14:31) *

код
Код
--lua
log "clear" log "mode compact"
local path=[[C:\123.txt]]   -- путь к файлу
local path2=[[C:\456.txt]]  -- куда сохранить
local arr={}
local f = io.open(path, "r")    -- открыть файл для чтения
if f then    -- если файл открылся
    local f_result = io.open(path2, "wb")   -- открыть файл для записи
    if f_result then    -- если файл открылся
        for v in f:lines() do    -- прочитать файл по строкам
            for s in v:gmatch("%[.-%]") do arr[#arr+1]=s end  -- поиск слов в []
            for s in v:gmatch("%{.-%}") do arr[#arr+1]=s end  -- поиск слов в {}
        end
        local flags = {}
        for i=1, #arr  do
            if not flags[arr[i]] then
                f_result:write(arr[i] .. "\r\n")  -- записать в файл
                flags[arr[i]] = true
            end
        end
    else
        log ("Файл " .. path2 .. "не открылся")
    end
    f:close()    -- закрыть файл
    f_result:close()   -- закрыть файл
else
    log ("Файл " .. path .. " не найден")
end


Спасибо супер)

еще вопрос, есть 1 текстовый файл
пример:
Код

저급 가죽 툴팁
A raw material needed to make various novice leather items. Can be obtained by hunting.
일반 가죽
Apprentice Leather
일반 가죽 툴팁
A raw material needed to make various apprentice leather items. Can be obtained by hunting.
중급 가죽
Intermediate Leather
중급 가죽 툴팁
A raw material needed to make various intermediate leather items. Can be obtained by hunting.
상급 가죽
Professional Leather
상급 가죽 툴팁
A raw material needed to make various professional leather items. Can be obtained by hunting.
최상급 가죽
Master Leather


нужно разделить этот текст на 2 файла, в первом файле должны остаться только четные строки, а во втором файле нечетные.
пример что должно быть:
Код


A raw material needed to make various novice leather items. Can be obtained by hunting.

Apprentice Leather

A raw material needed to make various apprentice leather items. Can be obtained by hunting.

Intermediate Leather

A raw material needed to make various intermediate leather items. Can be obtained by hunting.

Professional Leather

A raw material needed to make various professional leather items. Can be obtained by hunting.

Master Leather


Код

저급 가죽 툴팁

일반 가죽

일반 가죽 툴팁

중급 가죽

중급 가죽 툴팁

상급 가죽

상급 가죽 툴팁

최상급 가죽



затем нужен будет еще скррипт, чтобы объединить эти 2 файла снова в 1.

Автор: cirus 28.6.2019, 15:14

Цитата
есть 1 текстовый файл

С юникодом не будет работать.

Автор: dron4938 28.6.2019, 15:23

Цитата(cirus @ 28.6.2019, 15:14) *

С юникодом не будет работать.

блин(

тогда просто удалить все нечетные строки можно из текста?

Автор: Fors1k 28.6.2019, 16:55

Цитата(dron4938 @ 28.6.2019, 15:23) *

удалить все нечетные строки можно из текста?

Код
load_array %a C:\1234.txt
for #i 1 eval(size(%a) / 2 + 1)
  delete_array %a -#i
end_for
save_array %a C:\12345.txt
end_script

Автор: dron4938 28.6.2019, 18:37

Цитата(Fors1k @ 28.6.2019, 16:55) *

Код
load_array %a C:\1234.txt
for #i 1 eval(size(%a) / 2 + 1)
  delete_array %a -#i
end_for
save_array %a C:\12345.txt
end_script



спс

Автор: dron4938 28.6.2019, 22:53

А можно автопереводчик замутить? Есть тхт файл с английскими словами в столбик, нужно чтобы скрипт:
1) копировал в буфер по 5 строк
2) копировал из буфера в окно https://translate.google.ru/?hl=ru&tab=TT
3) копировал в буфер переведенный текст
4) заменял переведенный текст в файле, или создавал новый файл с переведенным текстом.

пример для перевода
Код

man
woman
body
head
shoulder
arm
hand
elbow
chest
stomach
back
bottom
thigh
waist
leg
knee
calf
foot
ankle
heel
thumb
ring finger
middle finger
index finger
указательный палец
fingernail
shin

Автор: Fors1k 29.6.2019, 15:21

Цитата(dron4938 @ 28.6.2019, 13:22) *

Нужен скрипт который найдет все слова в текстовом документе которые в таких скобках {} [], и запишет эти слова в отдельный файл, удалив дубликаты повторяющиеся.

Попробовал сделать на пилоте. Получилось, но.. Можно это сделать как-то проще? Что-то кажется мудрено очень получилось, или задача просто такая?
код

Код
load_array %a C:\1234.txt
set #j 1
for #i 1 size(%a)
set $b %a[#i]
repeat eval(string_count("[" $b) + string_count("}" $b))
set #a posex("[" $b)
set #a1 posex("]" $b)
set #b posex("{" $b)
set #b1 posex("}" $b)
if #a != 0
    set $e copy($b #a eval(#a1 - #a + 1))
    if posex($e $d) < 1
      set $d $d $e
      set %c[#j] $e
      set #j #j +1
    end_if
end_if
if #b != 0
    set $e copy($b #b eval(#b1 - #b + 1))
    if posex($e $d) < 1
      set $d $d $e
      set %c[#j] $e
      set #j #j +1
    end_if
end_if
set $b delete($b #a eval(#a1 + 1))
set #b posex("{" $b)
set #b1 posex("}" $b)
set $b delete($b #b eval(#b1 + 1))
end_repeat
end_for
save_array %c C:\12345.txt
end_script


Автор: cirus 29.6.2019, 15:52

Цитата
Можно это сделать как-то проще?

Код
set $string "интерфейс {СТР = ЗОЛОТО}"   // строка
set $regexp "\{.+?\}"    // найти текст в фигурных скобках
set #n regexp (#position $hitstring $string $regexp)
if #n = 1
    log Позиция #position     $hitstring
end_if
end_script



Автор: Fors1k 29.6.2019, 15:59

Цитата(dron4938 @ 28.6.2019, 22:53) *

А можно автопереводчик замутить?

Код

//открыть страницу яндекс переводчика в отдельном окне.
load_array %a C:\1234.txt
set %l [1] 985 420  // координаты внутри поля ввода
set %r [1] 1318 333 // координаты внутри поля результата
set workwindow findwindow(Яндекс.Переводчик)
showwindow workwindow
left %l[1 1] %l[1 2]
for #i 1 size(%a)
    set $b $b %a[#i]
end_for
sendex $b
wait 3000
kleft %r[1 1] %r[1 2]
double_kleft %r[1 1] %r[1 2]
wait 150
sendex ^c
get clipboard $c
init_arr %b (1 1) $c
save_array %b C:\12345.txt
end_script

Автор: Fors1k 29.6.2019, 16:53

Цитата(cirus @ 29.6.2019, 15:52) *

Код
set $string "интерфейс {СТР = ЗОЛОТО}"   // строка
set $regexp "\{.+?\}"    // найти текст в фигурных скобках
set #n regexp (#position $hitstring $string $regexp)
if #n = 1
    log Позиция #position     $hitstring
end_if
end_script


Работает, спасибо. Я пробовал через regexp, но он всегда копировал почему-то от первой до самой последней скобки:
[STRING] получил [ITEM], причем не включал сами скобки с краев.
Где бы можно найти больше информации о регэкспе. Совсем пока тяжело с синтаксисом его запросов.

Автор: cirus 29.6.2019, 17:34

Цитата
но он всегда копировал почему-то от первой до самой последней скобки:
[STRING] получил [ITEM], причем не включал сами скобки с краев.

Код
set $regexp "\{.+?\}"

. означает любой символ, + означает 1 или больше символов. По умолчанию квантификаторы * и + жадные, т. е. пытаются захватить максимальное количество символов. ? в данном случае делает + не жадным.
Цитата
Где бы можно найти больше информации о регэкспе.

Примеры есть тут:
https://uopilot.tati.pro/index.php?title=Регулярные_выражения_(Regexp)

Автор: Fors1k 29.6.2019, 18:27

Цитата(cirus @ 29.6.2019, 17:34) *

. означает любой символ, + означает 1 или больше символов. По умолчанию квантификаторы * и + жадные, т. е. пытаются захватить максимальное количество символов. ? в данном случае делает + не жадным.

Я пробовал так.
"\[.+\]" - копирует из этой строки [STRING] получил [ITEM] всю строку ( от самой первой до самой последней скобы ). Но, как ты показал, ? после плюса решает эту проблему. Немного не пойму как это устроено.
. это любой символ. + это количество символов ∈ [1;∞]. ? это количество символов ∈ [0;1].
Получается, что, объединяя +? , количество символов должно быть ∈ [1]. Почему копируются все символы между скобками, а не только один ?

Автор: cirus 29.6.2019, 18:32

Цитата
? это количество символов ∈ [0;1].

Код
"\[.?\]"

0 или 1 символ.
Код
"\[.+?\]"

В таком виде ? уже не означает 0 или 1, а просто делает + не жадным.


Автор: Fors1k 29.6.2019, 18:42

Видимо, мне нужно понять, что такое жадный / нежадный : )

Исходя из этого примера, я понял так:
Нежадный - начав поиск нужных символов, остановится, наткнувшись на первой же "]", и не продолжит читать всю строку до конца.
Жадный - начав копировать нужные символы, не остановится на первой "]", а прочитает сначала всю строку до конца, что бы попытаться найти самую последнюю "]".

Верно я понимаю?

Автор: cirus 29.6.2019, 18:43

Цитата
Верно я понимаю?

Да.

Автор: Fors1k 29.6.2019, 18:45

Цитата(cirus @ 29.6.2019, 18:43) *

Да.

Наконец-то. Благодарю)

Автор: FREEON 30.6.2019, 1:04

Прикрепленное изображение

Автор: FREEON 18.7.2019, 0:39

Цитата(DarkMaster @ 1.4.2018, 18:44) *

Код
set linedelay 0
set $sub ywf // указываем ваше слово

load_array %arr text.txt
set #sizeArr size(%arr)
for #i 1 #sizeArr 1
    set #pos posEx($sub, %arr[#i])
    if  #pos > 0
        log %arr[#i]
    end_if
end_for


Не запускал, но смысл примерно такой.

А как учитывать регистр букв? например что бы для поиска не было одно и тоже Яблоко и яблоко

Автор: cirus 18.7.2019, 1:30

Цитата
А как учитывать регистр букв?

Код
set $sub "Яблоко"     // что искать
set $string "Строка, в которой есть слово Яблоко"   // где искать
set #n regexp (#pos $hitstring $string $sub)
if #n = 1
    log Позиция слова: #pos
else
    log Не найдено
end_if
end_script

Автор: FREEON 18.7.2019, 2:17

Попробовал из файла загрузить находит чисто первре слово, но у меня немного другая задача: нужно найти слово в блокноте и показать номер строки, если это слово встречается несколько раз вывести все его позиции.
так же голову ломаю над вторым скриптом:
И к примеру нужен перебор искомых значений для примера от 1 до 100 то есть сперва ищем число 1 и выводим номера строк где она встречается. Затем ищем 2 и выводим номера строк. Важно что бы 1 это было как 1 а не 11, 18 или 21, 41 и тому подобное
к примеру такой будет тексовик

Цитата

1 2 3 4 5 6 7 8 9 10 11 12 13
1 2 3 4 7 8 13 15 17 19 23 24 28
4 7 8 13 14 16 18 23 25 26 27 29 30
5 6 13 14 15 19 20 21 22 23 26 27 32
3 4 5 6 8 9 17 18 20 40 53 60 61
1 2 7 8 9 18 23 25 28 30 40 41 42
3 5 6 13 14 17 32 40 45 46 47 48 49
2 5 8 15 20 24 26 27 28 29 43 50 51
5 8 9 28 40 43 48 53 54 55 56 57 165
1 2 8 9 12 13 15 18 41 60 61 62 63
5 6 8 12 17 18 60 61 62 63 65 67 68
1 2 4 8 9 12 14 18 60 61 64 65 66


Автор: cirus 18.7.2019, 2:50

Цитата
если это слово встречается несколько раз вывести все его позиции

Код
log clear
log mode compact
set $regexp "\b1\b"   // что искать, 1 в данном случае (\b означает граница слова)
set $string "1 2 11 18 21 41 3 4 5 1 6 7 8 1 9"  // где искать
set #pos 0

set #n regexp (#position $hitstring $string $regexp)
while #n = 1
    set #pos #pos + #position
    log Позиция: #pos
    set #position #position + size($hitstring) - 1
    set $string delete($string 1 #position)
    set #n regexp (#position $hitstring $string $regexp)
end_while
End_script


Автор: Fors1k 18.7.2019, 3:51

Цитата(FREEON @ 18.7.2019, 2:17) *

так же голову ломаю над вторым скриптом:
И к примеру нужен перебор искомых значений для примера от 1 до 100 то есть сперва ищем число 1 и выводим номера строк где она встречается. Затем ищем 2 и выводим номера строк. Важно что бы 1 это было как 1 а не 11, 18 или 21, 41 и тому подобное
к примеру такой будет тексовик

текст для поиска
Код
1    2    3    4    5    6    7    8    9    10    11    12    13
1    2    3    4    7    8    13    15    17    19    23    24    28
4    7    8    13    14    16    18    23    25    26    27    29    30
5    6    13    14    15    19    20    21    22    23    26    27    32
3    4    5    6    8    9    17    18    20    40    53    60    61
1    2    7    8    9    18    23    25    28    30    40    41    42
3    5    6    13    14    17    32    40    45    46    47    48    49
2    5    8    15    20    24    26    27    28    29    43    50    51
5    8    9    28    40    43    48    53    54    55    56    57    165
1    2    8    9    12    13    15    18    41    60    61    62    63
5    6    8    12    17    18    60    61    62    63    65    67    68
1    2    4    8    9    12    14    18    60    61    64    65    66

Код
log clear
set #ot 20 // начало поиска
set #do 35 // конец поиска
load_array %a C:\Users\user\Desktop\888.txt // путь к файлу с текстом для поиска
set delimiter ' '
for #i #ot #do 1
    set $regexp string_replace("\b #i \b" " " "")
    for #j 1 size(%a)
        set #n regexp (#pos $j %a[#j] $regexp)
        if  #n > 0
        set $t Insert("[ #j ]" $t eval(size($t) + 1))
        end_if
    end_for
    if $t = ""
    set $t "[ Не найдено ]"
    end_if
    log #i найдено в строках: $t
    set $t ""
end_for
End_script

Автор: FREEON 18.7.2019, 6:35

Цитата(Fors1k @ 18.7.2019, 3:51) *

текст для поиска
Код
1    2    3    4    5    6    7    8    9    10    11    12    13
1    2    3    4    7    8    13    15    17    19    23    24    28
4    7    8    13    14    16    18    23    25    26    27    29    30
5    6    13    14    15    19    20    21    22    23    26    27    32
3    4    5    6    8    9    17    18    20    40    53    60    61
1    2    7    8    9    18    23    25    28    30    40    41    42
3    5    6    13    14    17    32    40    45    46    47    48    49
2    5    8    15    20    24    26    27    28    29    43    50    51
5    8    9    28    40    43    48    53    54    55    56    57    165
1    2    8    9    12    13    15    18    41    60    61    62    63
5    6    8    12    17    18    60    61    62    63    65    67    68
1    2    4    8    9    12    14    18    60    61    64    65    66

Код
log clear
set #ot 20 // начало поиска
set #do 35 // конец поиска
load_array %a C:\Users\user\Desktop\888.txt // путь к файлу с текстом для поиска
set delimiter ' '
for #i #ot #do 1
    set $regexp string_replace("\b #i \b" " " "")
    for #j 1 size(%a)
        set #n regexp (#pos $j %a[#j] $regexp)
        if  #n > 0
        set $t Insert("[ #j ]" $t eval(size($t) + 1))
        end_if
    end_for
    if $t = ""
    set $t "[ Не найдено ]"
    end_if
    log #i найдено в строках: $t
    set $t ""
end_for
End_script


Благодарю то что нужно...ток чето поиск чисел(дублей) в таблице некоторые из их не может найти... их не много но все же... не понимаю с чем это может быть связанно хотя в таблице присутствуют но в самом конце хотя после них так же есть пробел(табуляция)

Автор: cirus 18.7.2019, 11:04

код
Код
log clear
set #ot 20 // начало поиска
set #do 35 // конец поиска
load_array %a C:\Users\user\Desktop\888.txt // путь к файлу с текстом для поиска
set delimiter ' '

log clear
log mode compact
for #i #ot #do 1
    set $regexp \b #i \b
    set $regexp string_replace($regexp " " "" "all")
    log Искомое число: #i

    for #j 1 size(%a)
        set #pos 0
        set $string %a[#j]
        set #n regexp (#position $hitstring $string $regexp)
        while #n = 1
            set #pos #pos + #position
            log Строка #j :     %a[#j]            Позиция числа:  #pos
            set #position #position + size($hitstring) - 1
            set $string delete($string 1 #position)
            set #n regexp (#position $hitstring $string $regexp)
        end_while
    end_for
    log
end_for
End_script

А вообще для поиска в массиве есть indexOf.

Автор: Fors1k 18.7.2019, 13:23

Цитата(FREEON @ 18.7.2019, 6:35) *

некоторые из их не может найти в самом конце строки..

Код
log clear
set #ot 20 // начало поиска
set #do 35 // конец поиска
load_array %a C:\Users\user\Desktop\888.txt // путь к файлу с текстом для поиска
set delimiter ' '
for #i #ot #do 1
    set $regexp "\b #i \b"
    set $regexp string_replace($regexp " " "" "all")
    for #j 1 size(%a)
        set #n regexp (#pos $j %a[#j] $regexp)
        if  #n > 0
        set $t Insert("[ #j ]" $t eval(size($t) + 1))
        end_if
    end_for
    if $t = ""
    set $t "[ Не найдено ]"
    end_if
    log #i найдено в строках: $t
    set $t ""
end_for
End_script

Исправил. Забыл добавить "all". Теперь находит числа и в конце строки.

Автор: Fors1k 18.7.2019, 14:54

Цитата(cirus @ 18.7.2019, 11:04) *

А вообще для поиска в массиве есть indexOf.

Точно, забыл про него. Покороче получилось. Вроде так.
Код
log clear
set #ot 20// начало поиска
set #do 35 // конец поиска
load_array %a C:\Users\user\Desktop\888.txt
set delimiter ' '
for #i #ot #do 1
    set %result indexOf ( %a (#i) )
    for #j 1 size(%result)
    sort_array %result 1
    set $t Insert("[ %result[#j 1] ]" $t eval(size($t) + 1))
    end_for
    if $t = ""
    set $t "[ Не найдено ]"
    end_if
    log #i найдено в строках: $t
    set $t ""
end_for
End_script

Автор: FREEON 18.7.2019, 20:43

Скрипт где мы делали подстановку значений вместо символов. А как реализовать загрузку данных из текстовика? где в файле:
[1] Строка где будем делать замену(подстановку). вид ее:
текст1 % text ^ text ? текст2 % text ^ text ? текст3 % text ^ text ?
[2] текст подстановки вместо % числа из этой строки. вид ее: 1 2 3
[3] текст подстановки вместо ^ текста из этой строки. вид ее: a b c
[4] текст подстановки вместо ? текста из этой строки. вид ее: а б в

Код

log clear
log mode compact
load_array %arr C:\10.txt

//set %arr [1 ] текст1 % text ^ text ? . текст2 % text ^ text ? . текст3 % text ^ text ? .
set $a %arr [1 1]

init_arr %sub "@" "^" "?"
init_arr %b (1) %arr [2] //подстановка вместо % числа из этой строки
init_arr %b (2) %arr [3] //подстановка вместо ^ текста из этой строки
init_arr %b (3) %arr [4] //подстановка вместо ? текста из этой строки

for #i 1 size(%b)
    for #j 1 size(%b[])
        set $b %sub[#i] // что ищем
        set $c %b[#i #j]  // чем заменяем
        set $a string_replace ($a $b $c)   // замена
    end_for
end_for
//log $a
filedelete (C:\10.txt) // удалит файл
write (C:\10.txt $a ) // создаст файл(перезапишет файл)
//save_array $a C:\123.txt
end_script

все разобрался... химичыу и нахимичыу

Автор: FREEON 19.3.2020, 22:20

Как на Lua заменять фразы, или «набор слов или слово в между этих скобок» или "набор слов или слово между этих скобок"?

Код

--lua
-- Ищем фразы из файла и меняем на свои
local file= io.open([[C:\1.txt]], "r")          -- файл с текстом
local result_file = io.open([[C:\2.txt]], "w")  -- куда сохранить результат

local t={}
t["UO Pilot"]="[url=https://forum.uokit.com/]Текст[/url]"
t["«Перо феникса»"]="[url=https://forum.uokit.com/]«Текст Текст»[/url]"
t['"Перо феникса 2"']="[B][url=https://forum.uokit.com/]Текст Текст 2[/url][/B]"
t["Привет мир"]="Дарова пацаны!"

if file and result_file then     -- если файлы открылись
    for v in file:lines() do
        result_file:write(string.gsub(v, '".+"', t).."\r")  -- поиск и замена текста из таблицы 't'
    end
    file:close()
    result_file:close()
else
end

И как добиться того что бы сделать несколько замен в одном файле и затем сохранить результат всех правок в другой файл? Потому чо в текущем виде он 7 замен делает и толком ничего не обрабатывает и сохраняет по 7 дубликатов строк каждой строки. А выполнять отдельно в разных вкладках скрипта не целесобразно.
Код
--lua
--Обробатываем файл
local file= io.open([[C:\2.txt]], "r")          -- файл с текстом
local result_file = io.open([[C:\3.txt]], "w")  -- куда сохранить результат
if file and result_file then                      -- если файлы открылись
    for v in file:lines() do
        result_file:write(string.gsub(v, '<p style="text-align:center">', '').."\r")  -- поиск и замена(удаление) текста
        --result_file:write(string.gsub(v, "&nbsp;", "").."\r")
        --result_file:write(string.gsub(v, '< title="Увеличить изображение"', '').."\r")
        --result_file:write(string.gsub(v, " </p>", "").."\r")
        --result_file:write(string.gsub(v, "</p>", "").."\r")
        --result_file:write(string.gsub(v, '%<[Ii][Mm][Gg].[Aa][Ll][Tt]%="%S+"', '').."\r")
        --result_file:write(string.gsub(v, '<[Aa].[Hh][Rr][Ee][Ff]%=".+">', '').."\r")
        --result_file:write(string.gsub(v, 'style%="%S+.+">', '').."\r")
        --result_file:write(string.gsub(v, "<strong>", "[B]").."\r")
        --result_file:write(string.gsub(v, "</strong>", "[/B]").."\r")
    end

    file:close()
    result_file:close()
else
end

Автор: cirus 20.3.2020, 3:00

Цитата
Как на Lua заменять фразы

Дайте пример текста и что должно быть после замены.
Цитата
И как добиться того что бы сделать несколько замен в одном файле и затем сохранить результат всех правок в другой файл?

Читать файл не по строкам, а сразу весь:
Код
--lua
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()  -- закрыть файл

       log (s)  -- содержимое файла
       -- тут заменяем что нужно

       f2:write(s)   -- пишем в другой файл
       f2:close()  -- закрыть файл
end

Автор: FREEON 20.3.2020, 6:55

Цитата(cirus @ 20.3.2020, 3:00) *

Дайте пример текста и что должно быть после замены.

Читать файл не по строкам, а сразу весь:

Все ровно чо-то не получается у меня, но набрасал порядок действий.
Я бы конечно не стал бы заморачивать, и сделал как знаю даже если это было бы на несколько вкладок скриптов...
Но тут дело такое нужно автоматизировать действия одной девушке, ну и тут задача совсем другая, и от вида пилота с открытыми многочислеными вкладками она падает в обморок. А нужно свести к миниуму лишние и все действия скопировал вставил в файл, сохранил, запустил из одной вклакидки(хотя ей и это кажется сложным) открыл и забыл(редактируй как душе угодно).
А стандартным языком пилота дело тоже труба т.к. крокозябры в тексте и смена кодировок выглядит чем-то сверхмагической технологией.
описание действий
Код
--lua
local f = io.open([[C:\qwe.txt]], "rb")  -- открыть файл для чтения
local f2 = io.open([[C:\456.txt]], "wb")  -- открыть файл для записи

if f and f2 then   -- если файлы открылись
       local s = f:read("*a")     -- прочитать весь файл
       f:close()  -- закрыть файл

       log (s)  -- содержимое файла
       -- тут заменяем что нужно
       -- Сперва удаляем как обычный текст (действия которые можно делать "одновременно" в один прогон массива файла)
       </div>
       </script>
       </a>
        
       <p style="text-align:center">
       <p>
       </p>
       -- Замена(по-прежнему в исходном первой прогонке массива)
       <strong> на [B]
       </strong> на [/B]

        --удалить текст по маске по уже обработаному тексту массива(перезапись после каждой маски)
        <div.+>
        <script.+>
        <img.alt\="\S+"
        class="\S+"
        style=".+">
        <a.href\="\S+"
        -- замена после предыдущих правок в тексте(массиве)
        -- удаляем и перезаписываем файл
        title="Увеличить изображение">
        <img alt=""
        --
        src=" на [img] ----меняем как обычный текст после замены перезаписываем массив
        ".$ на [/img]  --замена по регулярному вырожению
        --конечная правка, удаляем символы
        >
        --замена текста на свой,например из таблицы(которой пока еще нет, но имет примерный вид):
        «Арена Клинков» меняем на [url=https://ссылка.com/как_и_любая_обычная_ссылка_на_ресурс/]«Арена Клинков»[/url]
        "Арена Клинков" меняем на [url=https://ссылка.com/как_и_любая_обычная_ссылка_на_ресурс/]«Арена Клинков»[/url]
        «Тайны старого замка» меняем на [url=https://ссылка.com/как_и_любая_обычная_ссылка_на_ресурс/]«Тайны старого замка»[/url]
        "Тайны старого замка" меняем на [url=https://ссылка.com/как_и_любая_обычная_ссылка_на_ресурс/]«Тайны старого замка»[/url]
        -- и далее в таком же духе
       f2:write(s)   -- пишем в другой файл
       f2:close()  -- закрыть файл
end

собрал для образца
Прикрепленный файл  1.txt ( 33,02 килобайт ) Кол-во скачиваний: 228

Прикрепленный файл  2.txt ( 9,78 килобайт ) Кол-во скачиваний: 250

Автор: cirus 20.3.2020, 11:38

Не забываем экранировать спецсимволы, т. е. ставить перед ними %.
Принцип такой:

код
Код
--lua
local f = io.open([[C:\1.txt]], "rb")  -- открыть файл для чтения
local f2 = io.open([[C:\2.txt]], "wb")  -- открыть файл для записи

log "clear"    log "mode compact"
if f and f2 then   -- если файлы открылись
        local s, n = f:read("*a")     -- прочитать весь файл
        f:close()  -- закрыть файл

       -- тут заменяем что нужно

       s, n = s:gsub('<%/div>', "")
       log("Количество замен: " .. n)

       s, n = s:gsub('<%/script>', "")
       log("Количество замен: " .. n)

        s, n = s:gsub('<p style="text%-align:center">', "")
       log("Количество замен: " .. n)

        s, n = s:gsub('<strong>', "[B]")
        log("Количество замен: " .. n)

        -- остальное аналогично


        f2:write(s)   -- пишем в другой файл
        f2:close()  -- закрыть файл
end

Цитата
удалить текст по маске по уже обработаному тексту массива(перезапись после каждой маски)
<div.+>

Нужно <div.->, иначе он почти весь текст удалит, потому что + это жадный поиск, захватывает максимальное количество символов. Т. е. при <div.-> увидит первый > и остановится, а при <div.+> остановится только на последнем >.
Цитата
перезапись после каждой маски

И зачем? После всех изменений сохранить строку в файл и всё.

Автор: FREEON 21.3.2020, 20:56

А как сделать замену с вариантами? например:

Код
s, n = s:gsub('«Лотерее маунта»|«Лотерея Маунта»|"Лотерее маунта"|"Лотерея Маунта"', "[url=https://ссылка/threads/lotereja-maunta.78168/]«Лотерее маунта»[/url]")

Автор: cirus 21.3.2020, 21:40

Цитата
А как сделать замену с вариантами?

Примерно так:
Код
--lua
log "clear" log "mode compact"
local s=[[Какой-то текст "Лотерея Маунта" ещё текст]]

s = s:gsub('[«%"]Лотере[ея] [Мм]аунта[»%"]', "[url=https://ссылка/threads/lotereja-maunta.78168/]«Лотерее маунта»[/url]")
log (s)

Автор: FREEON 21.3.2020, 21:45

Цитата(cirus @ 21.3.2020, 21:40) *

Примерно так:
Код
--lua
log "clear" log "mode compact"
local s=[[Какой-то текст "Лотерея Маунта" ещё текст]]

s = s:gsub('[«%"]Лотере[ея] [Мм]аунта[»%"]', "[url=https://ссылка/threads/lotereja-maunta.78168/]«Лотерее маунта»[/url]")
log (s)


хитро

Автор: FREEON 27.3.2020, 15:23

А как быть если нужно заменить текст в определённой папке и ее подпапках на Lua?

Автор: Fors1k 27.3.2020, 23:08

Цитата(FREEON @ 20.3.2020, 6:55) *
описание действий
Код
--lua
local f = io.open([[C:\qwe.txt]], "rb")  -- открыть файл для чтения
local f2 = io.open([[C:\456.txt]], "wb")  -- открыть файл для записи

if f and f2 then   -- если файлы открылись
       local s = f:read("*a")     -- прочитать весь файл
       f:close()  -- закрыть файл

       log (s)  -- содержимое файла
       -- тут заменяем что нужно
       -- Сперва удаляем как обычный текст (действия которые можно делать "одновременно" в один прогон массива файла)
       </div>
       </script>
       </a>
        
       <p style="text-align:center">
       <p>
       </p>
       -- Замена(по-прежнему в исходном первой прогонке массива)
       <strong> на [B]
       </strong> на [/B]

        --удалить текст по маске по уже обработаному тексту массива(перезапись после каждой маски)
        <div.+>
        <script.+>
        <img.alt\="\S+"
        class="\S+"
        style=".+">
        <a.href\="\S+"
        -- замена после предыдущих правок в тексте(массиве)
        -- удаляем и перезаписываем файл
        title="Увеличить изображение">
        <img alt=""
        --
        src=" на [img] ----меняем как обычный текст после замены перезаписываем массив
        ".$ на [/img]  --замена по регулярному вырожению
        --конечная правка, удаляем символы
        >
        --замена текста на свой,например из таблицы(которой пока еще нет, но имет примерный вид):
        «Арена Клинков» меняем на [url=https://ссылка.com/как_и_любая_обычная_ссылка_на_ресурс/]«Арена Клинков»[/url]
        "Арена Клинков" меняем на [url=https://ссылка.com/как_и_любая_обычная_ссылка_на_ресурс/]«Арена Клинков»[/url]
        «Тайны старого замка» меняем на [url=https://ссылка.com/как_и_любая_обычная_ссылка_на_ресурс/]«Тайны старого замка»[/url]
        "Тайны старого замка" меняем на [url=https://ссылка.com/как_и_любая_обычная_ссылка_на_ресурс/]«Тайны старого замка»[/url]
        -- и далее в таком же духе
       f2:write(s)   -- пишем в другой файл
       f2:close()  -- закрыть файл
end
Прикрепленный файл  1.txt ( 33,02 килобайт ) Кол-во скачиваний: 228
Прикрепленный файл  2.txt ( 9,78 килобайт ) Кол-во скачиваний: 250
Цитата(FREEON @ 27.3.2020, 15:23) *
А как быть если нужно заменить текст в определённой папке и ее подпапках

Код
--lua
path=[[C:\2\1\7]]  -- Путь к папке.

require "luaposh";PScode('void',{[[#}

function text($arr){#}
    [string]$a=(Get-Content $arr.fullname -encoding UTF8)-join "`r`n"
### Тэги, которые нужно удалить
    $ex=@(
        '<p style="text-align:center">'," ",
        '< title="Увеличить изображение">','<p ',
        "</p>",'\<[Ii][Mm][Gg].[Aa][Ll][Tt]\="\S+"',
        '<[Aa].[Hh][Rr][Ee][Ff]\=".+?">','</a>','<p>',
        '<script.+>','<div.+>','<img alt=""',
        '</script>','</div>','class="\S+"','style=".+">'
    );$ex|ForEach-Object{$a=$a -replace $_}
### Замена тэгов
    $a=$a -replace '<strong>', '[B]' -replace '</strong>', '[/B]'
    $a=$a -replace 'src\="', '[img]' -replace '".(?=\r\n)', '[/img]'
### Замена данных
    $a=$a -replace '«Арена Клинков»',
    '[url=https://ссылка.com/как_и_любая_обычная_ссылка_на_ресурс/]«Арена Клинков»[/url]'
    $a=$a -replace '«Тайны старого замка»',
    '[url=https://ссылка.com/как_и_любая_обычная_ссылка_на_ресурс/]«Тайны старого замка»[/url]'
    #...
### Сохранить результат
    $a -split "`r`n"|Out-File $($arr.DirectoryName+"\new"+$arr.name)
}
Get-ChildItem $input '*.txt' -recurse|ForEach-Object{text $_}

]]},path)


Код проверил на присланном файле. Работает со всеми файлами в папке и ее подпапках. Из 1.txt получился 2.txt.

Автор: FREEON 28.3.2020, 11:27

Подозреваю что неверно дергаю переменные функции...

Код
--lua
log "clear" log "mode compact"
local path = [[C:\1]]      -- путь к папке
local resultarray, count = dir (path, "*.smali") -- получить список всех файлов в формате 'wav', включая файлы в подпапках
log ("Найдено файлов: " .. count)
if  count then      -- если файлы найдены
    for i=1, #resultarray do
        log (resultarray[i][1])                          -- показать в логе список
        local file1 = io.open([[resultarray[i][1]]], "rb") -- Открыть файл для чтения
        local file2 = io.open([[C:\NEW.smali]], "wb")   -- Куда будем записывать результат(файл создастся сам)

        if  file1 and file2 then                        -- если файлы открылись
            local s, n = file1:read("*a")               -- прочитать весь файл
            file1:close()                               -- закрыть файл

            -- заменяем текста
            s, n = s:gsub('"Action"', '"Экшены"')                 log("Экшены - замен: " .. n)
            s, n = s:gsub('"Adventure"', '"Приключения"')         log("Приключения - замен: " .. n)

            file2:write(s)                          -- пишем в другой файл
            file2:close()                           -- закрыть файл
            filedelete ([[resultarray[i][1]]])      -- удаляем старый файл
            filecopy ([["C:\NEW.smali"]], [["resultarray[i][1]"]]) --копируем новый файл в папку с нужным именем и расширением
        end
    end
end

Автор: cirus 28.3.2020, 11:38

Цитата
[["resultarray[i][1]"]]

Переменная в кавычках и квадратных скобках это просто текст.
Выводите в лог и сразу будет видно:
Код
filecopy ([["C:\NEW.smali"]], [["resultarray[i][1]"]]) --копируем новый файл в папку с нужным именем и расширением
log([["resultarray[i][1]"]])
log(resultarray[i][1])


Автор: FREEON 28.3.2020, 12:45

Цитата(cirus @ 28.3.2020, 11:38) *

Переменная в кавычках и квадратных скобках это просто текст.

Код
--lua
log "clear" log "mode compact"
local path = [[C:\1]]      -- путь к папке
local resultarray, count = dir (path, "*.txt") -- получить список всех файлов в формате 'wav', включая файлы в подпапках
log ("Найдено файлов: " .. count)
if  count then      -- если файлы найдены
    for i=1, #resultarray do
        log (resultarray[i][1])                          -- показать в логе список
        local file1 = io.open(resultarray[i][1], "rb") -- Открыть файл для чтения
        local file2 = io.open([[C:\NEW.txt]], "wb")   -- Куда будем записывать результат(файл создастся сам)

        if  file1 and file2 then                        -- если файлы открылись
            local s, n = file1:read("*a")               -- прочитать весь файл
            file1:close()                               -- закрыть файл

            -- заменяем текста
            s, n = s:gsub('"Action"', '"Экшены"')                 log("Экшены - замен: " .. n)
            s, n = s:gsub('"Adventure"', '"Приключения"')         log("Приключения - замен: " .. n)

            file2:write(s)                          -- пишем в другой файл
            file2:close()                           -- закрыть файл
            filedelete (resultarray[i][1])      -- удаляем старый файл
            filecopy ([["C:\NEW.txt"]], resultarray[i][1]) --копируем новый файл в папку с нужным именем и расширением
            filedelete ([["C:\NEW.txt"]])
        end
    end
end

а не норм работает, забыл в папке для теста сменить расширение на нужный и все заработало.
И удалять file2 после обработки каждой т.к. дублировала шаблоны замены smile.gif

Автор: Fors1k 28.3.2020, 16:26

offtop
При публикации почему-то теряется часть кода. Вот этот кусок вырезается  & n b s p ; .



Автор: FREEON 28.3.2020, 18:33

"&nbsp;" это код пробела и поэтому если печатовать как обычный текст то он при обработке заменяется на соответствующий символ.
Так же к ним относятся такие коды(html) пустоты:
&# 4448;
&# 160;
&# 0160;
&# 12288;
&# 10;
&# 13;
&# 12;
&# 8195;
&# 8194;
и прочие
...
Что косательно пропажи кода то его нужно в данном случае публиковать без пред просмотра.
 

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)