Умное переименование составных имён файлов\папок
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2  Next  :| |:
Total Commander -> Секреты и советы

#1: Умное переименование составных имён файлов\папок Author: Andrey_ALocation: Сочи PostPosted: Fri Sep 17, 2010 01:30
    —
Недавно столкнулся с такой задачей - переименование файлов типа
datatimegettimezoneinfo... должно было получаться DataTimeGetTimeZoneInfo - пытался обычными способами в групповом переименовании в окошках найти\заменить прописывать, но строка ограничена 1024 символоми, а нужных замен оказалось многовато. Было много всяких попыток, пока случайно не наткнулся на плагин Translit, хотя он для кодировок, но в этой задаче тоже справился на ура. Может это и не секрет, но я думаю, что кому-то это поможет решить не только эту задачу.
В файле ReName.ttb в секции [Symbols] прописывается
data=Data
time=Time
get=Get
zone=Zone
info=Info
...
в инструменте группового переименования вызывается плагин и этот файл. В расширении можно указать [L][E1][n][E2-] и всё!

#2:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Sep 17, 2010 11:24
    —
Интересный способ решения проблемы. Да, иногда бывает желание переименовать файлы, чтобы дать им красивые имена, не изменяя их с точностью до регистра символов.

#3:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Fri Sep 17, 2010 11:38
    —
Эх, прикрутить бы еще к этому делу словарик какой, чтобы сам слова отделял Rolling Eyes

#4:  Author: Samwatas PostPosted: Sat Sep 18, 2010 11:30
    —
Вахмурка wrote:
Эх, прикрутить бы еще к этому делу словарик какой, чтобы сам слова отделял :roll:

А что мешает регэкспами Букву в Верхнем Регистре заменить на пробел плюс эту же букву.

#5:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Sat Sep 18, 2010 12:26
    —
Samwatas wrote:
А что мешает регэкспами Букву в Верхнем Регистре заменить на пробел плюс эту же букву
Мешает сущая мелочь - постановка задачи:
Quote:
переименование файлов типа datatimegettimezoneinfo

#6:  Author: Samwatas PostPosted: Sat Sep 18, 2010 17:42
    —
Я просто неправильно понял. Я думал, что после переименования в DataTimeGetTimeZoneInfo нужно разделить слова пробелами.

#7:  Author: Andrey_ALocation: Сочи PostPosted: Sat Sep 18, 2010 18:28
    —
Quote:
Эх, прикрутить бы еще к этому делу словарик

В задаче которая была у меня файлов было немного. Задался целью внести в файлик распространённые замены (file=File, list=List) - вручную прописывать ну уж больно долго. Помогите пожалуйста.
Я вывожу список имён файлов в редактор. Т.к. ряд файлов уже имеют встроенные имена начинающиеся с верхнего регистра, то необходимо их вытащить
1. Как сделать так (наверно с помощью рег.выраж.), чтобы остались только те имена, которые в середине имеют хотя бы один символ в верхнем регистре и , т.е. из имён

LogViewer
Icons
TotalCom
colors

должны остаться только LogViewer и TotalCom

2. и после этого отделить друг от друга, должно получиться
Log
Viewer
Total
Com

#8:  Author: Samwatas PostPosted: Sat Sep 18, 2010 18:40
    —
Я бы на вашем месте начинал бы учить какой-нибудь скриптовый язык (Автоит - это самый подходящий вариант, на мой взгляд). Поскольку у вас часто возникают задачи, которые требуют написания скриптов, то знания того же Автоита (или другого языка) ускорило бы решение таких задач (то есть вместо ожидания решения на форуме, можно быстрее решить самому).

#9:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Sep 18, 2010 19:00
    —
Для начала бы выучить regex. Итак, всё делалось в EmEditor.

Для удаления строчек, которые не содержат больших букв, делаем замену (?-i)^[^A-Z]*$(\r\n)? на пустую строку. При этом будет удален и разрыв строки после каждой строкой без больших букв, если он там есть.

Заменяем (?-i)([A-Z]+) на \L\r\n\1 - так мы найдем все последовательности из больших букв, перенесем их на новую строку и заменим их на маленькие (почему-то без знака + после [A-Z] у меня EmEditor отказался правильно выполнять замену; в принципе можно вместо + написать {1} - тогда каждая большая буква будет на новую строчку переноситься и становиться маленькой). В результате ты получишь:
Code:
log
viewer
icons
total
com

#10:  Author: Tol!kLocation: Арзамас PostPosted: Sat Sep 18, 2010 19:38
    —
Andrey_A wrote:
1. Как сделать так (наверно с помощью рег.выраж.), чтобы остались только те имена, которые в середине имеют хотя бы один символ в верхнем регистре и , т.е. из имён
LogViewer
Icons
TotalCom
colors
должны остаться только LogViewer и TotalCom
Code:
sed -n /[A-Z].*[A-Z]/p list.txt > 2_Up.txt


Andrey_A wrote:
2. и после этого отделить друг от друга, должно получиться
Log
Viewer
Total
Com
Code:
sed -r -n s/([A-Z][a-z]*)/\1\n/p 2_Up.txt > split.txt

проверено на данных примерах с GNU sed version 4.2
и super-sed version 3.62 based on GNU sed version 4.1

#11:  Author: Andrey_ALocation: Сочи PostPosted: Sat Sep 18, 2010 20:36
    —
Samwatas wrote:
Я бы на вашем месте начинал бы учить какой-нибудь скриптовый язык

Я бы на вашем месте научился внимательно читать, и давать информацию, помогающую решению задачи, и не заниматься нравоучениями. Если бы все всё знали, то можно было бы закрывать форум.

Что касается темы. Спасибо за дельные советы - помогло. Столкнулся с проблемой ограничения секции - примерно 28588 символов.
Для корректного распознавания приходится писать дважды одно и тоже имя, т.к. есть уже такие имена в файлах:
file=File
File=File
поэтому файл увеличился. И ещё прописывать надо сначала длинные имена, затем короткие.
Об ограничении сообщил автору в личку, а там посмотрим
Но факт, что плагин работает отлично при том что в файле примерно 2700
строк с поиском и заменой. Почти не тормозит. Поэтому ждем ответа - конечно было бы отлично подключить словарик из часто употребляемых имён в файлах

#12:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Sep 18, 2010 21:05
    —
А если разбить общее множество слов на несколько ttb-файлов, чтоб каждый содержал часть слов (например, по 2700 строк), и потом в мультипереименователе просто применить таблицы одну за другой? Тогда все слова, содержащиеся во всех таблицах, будут обработаны - специфика задачи такова, что они друг другу мешать не будут. Да, это требует чуть больше действий, зато результат будет уже сейчас.

#13:  Author: Andrey_ALocation: Сочи PostPosted: Sat Sep 18, 2010 21:31
    —
Quote:
применить таблицы одну за другой


Это я пробовал ещё вчера - просто получается удвоение имени и каждый файл переименовывает своё

[=translit.(USR) ReName_1][=translit.(USR) NameRe_2]

итогo:

ArhiveTArPlusArHiveTarPlUs.vbs

а файл был:

arhivetarplus.vbs

может я как-то не так прописатл

#14:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Sep 18, 2010 21:54
    —
Не так. Сделать несколько операций переименования. Вначале в качестве имени указать [=translit.(USR) ReName_1], переименовать файлы, затем загрузить только что переименованные файлы в переименователь (кнопочка с изогнутой стрелочкой слева от кнопки запуска переименования) и указать в качестве имени [=translit.(USR) ReName_2], и так для каждой таблицы.

Кстати, вижу, что есть проблемы, если одно слово является частью другого - например, слова Hive и Archive - тогда в результате получается ArcHive. Получается, в последней таблице нужна еще строка ArcHive=Archive, которая будет исправлять подобные артефакты.

#15: По умолчанию. Author: fadetobackLocation: Kharkov, Ukraine PostPosted: Sun Oct 31, 2010 18:31
    —
Скажите как сделать так, чтобы при открытии группового переименования файлов в ниспадающем списке выбора "Верхнего/нижнего регистра" переименования вместо "Без изменения", всегда при открытии было установлено "все строчные".



Total Commander -> Секреты и советы


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

Goto page 1, 2  Next  :| |:
Page 1 of 2

Powered by phpBB © 2001, 2005 phpBB Group