1 (изменено: lagetit, 2017-01-15 14:52:10)

Тема: AHK: Копирование текста после определенной точки

Здравствуйте! Есть таблица, необходимо после определенного слова\слов скопировать текст, слова постоянно могут быть разные, поэтому необходимо сделать список слов после которых будет копирование. Возможно ли это сделать?
Пример:

time  attacker target        weapon                                           ammo area    distance old_hp new_hp info 
11.8s you      loot_barrel_2 assets/prefabs/weapons/torch/torch.entity.prefab N/A  generic 1.1m     35.0   29.6        
10.4s you      loot_barrel_2 assets/prefabs/weapons/torch/torch.entity.prefab N/A  generic 0.6m     29.6   24.2        
9.1s  you      loot_barrel_2 assets/prefabs/weapons/torch/torch.entity.prefab N/A  generic 0.9m     24.2   18.8        
7.7s  you      loot_barrel_2 assets/prefabs/weapons/torch/torch.entity.prefab N/A  generic 0.9m     18.8   13.4        
6.4s  you      loot_barrel_2 assets/prefabs/weapons/torch/torch.entity.prefab N/A  generic 0.9m     13.4   8.0         
5.1s  you      loot_barrel_2 assets/prefabs/weapons/torch/torch.entity.prefab N/A  generic 0.7m     8.0    2.6         
3.8s  you      loot_barrel_2 assets/prefabs/weapons/torch/torch.entity.prefab N/A  generic 0.7m     2.6    0.0       

Необходимо скопировать текст который находится после "N/A" тобишь generic 1.1m 35.0 29.6 и так из каждой строки.
Заранее спасибо!

2

Re: AHK: Копирование текста после определенной точки

N\A всегда будет в каждой строчке?

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

3

Re: AHK: Копирование текста после определенной точки

Ах да, чуть не забыл, измените заголовок по правилам и я вам помогу.

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

4 (изменено: lagetit, 2017-01-15 14:50:06)

Re: AHK: Копирование текста после определенной точки

belyankin12 пишет:

N\A всегда будет в каждой строчке?

Там где в данный момент N\A может быть около 5 разных слов и они в каждой строчке могут меняться. Пример: pistol.ammo HV.pistol.ammo rifle.ammo и т.д.

5 (изменено: belyankin12, 2017-01-15 14:57:05)

Re: AHK: Копирование текста после определенной точки

lagetit, если вариантов всего несколько, для точности, лучше будет привести пример каждой строчки с разным вариантом. Так я смогу написать универсальное выражение. А если вариантов много, то точность распознавания будет не стопроцентной. Ещё вопрос: вам нужно скопировать из каждой строчки все выражения после N\A в буфер обмена, или копировать по очереди? Или может лучше записать все скопированное в какой-нибудь текстовый файл?

loot_barrel_2 assets/prefabs/weapons/torch/torch.entity.prefab

Это будет всегда? Мне нужно как можно больше постоянных значений - что будут всегда в каждой строчке и на том же месте.

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

6 (изменено: lagetit, 2017-01-15 15:04:26)

Re: AHK: Копирование текста после определенной точки

Расскажу вам что я хотел бы сделать в дальнейшем и думаю вы сами определите какой способ лучше. После данного копирования текст пойдет в GUI на раб стол. Лично я думаю что лучше сделать запись в файл.
Точный пример:

time  attacker target weapon                 ammo          area    distance old_hp new_hp info 
37.6s you      player ak47u.entity           riflebullet   chest   86.3m    70.8   47.8        
32.8s you      player bolt_rifle.entity      riflebullet   head    49.9m    100.0  0.0         
28.5s you      player shotgun_pump.entity    shotgunbullet stomach 30.6m    5.8    0.0         
15.2s you      player pistol_semiauto.entity pistolbullet  leg     16.1m    100.0  81.0        
14.7s you      player pistol_semiauto.entity pistolbullet  stomach 17.1m    80.8   59.5        
14.1s you      player pistol_semiauto.entity pistolbullet  leg     17.2m    59.2   40.3        
10.6s player   you    ak47u.entity           riflebullet   chest   10.7m    100.0  86.3        
10.0s player   you    ak47u.entity           riflebullet   arm     8.6m     86.0   58.5        
9.7s  player   you    ak47u.entity           riflebullet   leg     8.3m     58.5   34.1        
6.8s  you      player shotgun_pump.entity    shotgunslug   hand    2.5m     36.6   0.0         
4.2s  you      player shotgun_pump.entity    shotgunslug   chest   2.8m     4.0    0.0         

