Войти

Показать полную графическую версию : Поиск слов и вывод количества без пересчета


Zervan
09-07-2023, 03:29
Доброго. Появилась сильная задача, которую осилить не смог без полноценного опыта.

Имеется: несколько файлов script
script_2023-07-06_21-57-54.log
script_2023-07-06_21-59-55.log
script_2023-07-06_22-23-43.log
script_2023-07-06_23-57-11.log
script_2023-07-07_02-24-14.log
script_2023-07-07_04-53-45.log

Т.е. они формируются автоматически после запуска программы и записываются после завершения программы. Но есть нюанс: всегда создается активный (во время работы программы) файл log, который постоянно сам себя обновляет. Его я использовать для создания bat файла не могу (или могу?)
Требуется пройти по всем файлам и выцепить количество строк с определенным содержанием. Строка имеет вид:
SCRIPT : string str = '[TRADER] Player: (Name) DF5gGthyj6OKv_PeDFh6hEEChlIGE-cIFc= #tm_sold Нарукавная повязка (Armband_Black)'
Такие строки могут быть и на 5 линии, и на 21040 линии, т.е. все файлы логов объемные сами по себе

По итогу:
1. Нужно чтобы скрипт прошел по всем файлам
2. Чтобы нашел данную строку и фразу "#tm_sold Нарукавная повязка (Armband_Black)"
3. Вывел количество данных строк по всем файлам в текстовый документ.
4. Не перезаписывал количество уже из проверенных файлов
5. Уходил на повторную проверку через n-время

Меня хватило на следующее для теста, но логично, что база файлов не собирается, а также сохранение происходит криво:

@echo off

set /a count=0

:top
for /f "usebackq delims=" %%a in ("script*.log") do for %%i in (%%a) do (
if %%i == #tm_sold Нарукавная повязка (Armband_Black) set /a count+=1
)

echo count : %count%

echo Timeout, next change do 5 sec
timeout /t 5
goto top

Sham
09-07-2023, 07:35
3. Вывел количество данных строк по всем файлам в текстовый документ. »
укажите формат "текстового документа"
4. Не перезаписывал количество уже из проверенных файлов »
противоречит п.3

Zervan
09-07-2023, 15:53
укажите формат "текстового документа"
Любой, но пусть будет Count.txt

противоречит п.3
Не совсем понял... Просто сейчас идет проверка по одному файлу, но нет остальных по списку
А перезаписывание это к вопросу - можно ли сделать так, чтобы файл автоматически добавлял только новые значения.
Сейчас я переписал так, но все еще остальные файлы не подключаются

@echo off

:top
set /a count=0

for /f "usebackq delims=" %%a in ("script*.log") do for %%i in (%%a) do (
if %%i == привет set /a count+=1
)

echo count : %count%

echo Timeout, next change do 5 sec
timeout /t 5
goto top

Zervan
09-07-2023, 17:10
В общем я понял, что фактически нельзя сделать перезапись с сохранением без обнуления, уже смирился. Но остается вопрос тогда - как добавить в этот скрипт остальные файлы, у которых рандомное время?

Sham
09-07-2023, 19:12
while ($true) {
$count = 0;
Get-ChildItem 'c:\dir' 'script_*.log' | Get-Content |
Select-String -SimpleMatch '#tm_sold Нарукавная повязка (Armband_Black)' | #кодировка
% { $count++ }
Write-Host "count: $count"
Start-Sleep 5
}
это powershell, но идея в полном проходе всех файлов каждый раз. Если сохранять состояние, то надо дополнительно реализовывать.

Zervan
09-07-2023, 19:16
while ($true) {
$count = 0;
Get-ChildItem 'c:\dir' 'script_*.log' | Get-Content |
Select-String -SimpleMatch '#tm_sold Нарукавная повязка (Armband_Black)' | #кодировка
% { $count++ }
Write-Host "count: $count"
Start-Sleep 5
} »
А через bat вообще нельзя реализовать? С Powershell не хотят работать нормально другие комбинации

Zervan
09-07-2023, 23:40
Попытался модернизировать свой же код, но в итоге получил много ошибок

@echo off

:top
set /a count=0

for /f "usebackq delims=" %%a in ("script*.log") do for %%i in (%%a) do (
if %%i == #tm_sold Нарукавная повязка (Armband_Black) set /a count+=1
)

echo count : %count%

echo Timeout, next change do 5 sec
timeout /t 5
goto top

("script*.log") - пытается найти конкретно этот файл со *, а не общий список из того, что вообще может быть после _
#tm_sold Нарукавная повязка (Armband_Black) - из за # вопринимает строку как отдельный элемент.

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




© OSzone.net 2001-2012