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

 
Ответить в эту темуОткрыть новую тему
> Обработка информации текстового файла, помощь, Помощь в написании скрипта по обработке информации
Tazik
сообщение 4.12.2021, 10:20
Сообщение #1


*

Registred
Сообщений: 9
Регистрация: 4.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.142
Возраст: 38



Привет!
Просьба помочь разобраться, как считывать информацию с текстового файла, обработать информацию и вывести полученный результаты (IMG:style_emoticons/default/smile.gif) Хочу сделать некую статистику с выводом информации на экране.

Есть некий лог файл (большой, на Английском), в котором постоянно добавляется информация, снизу вверх, т.е. актуальная строка находится в самой последней строке. Нужно чтобы скрипт считывал информацию этой строки, и если есть совпадению по интересующему слову, например: System , то обрабатывал информацию этой строки полностью. Нужно понять что написано в этой строке, в котором есть слово System, присутствующие цифровые значения складывал и записывал в отдельный файл.

Я просто не понимаю механику работу с текстовыми файлами (IMG:style_emoticons/default/sad.gif)

Пример текста из лог файла:
2021-12-04 06:05:47 [System] [] You received Vibrant Sweat x (4) Value: 0.0000 PED
2021-12-04 06:05:50 [System] [] You took 11.0 points of damage
2021-12-04 06:05:53 [System] [] The attack missed you
2021-12-04 06:05:54 [Rookie] [Inthis Strash life] i believe monria is codexed up
2021-12-04 06:05:56 [System] [] You Evaded the attack
2021-12-04 06:06:01 [Rookie] [Billy Rockstar Idol] cool
2021-12-04 06:06:01 [Rookie] [Inthis Strash life] been like that for a while
2021-12-04 06:06:09 [Rookie] [Billy Rockstar Idol] not sure have not been
2021-12-04 06:06:09 [System] [] You took 17.0 points of damage
2021-12-04 06:06:12 [System] [] You took 18.3 points of damage
2021-12-04 06:06:15 [System] [] You took 12.0 points of damage
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Tazik
сообщение 4.12.2021, 16:52
Сообщение #2


*

Registred
Сообщений: 9
Регистрация: 4.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.142
Возраст: 38



кажется разобрался как это сделать, через load и save , но сейчас думаю как зафиксировать изменение значения в лог файле, там тикает время, на него и буду опираться для запуска скрипта, и там еще за одну секунду может выдать сразу несколько сообщений, поэтому считывать нужно как минимум 5 строк снизу.
Получается, что меняется 19 столб, который указывает на секунды.
нужно как-то зафиксировать изначальное состояние столбца 19, и если будет не совпадение то запустится скрипт.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Tazik
сообщение 4.12.2021, 19:57
Сообщение #3


*

Registred
Сообщений: 9
Регистрация: 4.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.142
Возраст: 38



