Замена текста

  • Автор темы Автор темы f_sv
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

f_sv

Участник
Топикстартер
Сообщения
9
Реакции
0
Что-то не могу нигде найти ответ...

Задача простая: найти два текста и один заменить другим. А проблема в сохранении форматирования (стили абзацев одинаковые. надо сохранить начертание символов).

Как делаю. Нашел поиском один текст - имею например нужный Story и позиции начала и конца. Нашёл другой текст - имею например найденный Word (как currentDocument.findText ()[0]).

Далее если делать
foundWord.contents = firstStory.contents.Substring(start, end), то форматирование теряется.

Если делать заменой, то app.changeTextPreferences.changeTo хочет в себя строку, а не объект. А строка опять же форматирования не имеет...
 
Ответ: Замена текста

а другие свойства TextPreferences смотрели?
 
Ответ: Замена текста

имеется ввиду app.changeTextPreferences? честно говоря ничего подходящего не вижу.

да... я делаю под CS3.

еще момент... замена с помощью changeText наверное возможна только в частном случае когда текст, который надо заменить является чем-то простым - словом например. а если надо заменить 5 абзацев 10-ю другими абзацами, то наверное не получится.
 
Ответ: Замена текста

Блин, чтобы понять, чего Вам хочется, нужно два мешка гороху съесть.
Хочется искать с учетом форматирования что ли?
Так поставьте ПЕРЕД СОБОЙ задачу правильно. Вы ищите или находите?
Если ищите, так ройте объект findTextPreferences.
А если работаете с найденным, мучайте changeTextPreferences.
 
Ответ: Замена текста

Нет, не надо искать с учетом форматирования. Надо взять один кусок текста и заменить им другой кусок текста. И чтобы при этой операции не потерялось форматирование того куска, который переносим.

Эти куски текста я знаю где находятся - фреймы, индексы начала/конца... Осталось только переместить.

Зря я наверное стал писать про changeText. Это запутало. Просто не знаю как реализовать и предполагаю разные варианты.
 
Ответ: Замена текста

Бред какой-то. Да вот же. Что тут может быть неясного?!!!

PHP:
app.findTextPreferences.findWhat = 'искомый текст';
app.changeTextPreferences.changeTo = 'нужный текст';
app.activeDocument.changeText();
 
Ответ: Замена текста

Если так можно, то неясно как в changeTo записать кусок текста (который уже есть в документе) с форматированием. Скажем 5 абзацев из какого-то фрейма, где есть жирные, курсивные и подчеркнутые символы.

changeTo можно присвоить только строку. никакой объект (например characters) он в себя не принимает.
 
Ответ: Замена текста

Какой объект? Какие абзацы?
Что вы ходите круг да около? Вы картину нарисуйте, что и как вы хотите найти и заменить.
 
Ответ: Замена текста

Объект и строка о которых я писал - тип данных. changeTo имеет тип "строка", а не объект. т.е. я не могу присвоить changeTo объект например типа characters или paragraphs.

Почему вокруг да около? В самом первом сообщении я написал: "найти два текста и один заменить другим".

Пример:

Фрейм 1
текст текст текст текст НАЧАЛОИСКОМОГОТЕКСТА бла бла бла бла бла бла бла бла бла бла бла бла КОНЕЦИСКОМОГОТЕКСТА текст текст текст

Фрейм 2
текст текст текст текст текст текст НАЧАЛОВМЕСТОЧЕГОВСТАВИТЬ текст текст текст текст текст текст текст текст текст текст текст текст текст КОНЕЦВМЕСТОЧЕГОВСТАВИТЬ текст текст текст текст текст текст текст текст текст

Задача: взять кусок текста между словами НАЧАЛОИСКОМОГОТЕКСТА и КОНЕЦИСКОМОГОТЕКСТА и сохраняя форматирование вставить его вместо текста, который находится между словами НАЧАЛОВМЕСТОЧЕГОВСТАВИТЬ и КОНЕЦВМЕСТОЧЕГОВСТАВИТЬ.

т.е. в результате во втором фрейме должно получиться:
Фрейм 2
текст текст текст текст текст текст НАЧАЛОВМЕСТОЧЕГОВСТАВИТЬ бла бла бла бла бла бла бла бла бла бла бла бла КОНЕЦВМЕСТОЧЕГОВСТАВИТЬ текст текст текст текст текст текст текст текст текст

Сами тексты я нашел без проблем. Осталось только осуществить замену.
 
Ответ: Замена текста

Технология такова.
Ищешь нужный для вставки текст, выделяешь, копируешь в буфер, при поиске/замене в строке замена пишешь ^c (это латинское C).
 
Ответ: Замена текста

да. спасибо. в результате сейчас

1. выделил то что надо переносить
app.select(sourceStory.characters.itemByRange(sourceStartPos, sourceEndPos), SelectionOptions.REPLACE_WITH);

2. app.copy();

3. выделил текст вместо которого вставить (targetItem - в моём случае Word)
app.select(targetItem, SelectionOptions.REPLACE_WITH);

4. app.paste();

если кто-то знает вариант без буфера - было бы интересно.
 
Ответ: Замена текста

f_sv сказал(а):
если кто-то знает вариант без буфера - было бы интересно.


Не по теме:
Сами напросились.


Я знаю. Через экспорт в файл. :)
 
Ответ: Замена текста

да. спасибо. может так тоже попробую немного попозже. пока пусть с буфером поработает.

хотя с буфером не получается например работать, если файлы открыты без отображения ( app.open (targetFile, false); ). Может пока просто чего-то не знаю...

жаль только, что объектами DOM обойтись не получается...
 
Ответ: Замена текста

Хм, отчего же.
Вот есть findObject и есть findObjectPreferences. Другое дело, что, с точки зрения, InDesing существуют объекты документа (те самые, что входят в Document Object Model), но среди них нет Text или Word, потому что эти объекты являются вложенными в объекты Story, TextFrame, Cell и прочие.
А вот объект TextFrame с параметрами ищите и заменяйте сколько хотите :)
 
Вопрос: Замена текста

Есть ли возможность в текстовый фрейм ID вставить файл *.txt (или любой другой текстовый формат) и связать его линком? Чтобы при изменении этого текстового (внешнего) файла (так же, как это происходит с графикой) была возможность это увидеть и обновить содержимое текстового фрейма?
 
Ответ: Замена текста

Файл InCopy так можно дрючить. Он фактически текстовый – XML.
 
Статус
Закрыто для дальнейших ответов.