| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Прочее. Программное обеспечение > MS Word Нужен скрипт для копирования с одновременной заменой части текста

MS Word Нужен скрипт для копирования с одновременной заменой части текста

Ответ
Поиск в этой теме
Непрочитано 19.11.2012, 20:45 #1
MS Word Нужен скрипт для копирования с одновременной заменой части текста
Солидворкер
Moderator
 
Конструктор (машиностроение)
 
Россия
Регистрация: 23.10.2006
Сообщений: 22,997

Умельцы, помогите, чем можете!
Что, собственно, нужно:

Есть абзац текста, который содержит несколько имен файлов, содержащих порядковый номер.
Надо найти заданные куски текста, произвести в них замену, на единицу увеличив номер в имени файла и вставить в новый абзац, старый оставив без изменений.
Повторить n раз. Нет, n -мало, лучше m раз.

Буду признателен за любые советы. Если это можно реализовать не в Ворде, то тоже жду советов.
Просмотров: 10412
 
Непрочитано 19.11.2012, 23:17
#2
bargool


 
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 508
<phrase 1=


а этот файл - docx?
разбирать абзац можно легко с помощью регулярных выражений, но они не позволят так уж изящно увеличивать номер только с помощью движка регулярок - тут нужно программировать.
В принципе, в ворде есть урезанный вариант регулярных выражений, можно поковырять в справке..
Файл должен быть именно вордовский?
bargool вне форума  
 
Автор темы   Непрочитано 19.11.2012, 23:18
#3
Солидворкер
Moderator

Конструктор (машиностроение)
 
Регистрация: 23.10.2006
Россия
Сообщений: 22,997
<phrase 1=


Цитата:
Сообщение от bargool Посмотреть сообщение
а этот файл - docx?
Как вариант

Цитата:
Сообщение от bargool Посмотреть сообщение
Файл должен быть именно вордовский?
Нет
Солидворкер вне форума  
 
Непрочитано 20.11.2012, 14:45
#4
bargool


 
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 508
<phrase 1=


Самое простое, могу сделать на C# экзешник, который будет нужным образом обрабатывать текстовый файл (если вордовские файлы не принципиальны, в принципе, можно и ворд, но мороки больше будет)
Можете приложить образец со скопированным один раз абзацем?
bargool вне форума  
 
Автор темы   Непрочитано 20.11.2012, 15:14
#5
Солидворкер
Moderator

Конструктор (машиностроение)
 
Регистрация: 23.10.2006
Россия
Сообщений: 22,997
<phrase 1=


Цитата:
Сообщение от bargool Посмотреть сообщение
(если вордовские файлы не принципиальны, в принципе, можно и ворд, но мороки больше будет)
обычного txt будет достаточно

Цитата:
Сообщение от bargool Посмотреть сообщение
Можете приложить образец со скопированным один раз абзацем?
Проблема в том, что текст заранее не известен и меняется от задачи к задаче
Очень примерно это выглядит так:
Код:
[Выделить все]
//путь к программе   куча служебной информации  путь к файлу/имя файла характерный для данной задачи кусок текста в имени файла  01 характерный для данной задачи кусок текста в имени файла куча служебной информации путь к файлу/имя файла характерный для данной задачи кусок текста в имени файла  01 характерный для данной задачи кусок текста в имени файла куча служебной информации
Должно превращаться в следующее:
Код:
[Выделить все]
//путь к программе   куча служебной информации  путь к файлу/имя файла характерный для данной задачи кусок текста в имени файла  01 характерный для данной задачи кусок текста в имени файла куча служебной информации путь к файлу/имя файла характерный для данной задачи кусок текста в имени файла  01 характерный для данной задачи кусок текста в имени файла куча служебной информации
//путь к программе   куча служебной информации  путь к файлу/имя файла характерный для данной задачи кусок текста в имени файла  02 характерный для данной задачи кусок текста в имени файла куча служебной информации путь к файлу/имя файла характерный для данной задачи кусок текста в имени файла  02 характерный для данной задачи кусок текста в имени файла куча служебной информации
//путь к программе   куча служебной информации  путь к файлу/имя файла характерный для данной задачи кусок текста в имени файла  03 характерный для данной задачи кусок текста в имени файла куча служебной информации путь к файлу/имя файла характерный для данной задачи кусок текста в имени файла  03 характерный для данной задачи кусок текста в имени файла куча служебной информации
...
//путь к программе   куча служебной информации  путь к файлу/имя файла характерный для данной задачи кусок текста в имени файла  n характерный для данной задачи кусок текста в имени файла куча служебной информации путь к файлу/имя файла характерный для данной задачи кусок текста в имени файла  n характерный для данной задачи кусок текста в имени файла куча служебной информации
Заменяемый номер может встречаться в одном абзаце произвольное число раз.
Имена файлов в пределах одного абзаца, соответственно, могут различаться (за исключением номера).

