Создание txt файла в каталоге с текстом из названия папки
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Автоматизация Total Commander

#1: Создание txt файла в каталоге с текстом из названия папки Author: doommyyy PostPosted: Fri Jan 11, 2019 22:39
    —
Здравствуйте.

Такой вопрос.
Есть много папок с именами вида:

Главные актеры и название фильма (для ясности).

Как автоматизировать создание txt файла (actors.txt) в каждой папке содержащий имена актеров (в UTF-8) в случае если их больше одного в названии папки? И (если возможно) последующем удалении всех имен из названия папки кроме первого имени.

Например:

Имена в названии папки всегда разделяются запятой и стоят перед первым тире.

Автоматизация сэкономит просто тонну времени, помогите пожалуйста с этим вопросом.

#2:  Author: FlasherLocation: Москва PostPosted: Sat Jan 12, 2019 04:22
    —
doommyyy wrote:
Есть много папок
Где в рамках ТС эти папки?

#3:  Author: doommyyy PostPosted: Sat Jan 12, 2019 07:09
    —
На локальном компьютере. Или в каком смысле где?

#4:  Author: FlasherLocation: Москва PostPosted: Sat Jan 12, 2019 07:35
    —
Я написал "в рамках ТС". Как запрос относится к Total Commander? При чём тут локальный компьютер?

#5:  Author: doommyyy PostPosted: Sat Jan 12, 2019 07:45
    —
Если честно, то не понял вопрос. В рамках ТС, в левом окне, допустим)
Если опять не то написал, уточните пожалуйста подробней, т.к. я в ТС не эксперт и не понимаю с полуслова.

#6:  Author: FlasherLocation: Москва PostPosted: Sat Jan 12, 2019 07:55
    —
doommyyy wrote:
в левом окне, допустим)
Не окне, а файловой панели. Что должно находиться в этой панели? И каков ваш предварительный алгоритм действий в ней?

#7:  Author: doommyyy PostPosted: Sat Jan 12, 2019 08:29
    —
Предварительных действий нет. Каталог с файлами уже есть и все чем занимаюсь, это созданием 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к).

Все названия папок однотипные, т.е. всегда перед первым тире есть имена разделенные запятой (или одно имя и запятых нет).

#8:  Author: FlasherLocation: Москва PostPosted: Sat Jan 12, 2019 08:41
    —
doommyyy wrote:
Предварительных действий нет.
А это что?:
doommyyy wrote:
Открываю каталог в левой файловой панели.
Выделяю папку
Остальное я не спрашивал.
Обязательно UTF-8? UTF-16 пойдёт?

#9:  Author: doommyyy PostPosted: Sat Jan 12, 2019 09:23
    —
Да, обязательно UTF-8

#10:  Author: FlasherLocation: Москва PostPosted: Sat Jan 12, 2019 09:25
    —
А можно поинтересоваться зачем? Просто с UTF-16 ваша задача (я так понимаю, одноразовая) вполне осуществима в несколько действий силами ТС.
В любом случае пересохранить в редакторе в другой кодировке не должно явиться проблемой.
Рассказываю как.
1) По маске <^[^-]*, (Num+) выделить нужные папки и сохранить выделение в файл из гл. меню или из комстроки по cm_SaveSelectionToFileW.
После открыть список в редакторе с поддержкой регулярных выражений, в инструменте поиска и замены в поле поиска прописать ' - .*' (без апострофов), отметить опцию Рег. выраж. и выполнить. Список пересохранить в UTF-8.
doommyyy wrote:
создание txt файла (actors.txt) в каждой папке
Хотя стоп. Для каждой нужно поделить список построчно. Чуть позже на это отвечу.

2) Восстановить выделение в панели клавишей [/], вызвать ИГП (Ctrl+M):
Найти: '[^,],.*-'
Заменить на: ' -'
☑ Рег. Выраж. (только)
Посмотреть на предварительные результаты в диалоге и подтвердить по Enter.

В общем, вот код:
Code:
'============================= 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,_
" Переименовать папки и создать в них списки       "
См. памятку раздела.

Last edited by Flasher on Sat Jan 12, 2019 11:52; edited 3 times in total

#11:  Author: doommyyy PostPosted: Sat Jan 12, 2019 11:00
    —
Задача не одноразовая, но не очень часто возникающая. Обычно данных меньше (до 600 папок), но сейчас их очень много получилось.

Результаты (название папки, txt документ и еще некоторые другие вещи) обрабатываются на сервере и парсятся в БД для последующей публикации на сайте. Парсер понимает UTF-8 только.

Я тут привел пример актеров и фильмов (для простоты и наглядности), но кроме них есть связки игры - жанры, сериалы - актеры, актеры - биографии и т.д.

Пересохранить в UTF-8 не проблема, действительно. В notepad++ можно быстро сделать.
По вашей инструкции все сделал и получился текстовый файл в котором есть все имена. А нужно чтобы имена сохранялись в каждой папке.

Т.е. каждая папка где больше одного имени имеет txt файл с перечислением этих имен.

UPD
Увидел код, попробую.

Добавлено спустя 12 минут:

Огромное спасибо. Получилось.

Добавлено спустя 8 минут:

Попробовал для теста на нескольких папках, сработало.
А когда полный каталог попытался обработать, то выдало ошибку https://yadi.sk/i/olmFNI_tHl_F4g

Индекс выходит за пределы допустимого диапазона.

#12:  Author: FlasherLocation: Москва PostPosted: Sat Jan 12, 2019 11:33
    —
doommyyy wrote:
Имена в названии папки всегда ... стоят перед первым тире.
Значит, не всегда. Ищите папки без ' - '.
Добавил в код условие, чтобы такие игнорировать.

#13:  Author: doommyyy PostPosted: Sat Jan 12, 2019 11:41
    —
Да нашел проблему. В паре папок не было пробела перед '-'.
Поправил и сработало. Большое спасибо!

Quote:
Добавил в код условие, чтобы такие игнорировать.

Без этого условия оставлю, очень полезно на самом деле, если скрипт будет чекать косячные папки))

#14:  Author: FlasherLocation: Москва PostPosted: Sat Jan 12, 2019 11:55
    —
По одной "чекать"? Добавил, чтобы "косячные" в инфоокне отобразились.
Пож-та.



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group