что-то я так и не понял как вычислить цифру в строке из слов в массиве %arr,
но мысля пришла, если строки постоянно добавляются, значит меняется их количество,
поэтому попробую опираться на изменение size%arr,
какое было показание #n size(%arr) , сравнивая с новым показанием #n2, если выросло, то на сколько #s и проверять все новые строки в количестве #s строк ,
ну и из проверенных строк выискивать нужное и записать в файл, и там далее (IMG:style_emoticons/default/smile.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Tazik
сообщение 4.12.2021, 21:27
Сообщение #4


*

Registred
Сообщений: 9
Регистрация: 4.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.142
Возраст: 38



и опять таки, не могу определить цифру(ы) в строке массива (IMG:style_emoticons/default/sad.gif)
скорее всего что-то пишу не верно, пробую через:
get word в логах пилота - пустые строки
get number находит первую цифру (не верную)

лог файла:
2020-10-26 20:23:48 [System] [] 5 You took 6.5 points of damage
2020-10-26 20:23:50 [System] [] 4 The attack missed you
2020-10-26 20:23:51 [System] [] 3 The attack missed you
2020-10-26 20:23:52 [#calytrade] 2 selling [Sollomate Azuro (L)] full tt for 1ped
2020-10-26 20:23:53 [System] [] 1 The attack missed you >>test<< 100
2021-12-04 10:22:30 [System] [] You received Vibrant Sweat x (1) Value: 0.0000 PED

интересует нижняя строка в логе и цифры которые идут после слова "Value:"
2021-12-04 10:22:30 [System] [] You received Vibrant Sweat x (1) Value: 0.0000 PED



скрипт
[code]
//files2
log Files2<<
:start
wait 1s

//load_array %arr C:\Users\User\Desktop\EU\PythonTest\Test.txt
//set #n size(%arr)
//log n:#n

//pause_script //вручную добавлял строку и дальше отжимал паузу

load_array %arr C:\Users\User\Desktop\EU\PythonTest\Test.txt
set #n2 size(%arr)
log n2:#n2

//if #n2 > #n
// set #s #n2 - #n
// log строк добавлено: #s
//end_if
//log %arr[#n2]

set $sub System //проверка 1го слова
set #posS posEx($sub, %arr[#n2])
if #posS > 0
log posS system:#posS
log %arr[#n2]
wait 200
set $sub Value: //проверка 2го слова
set #posV posEx($sub, %arr[#n2])
if #posV > 0
log posV Value:#posV
log %arr[#n2]
set #posV #posV + 8 //т.к. после Value: идут еще знаки до первой цифры 0
log #posV
end_if
end_if

get word $var #posV %arr[#n2]
log $var \n позиция в строке: #posV

get number #var #posV %arr[#n2]
log #var \n позиция в строке: #posV

log done

End_script

лог пилота:
21:18:33 27 (-27-.txt, 1): Files2<<
21:18:34 27 (-27-.txt, 13): n2:15
21:18:35 27 (-27-.txt, 24): posS system:22
21:18:35 27 (-27-.txt, 25): 2021-12-04 10:22:30 [System] [] You received Vibrant Sweat x (1) Value: 0.0000 PED
21:18:36 27 (-27-.txt, 30): posV Value:66
21:18:36 27 (-27-.txt, 31): 2021-12-04 10:22:30 [System] [] You received Vibrant Sweat x (1) Value: 0.0000 PED
21:18:36 27 (-27-.txt, 33): 74
21:18:36 27 (-27-.txt, 38): \n позиция в строке: 74
21:18:37 27 (-27-.txt, 41): 1 \n позиция в строке: 9
21:18:37 27 (-27-.txt, 43): done
[code]


Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 4.12.2021, 21:37
Сообщение #5


**********

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



Код
set %arr [1] "2021-12-04 10:22:30 [System] [] You received Vibrant Sweat x (1) Value: 123.456 PED"

log clear
log mode compact

set $regexp "(?<=Value: )\d+\.\d+"
set #result regexp (#position $hitstring %arr [1] $regexp)
if #result = 1
    log $hitstring
end_if
end_script
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Tazik
сообщение 4.12.2021, 21:54
Сообщение #6


*

Registred
Сообщений: 9
Регистрация: 4.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.142
Возраст: 38



ай огромное аригато (IMG:style_emoticons/default/smile.gif)
понял теперь, буду дальше вникать и допиливать задуманное
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Tazik
сообщение 5.12.2021, 9:32
Сообщение #7


*

Registred
Сообщений: 9
Регистрация: 4.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.142
Возраст: 38



и опять числа, если число к примеру:
1й вариант) 1.0251
2й вариант) 4.1751

не нашел вариантов как складывать такие числа, кроме как разбивки чисел, до точки и после, тогда пилот отбрасывает первый ноль, 2го числа, 1го варианта и получается,
не 0,0251 а 251
есть какие-то варианты, как грамотно произвести сложение дробных чисел?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 5.12.2021, 11:21
Сообщение #8


**********

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



Цитата
есть какие-то варианты, как грамотно произвести сложение дробных чисел?

Использовать синтаксис луа.
Код
--lua
log 'clear' log 'mode compact'

local h_file = io.open([[C:\log.txt]], "rb")  -- открыть файл для чтения
local result = 0

if h_file then     -- если файл открылся
    for v in h_file:lines() do    -- прочитать файл по строкам
        local s = v:match("System.-(%d+%.%d+) points")     -- найти число в строке
        if s then       -- если найдено
            log(s)
            result = result + s       -- сложить результат
        end
    end
    h_file:close()     -- закрыть файл

    log ("result = " .. tostring(result))
else
    log ("Файл не открылся")
end
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Tazik
сообщение 5.12.2021, 17:53
Сообщение #9


*

Registred
Сообщений: 9
Регистрация: 4.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.142
Возраст: 38



ясно, и я так понимаю это уже в другой программе делается? пилот не распознает речь --lua
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 5.12.2021, 18:40
Сообщение #10


**********

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



Цитата
это уже в другой программе делается?

Версия 2.41.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Tazik
сообщение 5.12.2021, 22:57
Сообщение #11


*

Registred
Сообщений: 9
Регистрация: 4.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.142
Возраст: 38



Код
local s = v:match("System.-(%d+%.%d+) points")     -- найти число в строке


тут находит не те цифры которые нужны,
есть 2е строки:
2020-10-26 20:23:48 [System] [] 5 You took 6.5 points of damage
2021-12-04 10:22:30 [System] [] You received Vibrant Sweat x (1) Value: 0.0123 PED
находит 1ю, выдает 6.5
а нужно два условия проверки строки: что там есть слово System, и если да то ищем 2е слово Value, и после него ищем цифры и складываем, ну и да, нужна точность как в бухгалтерии ))
пробовал поиграться с кодом, да без успешно (IMG:style_emoticons/default/smile.gif)

благодарю, а есть сайт где можно посмотреть команды на lua с описанием и примерами на русском, как это представлено для пилота?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 5.12.2021, 23:22
Сообщение #12


**********

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



Цитата
а нужно два условия проверки строки: что там есть слово System, и если да то ищем 2е слово Value, и после него ищем цифры

Код
 local s = v:match("System.-Value: (%d+%.%d+)")

Цитата
а есть сайт где можно посмотреть команды на lua с описанием и примерами на русском, как это представлено для пилота?

Введение_в_синтаксис_Lua
Список_функций_(Lua)
Стандартный функционал луа можно найти в поисковике.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Tazik
сообщение 6.12.2021, 3:02
Сообщение #13


*

Registred
Сообщений: 9
Регистрация: 4.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.142
Возраст: 38



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

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

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