Мне эта приблуда нужна для пакетного ремукса большого количества mkv (добавление/удаление дорожек, субтитров и т.п.) через консоль.

Возможно, есть более прямой путь, но я пока его не обнаружил.
Солидворкер вне форума  
 
Непрочитано 20.11.2012, 15:25
#6
bargool


 
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 508
<phrase 1=


я правильно понимаю, что это параметры ком. строки?
обработка идёт под виндой или линуксом?
Как происходит пакетная обработка? Вы планируете этот текстовый файл скармливать какой-то программе целиком? или частями?
bargool вне форума  
 
Автор темы   Непрочитано 20.11.2012, 15:35
#7
Солидворкер
Moderator

Конструктор (машиностроение)
 
Регистрация: 23.10.2006
Россия
Сообщений: 22,997
<phrase 1=


Цитата:
Сообщение от bargool Посмотреть сообщение
я правильно понимаю, что это параметры ком. строки?
да
Цитата:
обработка идёт под виндой или линуксом?
Винда. Пардон за каламбур

Цитата:
Сообщение от bargool Посмотреть сообщение
Как происходит пакетная обработка? Вы планируете этот текстовый файл скармливать какой-то программе целиком? или частями?
Обработка идет с помощью программы MKVtoolnix, точнее, ее куска MKVmerge. Готовый текст достаточно скормить в cmd или создать батник, и программа сожрет весь список последовательно.
Нагуглил только http://forum.doom9.org/showthread.php?t=162639 , но, поскольку, по-программистки я не шпрехаю, мне не совсем понятно, что этот скрипт делает. Реальный пример командной строки могу выложить вечером, если надо.
Солидворкер вне форума  
 
Непрочитано 20.11.2012, 16:25
#8
bargool


 
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 508
<phrase 1=


Солидворкер, в этом случае дополнительные грабли городить не имеет смысла. Нормально сделанный батник прекрасно решает проблему
Конструкция вида
Код:
[Выделить все]
@echo off
FOR /L %%i IN (1,1,10) DO "//путь к программе куча служебной информации путь к файлу/имя файла характерный для данной задачи кусок текста в имени файла  %%i характерный для данной задачи кусок текста в имени файла куча служебной информации путь к файлу/имя файла характерный для данной задачи кусок текста в имени файла %%i характерный для данной задачи кусок текста в имени файла куча служебной информации"
Выполнит команду в кавычках после do 100 раз, при этом вместо %%i подставляя последовательно номера от 1 до 100 (без лидирующих нулей, но это тоже можно сделать, если не ошибаюсь). При этом, пути к файлам лучше тоже заключить в кавычки, естественно.
То бишь FOR /L %%i IN (1,1,100) прогоняет переменную %%i от одного до 100 с шагом в 1 (начало, шаг, конец)
Конечно, батник можно улучшать и улучшать, делать его более универсальным и удобным. Но это по мере использования.
Цитата:
Реальный пример командной строки могу выложить вечером, если надо.
Да, это было бы хорошо, что бы и батник был конкретным
bargool вне форума  
 
Автор темы   Непрочитано 20.11.2012, 18:14
#9
Солидворкер
Moderator

Конструктор (машиностроение)
 
Регистрация: 23.10.2006
Россия
Сообщений: 22,997
<phrase 1=