В данном случае необходимо копировать все что находится после riflebullet;shotgunbullet;pistolbullet тобишь будет всего 3 слова после которых необходимо копировать текст.

7

Re: AHK: Копирование текста после определенной точки

belyankin12 пишет:

Это будет всегда? Мне нужно как можно больше постоянных значений - что будут всегда в каждой строчке и на том же месте.

Постоянными значениями можно сделать слово you в столбике attacker. Получится что у нас будет копироваться текст только в строке там где атакую я, а не меня(лишняя информация).

8

Re: AHK: Копирование текста после определенной точки

lagetit
Избыточное цитирование запрещено. Удалил. Прочтите все правила.

9

Re: AHK: Копирование текста после определенной точки

lagetit, а значит target всегда будет player, верно?

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

10 (изменено: lagetit, 2017-01-15 15:16:01)

Re: AHK: Копирование текста после определенной точки

belyankin12, Да, именно так!

11 (изменено: belyankin12, 2017-01-15 15:31:27)

Re: AHK: Копирование текста после определенной точки

Готово. Из всех строчек, где записано как атаковали вы, после слов "riflebullet","shotgunbullet","pistolbullet" весь текст копируется в файл, записывая в новой строчке каждый скопированный текст.


path_read := A_ScriptDir "\Отсюда прочитаем.txt"
path_write := A_ScriptDir "\А сюда мы все запишем.txt"

	Loop
	{
	log := {str:"",find:0,num:0}    ,    log.str := []

	Loop, read, %path_read%
    log.str.Insert(A_LoopReadLine)    ,log.num := A_Index
		 
		 if RegExMatch(     log.str[log.num + 1 - A_Index]
        ,"(.*)you(.*)player(.*)(riflebullet|shotgunbullet|pistolbullet)(.*)"
        , end_str) and (log.find:=log.num + 1 - A_Index)
		; 28.5s you      player shotgun_pump.entity    shotgunbullet stomach 30.6m    5.8    0.0         
        ; 15.2s you      player pistol_semiauto.entity pistolbullet  leg     16.1m    100.0  81.0        
		if (end_str1 != "") {
		FileAppend, %end_str5%`n, %path_write%
		} else {
		msgbox, error
		}
	}
	return

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

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

12 (изменено: lagetit, 2017-01-15 16:08:47)

Re: AHK: Копирование текста после определенной точки

Спасибо. Работает, но он выводит строки снизу вверх, а нужно сверху вниз, можно изменить?

13

Re: AHK: Копирование текста после определенной точки

belyankin12, Вот есть еще один пример лога:

time    attacker target                   weapon                 ammo          area    distance old_hp new_hp info 
2975.9s player   you                      ak47u.entity           riflebullet   arm     8.6m     86.0   58.5        
2975.6s player   you                      ak47u.entity           riflebullet   leg     8.3m     58.5   34.1        
2972.7s you      player                   shotgun_pump.entity    shotgunslug   hand    2.5m     36.6   0.0         
2970.1s you      player                   shotgun_pump.entity    shotgunslug   chest   2.8m     4.0    0.0         
2905.2s you      player                   ak47u.entity           riflebullet   chest   38.6m    100.0  73.8        
2901.7s you      player                   ak47u.entity           riflebullet   leg     38.6m    72.7   49.4        
2900.1s player   you                      bolt_rifle.entity      riflebullet   head    47.3m    76.4   0.0         
2857.7s you      landmine                 ak47u.entity           riflebullet   generic 4.4m     100.0  50.0        
2857.5s you      landmine                 ak47u.entity           riflebullet   generic 6.2m     100.0  50.0        
2856.3s you      landmine                 ak47u.entity           riflebullet   generic 8.2m     50.0   0.0         
651.9s  you      wall.external.high.stone ak47u.entity           riflebullet   generic 37.0m    278.2  278.0       
651.0s  you      player                   ak47u.entity           riflebullet   chest   9.3m     33.1   5.6         
649.9s  you      player_corpse            ak47u.entity           riflebullet   generic 6.5m     100.0  100.0       
648.8s  you      player                   ak47u.entity           riflebullet   stomach 6.5m     4.9    0.0         
645.3s  you      player                   pistol_semiauto.entity pistolbullet  foot    4.2m     5.0    0.0         
600.4s  player   you                      ak47u.entity           riflebullet   stomach 100.8m   100.0  78.0        
566.0s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.6m     2498.6 2498.5      
566.0s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.5m     2498.5 2498.3      
566.0s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.6m     2498.3 2498.2      
566.0s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.9m     2498.2 2498.0      
566.0s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.4m     2498.0 2497.9      
566.0s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.6m     2497.9 2497.7      
566.0s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.6m     2497.7 2497.6      
566.0s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.5m     2497.6 2497.4      
565.9s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.5m     2497.4 2497.3      
565.9s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.5m     2497.3 2497.1      
565.9s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 3.5m     2497.1 2497.0      
565.9s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 3.3m     2497.0 2496.8      
565.9s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 3.6m     2496.8 2496.7      
565.9s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 3.4m     2496.7 2496.5      

14

Re: AHK: Копирование текста после определенной точки

lagetit
Игнорирование замечаний модератора и правил чреваты нехорошим исходом.
В инструментарии постов есть кнопки "Вставить ник" и "Ответить". Пользуйтесь.

15

Re: AHK: Копирование текста после определенной точки

lagetit, видимо я невнимательно читал. Что-ж, давайте немножко по-другому. Мне нужны всевозможные значения столбца "Area". Если я правильно понимаю, откуда этот лог, их должно быть не больше десяти. Заодно я смогу и решить проблему пробелов.

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

16 (изменено: lagetit, 2017-01-15 16:44:33)

Re: AHK: Копирование текста после определенной точки

belyankin12, есть возможность не выводить в path_write лог значение "player_corpse" из столбца target?
Список столбца "Area":

head
stomach
pelvis
hand
chest
arm
leg
foot
neck
chest

17 (изменено: belyankin12, 2017-01-15 16:44:25)

Re: AHK: Копирование текста после определенной точки

lagetit, есть два варианта: либо все значения столбца Ammo, либо все значения столбца Area, мне кажется вариантов второго меньше. У меня недостаточно опыта в этом выражении, чтобы указать, что в этом месте должны быть буквы (я пытался, но у меня возвращало вместо слова "Chest" "C t" только). Так ведь player_corpse не выводит.

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

18 (изменено: lagetit, 2017-01-15 16:56:00)

Re: AHK: Копирование текста после определенной точки

belyankin12, по сути значений столбца ammo всего 4, shotgunbullet;riflebullet;pistolbullet;shotgunslug. Нам необходимо построить таблицу также как она идет, тобишь с 1 строки и до конца т.к. значения "old_hp" и "new_hp" постоянно меняются, а нам из всего этого как раз их и нужно знать, это собственно то, ради чего все это делается.
player_corpse вывело из этого лога:

time    attacker target                   weapon                 ammo          area    distance old_hp new_hp info 
2975.9s player   you                      ak47u.entity           riflebullet   arm     8.6m     86.0   58.5        
2975.6s player   you                      ak47u.entity           riflebullet   leg     8.3m     58.5   34.1        
2972.7s you      player                   shotgun_pump.entity    shotgunslug   hand    2.5m     36.6   0.0         
2970.1s you      player                   shotgun_pump.entity    shotgunslug   chest   2.8m     4.0    0.0         
2905.2s you      player                   ak47u.entity           riflebullet   chest   38.6m    100.0  73.8        
2901.7s you      player                   ak47u.entity           riflebullet   leg     38.6m    72.7   49.4        
2900.1s player   you                      bolt_rifle.entity      riflebullet   head    47.3m    76.4   0.0         
2857.7s you      landmine                 ak47u.entity           riflebullet   generic 4.4m     100.0  50.0        
2857.5s you      landmine                 ak47u.entity           riflebullet   generic 6.2m     100.0  50.0        
2856.3s you      landmine                 ak47u.entity           riflebullet   generic 8.2m     50.0   0.0         
651.9s  you      wall.external.high.stone ak47u.entity           riflebullet   generic 37.0m    278.2  278.0       
651.0s  you      player                   ak47u.entity           riflebullet   chest   9.3m     33.1   5.6         
649.9s  you      player_corpse            ak47u.entity           riflebullet   generic 6.5m     100.0  100.0       
648.8s  you      player                   ak47u.entity           riflebullet   stomach 6.5m     4.9    0.0         
645.3s  you      player                   pistol_semiauto.entity pistolbullet  foot    4.2m     5.0    0.0         
600.4s  player   you                      ak47u.entity           riflebullet   stomach 100.8m   100.0  78.0        
566.0s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.6m     2498.6 2498.5      
566.0s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.5m     2498.5 2498.3      
566.0s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.6m     2498.3 2498.2      
566.0s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.9m     2498.2 2498.0      
566.0s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.4m     2498.0 2497.9      
566.0s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.6m     2497.9 2497.7      
566.0s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.6m     2497.7 2497.6      
566.0s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.5m     2497.6 2497.4      
565.9s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.5m     2497.4 2497.3      
565.9s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 2.5m     2497.3 2497.1      
565.9s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 3.5m     2497.1 2497.0      
565.9s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 3.3m     2497.0 2496.8      
565.9s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 3.6m     2496.8 2496.7      
565.9s  you      mining_quarry            shotgun_pump.entity    shotgunbullet generic 3.4m     2496.7 2496.5    

Вот то что получилось:

  foot    4.2m     5.0    0.0         
   stomach 6.5m     4.9    0.0         
   generic 6.5m     100.0  100.0       
   chest   9.3m     33.1   5.6         
   leg     38.6m    72.7   49.4        
   chest   38.6m    100.0  73.8

Это является значением player_corpse:

   generic 6.5m     100.0  100.0

19 (изменено: belyankin12, 2017-01-15 16:56:45)

Re: AHK: Копирование текста после определенной точки

lagetit, в столбце Ammo встречается и значение: "shotgunslug". Или же вам нужны только те четыре параметра? Насчёт player_corpse нашел ошибку, исправил.

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

20

Re: AHK: Копирование текста после определенной точки

belyankin12, выше уже писал про значение "shotgunslug". Можно добавлять, а можно и не добавлять, не так важно. Это уже на ваше усмотрение, если это слишком долго и мучительно делать, то думаю не стоит с этим заморачиваться.

21

Re: AHK: Копирование текста после определенной точки

lagetit, это дело нескольких секунд. Учитывая все вышеперечисленные требования, вот вам новый код:


path_read := A_ScriptDir "\Отсюда прочитаем.txt"
path_write := A_ScriptDir "\А сюда мы все запишем.txt"

	Loop
	{

	Loop, read, %path_read%
		 
		 if RegExMatch(A_LoopReadLine
        ,"(.*)you(.*)player (.*)(shotgunslug|riflebullet|shotgunbullet|pistolbullet)(.*)"
        , end_str)
		; 28.5s you      player shotgun_pump.entity    shotgunbullet stomach 30.6m    5.8    0.0         
        ; 15.2s you      player pistol_semiauto.entity pistolbullet  leg     16.1m    100.0  81.0      
      ; 649.9s  you      player_corpse            ak47u.entity           riflebullet   generic 6.5m     100.0  100.0    		
		if (end_str1 != "") {
		 FileAppend, %end_str5%`n, %path_write%
		} else {
		msgbox, error
		}
		break
	}
	
	return
Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

