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

hulk1776

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

К.Т.

Участник
Сообщения
324
Реакции
337
Код:
mFind = "^(\u[\w-]+?)\s"
mChng = "$1\t"
myGREP mFind, mChng, mStory
 

hulk1776

Топикстартер
15 лет на форуме
Сообщения
735
Реакции
21
Вот в "myGREP" и вся загвоздка))
 

К.Т.

Участник
Сообщения
324
Реакции
337
Тогда это странный вопрос.
Вы определили какую-то функцию, которая в вашей строке вызывается.
Просите "указанную строку переформулировать для VBA".
А оказывается, загвоздка в функции, про которую ничего не известно.
И каким должен быть ответ? )
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 194
Реакции
10 845

hulk1776

Топикстартер
15 лет на форуме
Сообщения
735
Реакции
21
Код:
mFind = "^(\u[\w-]+?)\s"
mChng = "$1\t"
myGREP mFind, mChng, mStory
Задача - найти (хотя бы) первый пробел в строке и заменить его на табуляцию средствами VBA. Пока не получается, потому что regexp от VBA вроде бы даже не понимает таких метасимволов как \u\l.
 

hulk1776

Топикстартер
15 лет на форуме
Сообщения
735
Реакции
21
В индизайне нет VBA а в VBA нет grep - печальбеда, но в жизни нет гармонии :(
Но, по счастью, в VBA есть модель Indesign. Интересно, а можно ли тогда в новый текстовый файл средствами javasrcipt вставить содержимое буфера обмена? (греп в Индизайне-то выполняется. Можно было бы просто скопировать отгрепленный текст и вставить в новый текстовый файл (раз из VBA не идет)).
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Интересно, а можно ли тогда в новый текстовый файл средствами javasrcipt вставить содержимое буфера обмена?
а зачем тут буфер обмена? текст можно не копируя в буфер сохранить в файл
 
Последнее редактирование:
  • Спасибо
Реакции: hulk1776

lev

Модератор
20 лет на форуме
Сообщения
2 145
Реакции
2 071
Примерно так:
Код:
  Set ind = CreateObject("InDesign.Application")
  Set Story = ind.ActiveDocument

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

  Story.ChangeGrep
 

hulk1776

Топикстартер
15 лет на форуме
Сообщения
735
Реакции
21
Примерно так:
Код:
  Set ind = CreateObject("InDesign.Application")
  Set Story = ind.ActiveDocument

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

  Story.ChangeGrep
Для Индизайна-то - это да. Но я хотел бы именно внутри Ворда провести греп-корректировку. Чтобы не обращаться лишний раз к Индизайну.
 

lev

Модератор
20 лет на форуме
Сообщения
2 145
Реакции
2 071
А чего тогда в тему InDesign пишете, а не в Word? Там и свои средства замены есть, и regexp не проблема подключить. Про некоторые отличия от InDesign'овского grep'a Вы уже знаете.
 
  • Спасибо
Реакции: hulk1776

hulk1776

Топикстартер
15 лет на форуме
Сообщения
735
Реакции
21
а зачем тут буфер обмена? текст можно не копируя в буфер сохранить в файл
Если сохранять не копируя (а через запись переменной), то кодировка меняется на 1251, а ее Data merge не понимает. Видимо, при любой записи в файл кодировка портится (во всяком случае меняется с предустановленной). Поэтому пока приходится в полуручном режиме - открывать файл в блокноте, и уже руками вставлять содержимое буфера обмена.
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213
Если сохранять не копируя (а через запись переменной), то кодировка меняется на 1251, а ее Data merge не понимает. Видимо, при любой записи в файл кодировка портится (во всяком случае меняется с предустановленной).
1622222330813.png
 

hulk1776

Топикстартер
15 лет на форуме
Сообщения
735
Реакции
21
Осталось перевести это
Код:
var mFile = File("C:\mFile.txt");
mFile.encoding = 'UTF-8';
для VBA((
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 194
Реакции
10 845

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
ну вызванный скрипт вам может вернуть строку, сохраняйте ее в VBA если там можно