Код:
[Выделить все]
"C:\Program Files (x86)\MKVToolNix\mkvmerge.exe" -o "I:\\Gosick - 01 [BDRip 1280x720 x264 AAC] [Scrap & Kedra] (1).mks"  "--language" "3:rus" "--track-name" "3:Dreamers Team (надписи)" "--default-track" "3:yes" "--forced-track" "3:yes" "-s" "3" "--attachments" "1,2,3,4,5,6,7,8,9,10,11,12,13,14" "-D" "-A" "-T" "--no-global-tags" "--no-chapters" "(" "I:\\Gosick - 01 [BDRip 1280x720 x264 AAC] [Scrap & Kedra].mkv" ")" "--track-order" "0:3"
Вот живой пример - из файла выдирается дорожка субтитров


Цитата:
Сообщение от bargool Посмотреть сообщение
без лидирующих нулей, но это тоже можно сделать, если не ошибаюсь
Крайне желательно, чтобы нули имели место быть.
Солидворкер вне форума  
 
Непрочитано 21.11.2012, 00:13
#10
bargool


 
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 508
<phrase 1=


На самом деле задача, как мне кажется, состоит не в переборе числовых значений с подстановкой в пути, а просто в переборе существующих файлов по определённому шаблону (например, все *.mkv), и подстановке имён этих же файлов с определёнными изменениями (например, смена расширения на mks)
тогда всё значительно проще
Код:
[Выделить все]
@echo off
rem Путь к файлам для обработки
set workPath=c:\test
rem Переходим в рабочий каталог
cd %workPath%
rem Перебираем файлы по маске
for %%i in (*.mkv) do "C:\Program Files (x86)\MKVToolNix\mkvmerge.exe" -o "%%~ni (1).mks"  "--language" "3:rus" "--track-name" "3:Dreamers Team (надписи)" "--default-track" "3:yes" "--forced-track" "3:yes" "-s" "3" "--attachments" "1,2,3,4,5,6,7,8,9,10,11,12,13,14" "-D" "-A" "-T" "--no-global-tags" "--no-chapters" "(" "%%i" ")" "--track-order" "0:3"
В данном случае, цикл for будет перебирать все файлы по шаблону *.mkv в текущем каталоге (это который workPath), и выполнять то, что в кавычках после do.
При этом будет подставлять вместо:
  • %%~ni - имя файла без расширения (а потом туда, соответственно, добавляется (1).mks)
  • %%i - имя файла с расширением
Без путей, но они и не нужны, т.к. мы уже находимся в нужном каталоге
Приложил готовый батник, надо только поменять workPath на нужный
Вложения
Тип файла: rar ExtractSubtitles.rar (475 байт, 42 просмотров)
bargool вне форума  
 
Автор темы   Непрочитано 21.11.2012, 00:27
#11
Солидворкер
Moderator

Конструктор (машиностроение)
 
Регистрация: 23.10.2006
Россия
Сообщений: 22,997
<phrase 1=


Цитата:
Сообщение от bargool Посмотреть сообщение
На самом деле задача, как мне кажется, состоит не в переборе числовых значений с подстановкой в пути, а просто в переборе существующих файлов по определённому шаблону (например, все *.mkv), и подстановке имён этих же файлов с определёнными изменениями (например, смена расширения на mks)
Проблема в том, что я привел, так сказать, сферического коня в вакууме, имя исходного и производного файлов совпадают. В более сложных случаях, когда, например, надо свести несколько аудио дорожек, имена файлов уже будут отличаться не только расширением.
Солидворкер вне форума  
 
Непрочитано 21.11.2012, 08:43
#12
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


Тз какое то не внятное, может хотя бы результаты до и после покажешь, выделишь цветом, что должно получится, прям в вордовском файле...
И как скоро тебе это надо, а то у меня на следующей неделе только время вроде как появится....
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Автор темы   Непрочитано 21.11.2012, 09:04
#13
Солидворкер
Moderator

Конструктор (машиностроение)
 
Регистрация: 23.10.2006
Россия
Сообщений: 22,997
<phrase 1=


Цитата:
Сообщение от DEM Посмотреть сообщение
И как скоро тебе это надо, а то у меня на следующей неделе только время вроде как появится....
Поскольку файлов несколько сотен, то вручную я все равно вряд ли закончу до следующей недели

