Что нового

[Данные, строки] Поиск строчек текста и сохранение их в отдельный файл

Tosyk

Новичок
Сообщения
159
Репутация
0
Есть заданный файл, открыв его в HEX вижу по нему разбросаны имена и пути файлов .paa, .rvmat, а так же файлы без расширения, но с путём.
Нужно скриптом из заданного файла (ссылка на архив) вытащить имена и пути файлов .paa, .rvmat и тех строчек с именем файла без расширения и путём к нему в текстовый файл списком с таким же именем рядом с заданным файлом? Далее по именам файлов из этого списка найти файлы по заданному пути рекурсивно и скопировать в папку к заданному файлу.

пример. есть в файле (SOURCE_NAME.p3d) такие строчки:


1. нужно первым скриптом эти строчки вытащить в список в отдельный файл (SOURCE_NAME.txt):
Код:
...

ca\characters2\usmc\data\sf_gear2_co.paa.
ca\characters2\usmc\data\sf_gear_coyote_co.paa.
ca\characters2\usmc\data\specialforces_1_co.paa.
ca\characters2\usmc\data\specialforces_1_mpt_co.paa.
ca\characters\heads\male\ohara\data\ohara_hhl_co.paa
ca\characters2\usmc\data\fr_heavy_gear.rvmat

ca\characters2\usmc\data\sf_gear_khaky_nohq.paa
ca\characters2\usmc\data\rodriguez_mc.paa
ca\characters2\usmc\data\fr_heavy_as.paa
ca\characters2\usmc\data\sf_gear_smdi.paa
ca\data\env_land_co.paa

и т.д.
2. Далее вторым скриптом найти физически на жёстком диске в указанной папке эти файлы и скопировать их в папку к SOURCE_NAME.p3d

p.s.: Пытался найти информации о том как это сделать в cmd, но ничего подобного не нашёл.

Буду очень благодарен за помощь!
 

hedji

Продвинутый
Сообщения
400
Репутация
82
1)
Код:
#include <File.au3>

$filearray = FileReadToArray("FR_CO.p3d")

For $str In $filearray
	$check = StringRegExp($str, "ca.*?\.paa", 3)
	if IsArray($check) Then
		For $i In $check
			FileWriteLine("SOURCE_NAME.txt", $i)
		Next
	EndIf
Next


2)
Код:
#include <File.au3>

$files = FileReadToArray("SOURCE_NAME.txt")

For $file In $files
	FileCopy($file, "C:\SOURCE_NAME\*.*")
Next
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
159
Репутация
0
hedji сказал(а):
1)
Код:
#include <File.au3>

$filearray = FileReadToArray("FR_CO.p3d")

For $str In $filearray
	$check = StringRegExp($str, "ca.*?\.paa", 3)
	if IsArray($check) Then
		For $i In $check
			FileWriteLine("SOURCE_NAME.txt", $i)
		Next
	EndIf
Next


2)
Код:
#include <File.au3>

$files = FileReadToArray("SOURCE_NAME.txt")

For $file In $files
	FileCopy($file, "C:\SOURCE_NAME\*.*")
Next
Большое спасибо, hedji!

Я скомпилировал оба скрипта в exe и в дальнейшем хочу использовать именно скомпилированные версии этих скриптов
Вроде с первым файлом получается, но второй скрипт не знаю как использовать — при запуске ничего не происходит; т.е. даже если я пропишу в скрипте путь к папке к файлам, которые записались в SOURCE_NAME.txt скрипт всё равно не будет ничего искать и копировать. Можете мне помочь сделать так, чтобы процессы запускались перетаскиванием нужных файлов на скрипты?

Ещё раз спасибо.
 

hedji

Продвинутый
Сообщения
400
Репутация
82
Проблема в указанных в файле путях, вида ca\characters2\usmc\data\sf_gear2_co.paa
Если я правильно понял выдачу гугла, это файл 3d моделей для Arma2, как именно он должен работать - мне неизвестно.
Как минимум в пути файла должна быть указана буква диска C:\ или D:\, возможно, что в файле содержаться относительные пути и указывать необходимо C:\путь_до_папки_с_игрой\ca\characters2\usmc\data\sf_gear2_co.paa.
Попробуйте найти вручную один из файлов *.paa, посмотрите, где он расположен, если он вообще есть на диске.
Измените в коде
Код:
FileWriteLine("SOURCE_NAME.txt", "C:\путь_до_папки_с_игрой\" & $i)

Для тестирования 2го скрипта укажите в файле SOURCE_NAME.txt вручную пару-тройку файлов, которые точно есть на диске.
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
159
Репутация
0
hedji сказал(а):
Проблема в указанных в файле путях, вида ca\characters2\usmc\data\sf_gear2_co.paa
Если я правильно понял выдачу гугла, это файл 3d моделей для Arma2, как именно он должен работать - мне неизвестно.
Как минимум в пути файла должна быть указана буква диска C:\ или D:\, возможно, что в файле содержаться относительные пути и указывать необходимо C:\путь_до_папки_с_игрой\ca\characters2\usmc\data\sf_gear2_co.paa.
вы всё правильно говорите, но проблема в том, что файлы могут находиться где угодно в папке с игрой, может быть в архиве — даже если внутри p3d записан путь к файлу то в реальности такие пути и файлы могу регулироваться скриптами или логикой игры. Поэтому не стоит рассчитывать, что пути будет правильные — я рассчитывал больше на само имя файла, а путь начинающийся с "ca\" был как-бы дополнительной информацией.
hedji сказал(а):
Попробуйте найти вручную один из файлов *.paa, посмотрите, где он расположен, если он вообще есть на диске.
Измените в коде
Код:
FileWriteLine("SOURCE_NAME.txt", "C:\путь_до_папки_с_игрой\" & $i)

Для тестирования 2го скрипта укажите в файле SOURCE_NAME.txt вручную пару-тройку файлов, которые точно есть на диске.
не изменяя первого скрипта, я вписал в SOURCE_NAME.txt имя одного файла и полный путь к этому файлу во втором скрипте. Скрипт ничего не нашёл.

код получился вот такой:

Код:
#include <File.au3>

$files = FileReadToArray("SOURCE_NAME.txt")

For $file In $files
    FileCopy($file, "D:\games\arma2\weapons\_new_arrowhead_weapons_WORK\_done\colt_m4a1_carbine_1997\textures\*.*")
Next


Содержимое SOURCE_NAME.txt файла:

Код:
m4.rvmat
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
159
Репутация
0
hedji, поможете дальше разобраться?
 
Верх