Страница 1 из 1
Создание txt файла в каталоге с текстом из названия папки
Добавлено: Пт янв 11, 2019 21:39
doommyyy
Здравствуйте.
Такой вопрос.
Есть много папок с именами вида:
- Name Surname - Film title
Name Surname, Name2 Surname2 - Film title2
Name Surname, Name2 Surname2, Name3 Surname3 - Film title3
Главные актеры и название фильма (для ясности).
Как автоматизировать создание txt файла (actors.txt) в каждой папке содержащий имена актеров (в UTF-8) в случае если их больше одного в названии папки? И (если возможно) последующем удалении всех имен из названия папки кроме первого имени.
Например:
- Name Surname - Film title (txt не требуется)
Name Surname, Name2 Surname2 - Film title2 (actors.txt, содержимое Name Surname, Name2 Surname2. Папка переименовывается в Name Surname - Film title2)
Name Surname, Name2 Surname2, Name3 Surname3 - Film title3 (actors.txt, содержимое Name Surname, Name2 Surname2, Name3 Surname3. Папка переименовывается в Name Surname - Film title3)
Имена в названии папки всегда разделяются запятой и стоят перед
первым тире.
Автоматизация сэкономит просто тонну времени, помогите пожалуйста с этим вопросом.
Добавлено: Сб янв 12, 2019 03:22
Flasher
doommyyy писал(а):Есть много папок
Где в рамках ТС эти папки?
Добавлено: Сб янв 12, 2019 06:09
doommyyy
На локальном компьютере. Или в каком смысле где?
Добавлено: Сб янв 12, 2019 06:35
Flasher
Я написал "в рамках ТС". Как запрос относится к Total Commander? При чём тут локальный компьютер?
Добавлено: Сб янв 12, 2019 06:45
doommyyy
Если честно, то не понял вопрос. В рамках ТС, в левом окне, допустим)
Если опять не то написал, уточните пожалуйста подробней, т.к. я в ТС не эксперт и не понимаю с полуслова.
Добавлено: Сб янв 12, 2019 06:55
Flasher
doommyyy писал(а):в левом окне, допустим)
Не окне, а файловой панели. Что должно находиться в этой панели? И каков ваш предварительный алгоритм действий в ней?
Добавлено: Сб янв 12, 2019 07:29
doommyyy
Предварительных действий нет. Каталог с файлами уже есть и все чем занимаюсь, это созданием txt файлов в каждой папке.
Полный алгоритм действий:
Открываю каталог в левой файловой панели. В ней много папок вида:
Name Surname - Film title
Name Surname, Name2 Surname2 - Film title2
Name Surname, Name2 Surname2, Name3 Surname3 - Film title3
Выделяю папку "Name Surname, Name2 Surname2 - Film title2"
Переименовать > копирую "Name Surname, Name2 Surname2" > удаляю ", Name2 Surname2" = получается папка Name Surname - Film title2
Захожу внутрь > создать actors.txt > Вставить из буфера Name Surname, Name2 Surname2 > сохранить.
Потом следующую папку где больше одного имени - "Name Surname, Name2 Surname2, Name3 Surname3 - Film title3"
Name Surname - Film title3 > actors.txt c "Name Surname, Name2 Surname2, Name3 Surname3"
и т.д. до бесконечности (папок около 18к).
Все названия папок однотипные, т.е. всегда перед первым тире есть имена разделенные запятой (или одно имя и запятых нет).
Добавлено: Сб янв 12, 2019 07:41
Flasher
doommyyy писал(а):Предварительных действий нет.
А это что?:
doommyyy писал(а):Открываю каталог в левой файловой панели.
Выделяю папку
Остальное я не спрашивал.
Обязательно UTF-8? UTF-16 пойдёт?
Добавлено: Сб янв 12, 2019 08:23
doommyyy
Да, обязательно UTF-8
Добавлено: Сб янв 12, 2019 08:25
Flasher
А можно поинтересоваться зачем? Просто с UTF-16 ваша задача (я так понимаю, одноразовая) вполне осуществима в несколько действий силами ТС.
В любом случае пересохранить в редакторе в другой кодировке не должно явиться проблемой.
Рассказываю как.
1) По маске
<^[^-]*, (Num+) выделить нужные папки и сохранить выделение в файл из гл. меню или из комстроки по
cm_SaveSelectionToFileW.
После открыть список в редакторе с поддержкой регулярных выражений, в инструменте поиска и замены в поле поиска прописать
' - .*' (без апострофов), отметить опцию Рег. выраж. и выполнить. Список пересохранить в UTF-8.
doommyyy писал(а):создание txt файла (actors.txt) в каждой папке
Хотя стоп. Для каждой нужно поделить список построчно. Чуть позже на это отвечу.
2) Восстановить выделение в панели клавишей [/], вызвать ИГП (Ctrl+M):
Найти:
'[^,],.*-'
Заменить на:
' -'
☑ Рег. Выраж. (только)
Посмотреть на предварительные результаты в диалоге и подтвердить по Enter.
В общем, вот код:
Код: Выделить всё
'============================= VBS =============================
' Убрать в именах папок активного каталога не первые антропонимы
' до знака - и создать в них строчные списки всех исходных имён
' Условие: Путь запуска — пустой
'===============================================================
Set Stm = CreateObject("ADODB.Stream")
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each Fd In FSO.GetFolder(FSO.GetAbsolutePathName("")).SubFolders
If InStr(Fd.Name, " -") Then
Arr = Split(Fd.Name, " -") : LName = Arr(0)
If InStr(LName, ",") Then
Fd.Name = Left(LName, InStr(LName, ",") - 1) & " -" & Arr(1)
With Stm
.Open : .Type = 2 : .CharSet = "UTF-8" : .WriteText Arr(0)
.SaveToFile Fd.Path & "\actors.txt", 2 : .Close
End With
End If
Else Errs = Errs & vbCr & Fd.Name
End If
Next
Set Stm = Nothing : Set FSO = Nothing
MsgBox Space(16) & "Выполнено!" & Errs, 4160,_
" Переименовать папки и создать в них списки "
См. памятку раздела.
Добавлено: Сб янв 12, 2019 10:19
doommyyy
Задача не одноразовая, но не очень часто возникающая. Обычно данных меньше (до 600 папок), но сейчас их очень много получилось.
Результаты (название папки, txt документ и еще некоторые другие вещи) обрабатываются на сервере и парсятся в БД для последующей публикации на сайте. Парсер понимает UTF-8 только.
Я тут привел пример актеров и фильмов (для простоты и наглядности), но кроме них есть связки игры - жанры, сериалы - актеры, актеры - биографии и т.д.
Пересохранить в UTF-8 не проблема, действительно. В notepad++ можно быстро сделать.
По вашей инструкции все сделал и получился текстовый файл в котором есть все имена. А нужно чтобы имена сохранялись в каждой папке.
Т.е. каждая папка где больше одного имени имеет txt файл с перечислением этих имен.
UPD
Увидел код, попробую.
Добавлено спустя 12 минут:
Огромное спасибо. Получилось.
Добавлено спустя 8 минут:
Попробовал для теста на нескольких папках, сработало.
А когда полный каталог попытался обработать, то выдало ошибку
https://yadi.sk/i/olmFNI_tHl_F4g
Индекс выходит за пределы допустимого диапазона.
Добавлено: Сб янв 12, 2019 10:33
Flasher
doommyyy писал(а):Имена в названии папки всегда ... стоят перед первым тире.
Значит, не всегда. Ищите папки без ' - '.
Добавил в код условие, чтобы такие игнорировать.
Добавлено: Сб янв 12, 2019 10:41
doommyyy
Да нашел проблему. В паре папок не было пробела перед '-'.
Поправил и сработало. Большое спасибо!
Добавил в код условие, чтобы такие игнорировать.
Без этого условия оставлю, очень полезно на самом деле, если скрипт будет чекать косячные папки))
Добавлено: Сб янв 12, 2019 10:55
Flasher
По одной "чекать"? Добавил, чтобы "косячные" в инфоокне отобразились.
Пож-та.