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

9 страниц V « < 5 6 7 8 9 >  
Ответить в эту темуОткрыть новую тему
> Найти текст в документе и показать всю строку, Найти текст в документе и показать всю строку
cirus
сообщение 24.6.2019, 14:52
Сообщение #121


**********

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



Что не переводит? Пилот перезапустите.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 24.6.2019, 15:09
Сообщение #122


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



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

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

А всё норм, спасиб)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 25.6.2019, 16:47
Сообщение #123


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2379
Пользователь №: 18.746



Цитата(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 вместо обычных пробелов - какие-то километровые(похоже табуляция). Кстати,оказывается, это не первый случай. В этом скрипте так же в логе все красиво, а если мы %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

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

В итоге скрипт полностью рабочий, но над этими моментами я пол дня голову ломаю (IMG:https://forum.uokit.com/style_emoticons/default/wacko.gif)


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 25.6.2019, 18:54
Сообщение #124


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2379
Пользователь №: 18.746



Upd.
Насчет первого - походу эта команда считает максимальное количество элементов в строках всего массива, а не в заданной строке...(IMG:http://forum.netbynet.ru/style_emoticons/default/unknw.gif)
Насчет второго - по пробелам пока непонятно, но нашел временное решение:
Код
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, можешь попробовать)


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 28.6.2019, 13:22
Сообщение #125


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



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

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

должно получиться в новом файле:
[STRING]
[ITEM]
[INT]
{STR_ICON = GOLD}
[прайс]
{СТР = ЗОЛОТО}
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 28.6.2019, 14:31
Сообщение #126


**********

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



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

код
Код
--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

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 28.6.2019, 15:08
Сообщение #127


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



Цитата(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.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 28.6.2019, 15:14
Сообщение #128


**********

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



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

С юникодом не будет работать.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 28.6.2019, 15:23
Сообщение #129


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



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

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

блин(

тогда просто удалить все нечетные строки можно из текста?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 28.6.2019, 16:55
Сообщение #130


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2379
Пользователь №: 18.746



Цитата(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


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 28.6.2019, 18:37
Сообщение #131


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



Цитата(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



спс
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 28.6.2019, 22:53
Сообщение #132


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



А можно автопереводчик замутить? Есть тхт файл с английскими словами в столбик, нужно чтобы скрипт:
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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 29.6.2019, 15:21
Сообщение #133


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2379
Пользователь №: 18.746



Цитата(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



--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 29.6.2019, 15:52
Сообщение #134


**********

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



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

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


Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 29.6.2019, 15:59
Сообщение #135


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2379
Пользователь №: 18.746



Цитата(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


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 29.6.2019, 16:53
Сообщение #136


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2379
Пользователь №: 18.746



Цитата(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], причем не включал сами скобки с краев.
Где бы можно найти больше информации о регэкспе. Совсем пока тяжело с синтаксисом его запросов.


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 29.6.2019, 17:34
Сообщение #137


**********

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



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

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

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

Примеры есть тут:
https://uopilot.tati.pro/index.php?title=Ре...ажения_(Regexp)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 29.6.2019, 18:27
Сообщение #138


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2379
Пользователь №: 18.746



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

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

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


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 29.6.2019, 18:32
Сообщение #139


**********

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



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

Код
"\[.?\]"

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

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

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 29.6.2019, 18:42
Сообщение #140


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2379
Пользователь №: 18.746



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

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

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


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

9 страниц V « < 5 6 7 8 9 >
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

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