Автор Тема: [Данные, строки] Поиск строчек текста и сохранение их в отдельный файл  (Прочитано 828 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Tosyk [?]

  • Новичок
  • *
  • Сообщений: 66
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.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, но ничего подобного не нашёл.

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

Русское сообщество AutoIt


Оффлайн hedji [?]

  • Новичок
  • *
  • Сообщений: 67
  • Репутация: 9
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
1)
Код: AutoIt [Выделить]
#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)
Код: AutoIt [Выделить]
#include <File.au3>

$files = FileReadToArray("SOURCE_NAME.txt")

For $file In $files
    FileCopy($file, "C:\SOURCE_NAME\*.*")
Next
 

« Последнее редактирование: Ноябрь 24, 2016, 17:28:31 от hedji »

Оффлайн Tosyk [?]

  • Новичок
  • *
  • Сообщений: 66

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
1)
Код: AutoIt [Выделить]
#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)
Код: AutoIt [Выделить]
#include <File.au3>

$files = FileReadToArray("SOURCE_NAME.txt")

For $file In $files
    FileCopy($file, "C:\SOURCE_NAME\*.*")
Next
 

Большое спасибо, hedji!

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

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

Оффлайн hedji [?]

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

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

Русское сообщество AutoIt


Оффлайн Tosyk [?]

  • Новичок
  • *
  • Сообщений: 66

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

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

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

Код: AutoIt [Выделить]
#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 [?]

  • Новичок
  • *
  • Сообщений: 66

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
hedji, поможете дальше разобраться?

Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
5 Ответов
12956 Просмотров
Последний ответ Декабрь 05, 2012, 16:40:30
от AZJIO
25 Ответов
8307 Просмотров
Последний ответ Февраль 13, 2011, 00:30:43
от CreatoR
3 Ответов
1855 Просмотров
Последний ответ Май 22, 2011, 00:25:42
от Centrinar
4 Ответов
4085 Просмотров
Последний ответ Декабрь 06, 2012, 15:56:48
от vaf
17 Ответов
6718 Просмотров
Последний ответ Май 16, 2014, 15:18:37
от bcxtim
5 Ответов
3524 Просмотров
Последний ответ Ноябрь 23, 2015, 15:37:30
от exHalfer
8 Ответов
3359 Просмотров
Последний ответ Ноябрь 02, 2013, 13:45:46
от Redcut
0 Ответов
602 Просмотров
Последний ответ Май 23, 2014, 15:19:03
от madmasles
6 Ответов
1045 Просмотров
Последний ответ Август 23, 2016, 21:50:54
от ra4o
0 Ответов
579 Просмотров
Последний ответ Сентябрь 07, 2016, 07:19:25
от atrade06