Страница 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
По одной "чекать"? Добавил, чтобы "косячные" в инфоокне отобразились.
Пож-та.