22 (изменено: lagetit, 2017-01-15 17:25:31)

Re: AHK: Копирование текста после определенной точки

belyankin12, Все отлично работает! Очень благодарен вам, огромное человеческое спасибо!
Возможно вы знаете как исходя из этого сделать GUI в который будет вставлен текст из лог файла, который мы получили? Но необходимо учесть что GUI должно будет постоянно обновляться т.к. будет постоянная подгрузка из лог файла.

23

Re: AHK: Копирование текста после определенной точки

Я подумаю над этим, у меня есть пару набросок, но займусь ими я позже. Учтите: упор будет только на информативность, а не на красоту. Кроме того обновление GUI будет идти по нажатию кнопки, а не автоматически. Если вас такое не устроит, то попросите помощи у других пользователей.

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

24

Re: AHK: Копирование текста после определенной точки

belyankin12, мне и нужен упор на информативность! Спасибо.

25 (изменено: belyankin12, 2017-01-15 20:32:09)

Re: AHK: Копирование текста после определенной точки

Готово. Вот код, просто уберите из моего кода в конце return и допишите его ниже.


FileRead, text, %path_write%
	
Gui, Add, Edit, x12 y10 w450 h490 ReadOnly , %text%
Gui, Add, Button, x12 y510 w190 h60 gClose, Закрыть
Gui, Add, Button, x212 y510 w250 h60 gRefresh, Обновить
Gui, Show, x823 y115 h591 w479, Log
Return

GuiClose:
ExitApp
			
Close:
ExitApp
return

Refresh:
Reload
return

При нажатии кнопки "Обновить" скрипт производит перезапуск, заново читая логи и выводя строчки в Gui. Протестировал на 8000 строчек (дальше лень было) - работает. Есть один минус: текст при появлении Gui выделяется почему-то.

Разные надписи, размеры окон и прочее, уже добавите по своему вкусу.

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