Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Создание txt файла в каталоге с текстом из названия папки

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
doommyyy



Joined: 11 Jan 2019
Posts: 7

Post (Separately) Posted: Fri Jan 11, 2019 22:39    Post subject: Создание txt файла в каталоге с текстом из названия папки Reply with quote

Здравствуйте.

Такой вопрос.
Есть много папок с именами вида:
    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)

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

Автоматизация сэкономит просто тонну времени, помогите пожалуйста с этим вопросом.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Jan 12, 2019 04:22    Post subject: Reply with quote

doommyyy wrote:
Есть много папок
Где в рамках ТС эти папки?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
doommyyy



Joined: 11 Jan 2019
Posts: 7

Post (Separately) Posted: Sat Jan 12, 2019 07:09    Post subject: Reply with quote

На локальном компьютере. Или в каком смысле где?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Jan 12, 2019 07:35    Post subject: Reply with quote

Я написал "в рамках ТС". Как запрос относится к Total Commander? При чём тут локальный компьютер?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
doommyyy



Joined: 11 Jan 2019
Posts: 7

Post (Separately) Posted: Sat Jan 12, 2019 07:45    Post subject: Reply with quote

Если честно, то не понял вопрос. В рамках ТС, в левом окне, допустим)
Если опять не то написал, уточните пожалуйста подробней, т.к. я в ТС не эксперт и не понимаю с полуслова.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Jan 12, 2019 07:55    Post subject: Reply with quote

doommyyy wrote:
в левом окне, допустим)
Не окне, а файловой панели. Что должно находиться в этой панели? И каков ваш предварительный алгоритм действий в ней?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
doommyyy



Joined: 11 Jan 2019
Posts: 7

Post (Separately) Posted: Sat Jan 12, 2019 08:29    Post subject: Reply with quote

Предварительных действий нет. Каталог с файлами уже есть и все чем занимаюсь, это созданием 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к).

Все названия папок однотипные, т.е. всегда перед первым тире есть имена разделенные запятой (или одно имя и запятых нет).
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Jan 12, 2019 08:41    Post subject: Reply with quote

doommyyy wrote:
Предварительных действий нет.
А это что?:
doommyyy wrote:
Открываю каталог в левой файловой панели.
Выделяю папку
Остальное я не спрашивал.
Обязательно UTF-8? UTF-16 пойдёт?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
doommyyy



Joined: 11 Jan 2019
Posts: 7

Post (Separately) Posted: Sat Jan 12, 2019 09:23    Post subject: Reply with quote

Да, обязательно UTF-8
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Jan 12, 2019 09:25    Post subject: Reply with quote

А можно поинтересоваться зачем? Просто с 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,_
" Переименовать папки и создать в них списки       "
См. памятку раздела.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.


Last edited by Flasher on Sat Jan 12, 2019 11:52; edited 3 times in total
Back to top
View user's profile Send private message
doommyyy



Joined: 11 Jan 2019
Posts: 7

Post (Separately) Posted: Sat Jan 12, 2019 11:00    Post subject: Reply with quote

Задача не одноразовая, но не очень часто возникающая. Обычно данных меньше (до 600 папок), но сейчас их очень много получилось.

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

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

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

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

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

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

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

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

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

Индекс выходит за пределы допустимого диапазона.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Jan 12, 2019 11:33    Post subject: Reply with quote

doommyyy wrote:
Имена в названии папки всегда ... стоят перед первым тире.
Значит, не всегда. Ищите папки без ' - '.
Добавил в код условие, чтобы такие игнорировать.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
doommyyy



Joined: 11 Jan 2019
Posts: 7

Post (Separately) Posted: Sat Jan 12, 2019 11:41    Post subject: Reply with quote

Да нашел проблему. В паре папок не было пробела перед '-'.
Поправил и сработало. Большое спасибо!

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

Без этого условия оставлю, очень полезно на самом деле, если скрипт будет чекать косячные папки))
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Jan 12, 2019 11:55    Post subject: Reply with quote

По одной "чекать"? Добавил, чтобы "косячные" в инфоокне отобразились.
Пож-та.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group