Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Технологии
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.08.2013, 16:50
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию Переименование множества файлов MS Word по контексту

Имеется ну очень много вордовских документов с именами без всякой системы, а хочется это дело систематизировать. Эпизодически я это делал открывая документ, вычитывая часть текста содержащее номер и дату и пересохранял по этим данным. Сей мартышкин труд меня основательно достал и потому написал небольшую утилитку которая все это делает сама. Вроде бы - вот оно счастье Но утилитка работает удручающе медленно ибо подключается к каждому документу через OLE ищет по регулярке нужные значения, сохраняет файл и по кругу.

Итак перехожу к вопросам. Есть ли более быстрый способ делать тоже самое? Если нет, то имеет ли смысл заморачиваться с потоками, что явно предполагает сильную загрузку памяти копиями ворда и не факт, что будет надежно работать при этом.
Или я вообще не в ту степь пошел?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #2  
Старый 08.08.2013, 17:18
phidel phidel вне форума
Прохожий
 
Регистрация: 04.06.2013
Сообщения: 2
Версия Delphi: Delphi xe
Репутация: 10
По умолчанию

Может, если переписать это дело как макрос Ворда, будет быстрее?
Один вордовский экземпляр - поочередно открывает документы и переименовывает
Ответить с цитированием
  #3  
Старый 08.08.2013, 17:33
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Да тоже самое наврное можно будет делать и в Дельфи, если не создавать новый, а подключаться к существующему. Но что-то мне подсказывает, что тут должны быть какие-то грабли. Но попробую, это хоть переделки серьезной не потребует.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #4  
Старый 09.08.2013, 19:06
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Переделал под одну копию ворда. Скорость все равно не супер, но уже намного лучше. Попробовал грузить сразу все документы в эту одну копию, еще быстрее получается, но вот пауза пока он закрывает потом это все безобразие напрягает, потому остановился на создании одной копии и последовательной загрузке/выгрузке документов в нее.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 09.08.2013, 19:13
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

А меня наводит на некоторые мысли следующее:

Убиваем нули, натравливаем регулярку на сам файл. Авось прокатит. Только если есть русские буквы, то это все будет юникодом. Надо учесть.
------------------
UPD: попробовал сделать русские буквы - текст разбило на две части. Так что да, возникают сложности. Хотя чисто англ текст вроде не дробится.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 09.08.2013 в 19:40.
Ответить с цитированием
  #6  
Старый 09.08.2013, 20:34
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

В моем случае именно русский текст разбирается. И к сожалению обращение напрямую не прокатит в некоторых случаях. Есть документы, где текст чередуется с таблицами, графикой, ил все вместе, да еще и в какой нибудь фрэйм запихано. Вот там вообще все грустно, а ворд нормально свое творение открывает.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 09.08.2013, 20:45
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Ну почему сразу грустно:

Все нормально, текст таблицы запихан в текст документа, а картинка где-то в конце. Напрягает только то, что юникодный текст на 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  
Старый 09.08.2013, 22:50
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Возможно вы и правы. Надо тоже попробовать этот вариант. Посмотрим, что быстрее и удобнее выйдет в итоге.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 27.08.2013, 21:59
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Решил возродить тему. Прошло время, прога обросла интерфейсом и удобностями - почти все чудно. И вот это почти меня раздражает
Итак, я знаю как получить найденный по шаблону кусок текста и я его достаточно неплохо разбираю на нужные мне составляющие. А вот как-бы мне сам ворд заставить это делать? У него есть функция поиска и замены текста, причем заменять он может используя подстановочные параметры из шаблона запроса. Например если имеем такой текст в ворде: № 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  
Старый 01.10.2013, 20:52
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Прошло еще немножко врмени. В общем все уже давно сделано и чудно работает. Решил проблему двухэтапным поиском. На первом этапе ищется по вордовскому шаблону. На втором этапе уже в полученном тексте ищется по регулярке.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:49.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter