|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Переименование множества файлов MS Word по контексту
Имеется ну очень много вордовских документов с именами без всякой системы, а хочется это дело систематизировать. Эпизодически я это делал открывая документ, вычитывая часть текста содержащее номер и дату и пересохранял по этим данным. Сей мартышкин труд меня основательно достал и потому написал небольшую утилитку которая все это делает сама. Вроде бы - вот оно счастье Но утилитка работает удручающе медленно ибо подключается к каждому документу через OLE ищет по регулярке нужные значения, сохраняет файл и по кругу.
Итак перехожу к вопросам. Есть ли более быстрый способ делать тоже самое? Если нет, то имеет ли смысл заморачиваться с потоками, что явно предполагает сильную загрузку памяти копиями ворда и не факт, что будет надежно работать при этом. Или я вообще не в ту степь пошел? Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#2
|
|||
|
|||
Может, если переписать это дело как макрос Ворда, будет быстрее?
Один вордовский экземпляр - поочередно открывает документы и переименовывает |
#3
|
||||
|
||||
Да тоже самое наврное можно будет делать и в Дельфи, если не создавать новый, а подключаться к существующему. Но что-то мне подсказывает, что тут должны быть какие-то грабли. Но попробую, это хоть переделки серьезной не потребует.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#4
|
||||
|
||||
Переделал под одну копию ворда. Скорость все равно не супер, но уже намного лучше. Попробовал грузить сразу все документы в эту одну копию, еще быстрее получается, но вот пауза пока он закрывает потом это все безобразие напрягает, потому остановился на создании одной копии и последовательной загрузке/выгрузке документов в нее.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
||||
|
||||
А меня наводит на некоторые мысли следующее:
Убиваем нули, натравливаем регулярку на сам файл. Авось прокатит. Только если есть русские буквы, то это все будет юникодом. Надо учесть. ------------------ UPD: попробовал сделать русские буквы - текст разбило на две части. Так что да, возникают сложности. Хотя чисто англ текст вроде не дробится. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 09.08.2013 в 19:40. |
#6
|
||||
|
||||
В моем случае именно русский текст разбирается. И к сожалению обращение напрямую не прокатит в некоторых случаях. Есть документы, где текст чередуется с таблицами, графикой, ил все вместе, да еще и в какой нибудь фрэйм запихано. Вот там вообще все грустно, а ворд нормально свое творение открывает.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
||||
|
||||
Ну почему сразу грустно:
Все нормально, текст таблицы запихан в текст документа, а картинка где-то в конце. Напрягает только то, что юникодный текст на 2 части разбит всегда. Открыл большой русский doc (207 страниц) - тоже две части текста, просто больших. Вероятность, что разбиение попадет четко на ту часть, на которую должна сработать регулярка, невелика. Похоже, что формат doc сначала пишет весь текст, а потом всю его разметку. Так что вполне может сработать. Кстати, если документ сохранен в docx, то распаковываем его как zip и видим файл \word\document.xml с текстом в формате XML. Сносим все теги и радуемся оставшемуся чистому тексту. Проверил автозаменой с помощью Notepad++ - простая регулярочка снесла всё, кроме текста. Можно просто сносить все от открывающейся треугольной скобки до закрывающейся. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 09.08.2013 в 21:14. |
#8
|
||||
|
||||
Возможно вы и правы. Надо тоже попробовать этот вариант. Посмотрим, что быстрее и удобнее выйдет в итоге.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#9
|
||||
|
||||
Решил возродить тему. Прошло время, прога обросла интерфейсом и удобностями - почти все чудно. И вот это почти меня раздражает
Итак, я знаю как получить найденный по шаблону кусок текста и я его достаточно неплохо разбираю на нужные мне составляющие. А вот как-бы мне сам ворд заставить это делать? У него есть функция поиска и замены текста, причем заменять он может используя подстановочные параметры из шаблона запроса. Например если имеем такой текст в ворде: № 1-98765, заведенного 01.01.2012 и используя шаблон поиска такого вида: (<[0-9]-<[0-9]@>)*(<[0-9]@.<[0-9]@.<[0-9]@>) мы используя подстановки в замене \1 \2 получим на выходе 1-98765 01.01.2012. Так вот, вопрос прост - а как мне собственно получить значения этих параметров \1 \2 для своих целей? И кстати, кого интересует тема регулярок в ворде - вот полезняшка. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 27.08.2013 в 22:05. |
#10
|
||||
|
||||
Прошло еще немножко врмени. В общем все уже давно сделано и чудно работает. Решил проблему двухэтапным поиском. На первом этапе ищется по вордовскому шаблону. На втором этапе уже в полученном тексте ищется по регулярке.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |