[ID CC-CC2022] Можно ли перевести jsx-GREP-команды в VBA-команды?

  • Автор темы Автор темы hulk1776
  • Дата начала Дата начала

hulk1776

Топикстартер
15 лет на форуме
Сообщения
746
Реакции
21
Задачка простая. Есть список ФИО, у которых фамилию надо отбить табуляцией (то есть заменить первый пробел в каждой строке на табуляцию.
В jsx это сделал так:
Код:
mFind ="^(\\u[\\w-]+?)\\s"; mChng = "$1\\t"; myGREP(mFind,mChng,mStory);
Но потом это обработанный текст я копирую и руками вставляю в новый создаваемый файл для data merg'a. А хотелось бы, что бы это делал или скрипт (из Инди) или VBA (что лучше, потому что список приходит в виде вордовского файла). Можно ли указанную строку переформулировать для VBA?
 
Код:
mFind = "^(\u[\w-]+?)\s"
mChng = "$1\t"
myGREP mFind, mChng, mStory
 
Вот в "myGREP" и вся загвоздка))
 
Тогда это странный вопрос.
Вы определили какую-то функцию, которая в вашей строке вызывается.
Просите "указанную строку переформулировать для VBA".
А оказывается, загвоздка в функции, про которую ничего не известно.
И каким должен быть ответ? )
 
Код:
mFind = "^(\u[\w-]+?)\s"
mChng = "$1\t"
myGREP mFind, mChng, mStory
Задача - найти (хотя бы) первый пробел в строке и заменить его на табуляцию средствами VBA. Пока не получается, потому что regexp от VBA вроде бы даже не понимает таких метасимволов как \u\l.
 
В индизайне нет VBA а в VBA нет grep - печальбеда, но в жизни нет гармонии :(
Но, по счастью, в VBA есть модель Indesign. Интересно, а можно ли тогда в новый текстовый файл средствами javasrcipt вставить содержимое буфера обмена? (греп в Индизайне-то выполняется. Можно было бы просто скопировать отгрепленный текст и вставить в новый текстовый файл (раз из VBA не идет)).
 
Интересно, а можно ли тогда в новый текстовый файл средствами javasrcipt вставить содержимое буфера обмена?
а зачем тут буфер обмена? текст можно не копируя в буфер сохранить в файл
 
Последнее редактирование:
  • Спасибо
Реакции: hulk1776
Примерно так:
Код:
  Set ind = CreateObject("InDesign.Application")
  Set Story = ind.ActiveDocument

  ind.FindGrepPreferences = Nothing
  ind.ChangeGrepPreferences = Nothing
  ind.FindGrepPreferences.FindWhat = "Hello"
  ind.ChangeGrepPreferences.ChangeTo = "Привет"

  Story.ChangeGrep
 
Примерно так:
Код:
  Set ind = CreateObject("InDesign.Application")
  Set Story = ind.ActiveDocument

  ind.FindGrepPreferences = Nothing
  ind.ChangeGrepPreferences = Nothing
  ind.FindGrepPreferences.FindWhat = "Hello"
  ind.ChangeGrepPreferences.ChangeTo = "Привет"

  Story.ChangeGrep
Для Индизайна-то - это да. Но я хотел бы именно внутри Ворда провести греп-корректировку. Чтобы не обращаться лишний раз к Индизайну.
 
А чего тогда в тему InDesign пишете, а не в Word? Там и свои средства замены есть, и regexp не проблема подключить. Про некоторые отличия от InDesign'овского grep'a Вы уже знаете.
 
  • Спасибо
Реакции: hulk1776
а зачем тут буфер обмена? текст можно не копируя в буфер сохранить в файл
Если сохранять не копируя (а через запись переменной), то кодировка меняется на 1251, а ее Data merge не понимает. Видимо, при любой записи в файл кодировка портится (во всяком случае меняется с предустановленной). Поэтому пока приходится в полуручном режиме - открывать файл в блокноте, и уже руками вставлять содержимое буфера обмена.
 
Если сохранять не копируя (а через запись переменной), то кодировка меняется на 1251, а ее Data merge не понимает. Видимо, при любой записи в файл кодировка портится (во всяком случае меняется с предустановленной).
1622222330813.png
 
Осталось перевести это
Код:
var mFile = File("C:\mFile.txt");
mFile.encoding = 'UTF-8';
для VBA((
 
ну вызванный скрипт вам может вернуть строку, сохраняйте ее в VBA если там можно