Пример выкладываю, но подчеркиваю, что это простой случай, есть и более сложные варианты с большим количеством имен файлов.
По результатам обсуждения переформулирую задачу.
Нужен батник, который последовательно перебирает номера в именах файлов с сохранением лидирующих нулей. Видимо, такой подход будет оптимальным.
Вложения
Тип файла: doc Пример.doc (29.0 Кб, 72 просмотров)
Солидворкер вне форума  
 
Непрочитано 21.11.2012, 10:29
#14
bargool


 
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 508
<phrase 1=


Так акция разовая? Тогда предлагаю воспользоваться экселем и его прекрасной функцией "сцепить". Формируем первую строчку, после чего растягиваем вниз насколько надо. Справа результирующий столбец жирным - его копируем и вставляем в текстовый файл. Вуаля. Пример прилагается. 2 минуты и список из сотен позиций готов.
Вложения
Тип файла: rar Пример.rar (8.1 Кб, 54 просмотров)
bargool вне форума  
 
Непрочитано 21.11.2012, 10:35
#15
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


Че то уж очень похже на структурирование существующей медиатеки...
Я б тут наверное воспользовался ДирЛистером+экселем....
Потом скопировал все в ворд.....
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Автор темы   Непрочитано 21.11.2012, 10:44
#16
Солидворкер
Moderator

Конструктор (машиностроение)
 
Регистрация: 23.10.2006
Россия
Сообщений: 22,997
<phrase 1=


Цитата:
Сообщение от bargool Посмотреть сообщение
Так акция разовая?
Акция не разовая. Просто на данный момент накоплен определенный объем контента. В дальнейшем объем будет пополняться.

Цитата:
Сообщение от DEM Посмотреть сообщение
Че то уж очень похже на структурирование существующей медиатеки...
Типа того.
bargool, Спасибо за идею, не допер про Эксель. Вечером опробую.
Но, все-таки, возможно изменение переменной в скрипте с сохранением лидирующих нулей?
Солидворкер вне форума  
 
Непрочитано 21.11.2012, 10:46
#17
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


глянь ДирЛистер...
Он делает списки файлов в папках и сохраняет в экселе...
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Автор темы   Непрочитано 21.11.2012, 11:08
#18
Солидворкер
Moderator

Конструктор (машиностроение)
 
Регистрация: 23.10.2006
Россия
Сообщений: 22,997
<phrase 1=


Цитата:
Сообщение от DEM Посмотреть сообщение
глянь ДирЛистер...
Он делает списки файлов в папках и сохраняет в экселе...
Я в курсе, но мне список, как таковой, мало поможет
Солидворкер вне форума  
 
Непрочитано 21.11.2012, 11:19
#19
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


Солидворкер
так потом его в экселе обрабатывай, сцепляй теги т.п.
Это самый простой вариант, скрипт сделаю как только освобожусь...
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Непрочитано 21.11.2012, 11:44
#20
bargool


 
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 508
<phrase 1=


Доделал лидирующие нули
Код:
[Выделить все]
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /L %%i in (1,1,10) do (
	set index=00000%%i
	set index=!index:~-2!
	"C:\Program Files (x86)\MKVToolNix\mkvmerge.exe" -o "I:\\Gosick - !index! [BDRip 1280x720 x264 AAC] [Scrap & Kedra] (1).mks"  "--language" "3:rus" "--track-name" "3:Dreamers Team (надписи)" "--default-track" "3:yes" "--forced-track" "3:yes" "-s" "3" "--attachments" "1,2,3,4,5,6,7,8,9,10,11,12,13,14" "-D" "-A" "-T" "--no-global-tags" "--no-chapters" "(" "I:\\Gosick - !index! [BDRip 1280x720 x264 AAC] [Scrap & Kedra].mkv" ")" "--track-order" "0:3"
)
pause
set index=!index:~-2! - обрезает до указанного кол-ва знаков (2, соответственно)
дальше это вставляется в итоговое выражение с помощью !index!

Последний раз редактировалось bargool, 21.11.2012 в 11:59.
bargool вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Прочее. Программное обеспечение > MS Word Нужен скрипт для копирования с одновременной заменой части текста

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Выравнивание текста по двум точкам. Krieger Готовые программы 10 24.12.2011 16:02
нужен лисп с заменой текста Rwb LISP 28 03.08.2008 23:57