Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 20.04.2015
Сообщений: 80

Подправить скрипт сохранения выделенного текста в файл из InDesign

22.03.2023, 11:30. Показов 544. Ответов 4

Студворк — интернет-сервис помощи студентам
Добрый день. Прошу помочь в правке скрипта на javascript, работающего в InDesign (программа верстки)
Скрипт сохраняет выделенный текстовый блок в текстовый файл (txt), предварительно спросив путь сохранения и давая каждый раз новое (случайное; random) название этому файлу.

Необходимо, чтобы
• он не спрашивал путь, а всегда сохранял в корень диска D;
• всегда давал одинаковое название файлу, и в случае, если файл с таким названием в корне диска D есть, то не переписывал файл заново, а добавлял текст к существующему в txt-файле;
• текст, сохраняемый в этом файле был с кодировкой UTF-8.



JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
cur_obj = app.selection
 
function mdump(mdata,mpath){
    while (true)
    {
        mfile = new File(mpath+'/'+'export_story'+
        Math.floor(Math.random() * 100)+
        '.txt');
        if (!mfile.exists) break;
    }
    mfile.open('w')
    mfile.write(mdata)
    mfile.close()
}
 
if (cur_obj.length != 0 && cur_obj !== undefined){
    obj_list = []
    for(var pi = 0; pi < cur_obj.length; pi++){
        if(cur_obj[pi].getElements()[0].constructor.name == 'TextFrame'){
            obj_list.push(cur_obj[pi].id)
        }
    }
 
    if(obj_list.length != 0){
 
        mfolder = Folder.selectDialog('folder')
        if(mfolder == null){exit()}
        
        doc = app.activeDocument
        rez = []
        for(var pi = 0; pi < obj_list.length; pi++){
            cur_mod = doc.pageItems.itemByID(obj_list[pi])
            rez.push(cur_mod.parentStory.contents)
        }
 
        mdump(rez.join('\n'),mfolder)
        alert('save story')
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.03.2023, 11:30
Ответы с готовыми решениями:

Скрипт для вставки в поиск Google и Yandex выделенного текста с последующим поиском
Нужен скрипт для вставки в поиск Google и Yandex только выделенного текста с последующим поиском. И не важно, где будет выделен кусок...

Копирование выделенного текста в HTML странице ссылкой и id значением первого выделенного абзаца
В общем так: На странице имеется длинный текст со множеством абзацами заключённые в &lt;p&gt; теги, которые имеют собственное цифровое...

Подправить скрипт, чтоб файл создавался в любой папке
Всех с наступающим. Есть скрипт для создания ярлыка URL из буфера обмена. Кнопка стоит в контекстном меню. Но из какой бы папки не...

4
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
22.03.2023, 14:37
Лучший ответ Сообщение было отмечено dziglo как решение

Решение

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var DESTINATION = 'D:';
var FILE_NAME = 'export_story';
 
var cur_obj = app.selection;
 
function mdump(mdata, mpath) {
  var mfile = new File(mpath);
  mfile.open('a');
  mfile.write((mfile.exists ? '\n' : '') + mdata);
  mfile.close();
}
 
var obj_list = [];
 
for (var i = 0; i < cur_obj.length; i++) {
  if (cur_obj[i].getElements()[0].constructor.name !== 'TextFrame') continue;
 
  obj_list.push(cur_obj[i].id);
}
 
var doc = app.activeDocument;
 
var rez = [];
 
for (var i = 0; i < obj_list.length; i++) {
  rez.push(doc.pageItems.itemByID(obj_list[i]).parentStory.contents);
}
 
mdump(rez.join('\n'), DESTINATION + '\\' + FILE_NAME + '.txt');
 
alert('save story')
2
1 / 1 / 0
Регистрация: 20.04.2015
Сообщений: 80
22.03.2023, 14:53  [ТС]
j2FunOnly, спасибо! Получилось.
Единственное с кодировкой все-таки не получается.
Дело в том, что в текстовом блоке нередко бывает текст не только на русском языке. В частности, текст с буквой „æ“ (Прописная — Æ). И вот при сохранении в текстовый файл, вместо этой буквы сохраняется вопросительный знак.
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
22.03.2023, 16:57
Лучший ответ Сообщение было отмечено dziglo как решение

Решение

Цитата Сообщение от dziglo Посмотреть сообщение
Единственное с кодировкой все-таки не получается.
Укажите кодировку файла
JavaScript
6
7
8
9
10
11
12
function mdump(mdata, mpath) {
  var mfile = new File(mpath);
  mfile.encoding = 'UTF-8';
  mfile.open('a');
  mfile.write((mfile.exists ? '\n' : '') + mdata); // btw, at this point file will always "be exists", we did open it just one line earlier :/
  mfile.close();
}
(если файл существует, то либо перекодируйте содержимое руками, либо удалите файл)
1
1 / 1 / 0
Регистрация: 20.04.2015
Сообщений: 80
22.03.2023, 17:47  [ТС]
Все отлично работает. Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.03.2023, 17:47
Помогаю со студенческими работами здесь

Изменение стиля шрифта выделенного или не выделенного текста
Добрый вечер. Мне нужно при изменении стиля шрифта что бы менялось не весь текст записанный в Мемо, а только то, что выделено, если не...

Скрипт для сохранения html страницы в txt файл
Доброго времени суток! В браузере есть кнопка: &quot;Сохранить страницу как- файл .txt&quot; Нужно чтобы так же сохраняло, только автоматически....

Реализовать возможность сохранения текста в файл построчно
private void сохранитьКакToolStripMenuItem_Click(object sender, EventArgs e) { if (saveFileDialog1.ShowDialog() ==...

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

Сохранение текста из TextBox в файл, используя диалоги открытия и сохранения
компилятор ругается, как исправить ошибку ? но если использовать richTextBox1 то все хорошо объясните Private Sub...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
Множества в Python
py-thonny 11.06.2025
В Python существует множество структур данных, но иногда я сталкиваюсь с задачами, где ни списки, ни словари не дают оптимального решения. Часто это происходит, когда мне нужно быстро проверять. . .
Работа с ccache/sccache в рамках C++
Loafer 11.06.2025
Утилиты ccache и sccache занимаются тем, что кешируют промежуточные результаты компиляции, таким образом ускоряя последующие компиляции проекта. Это означает, что если проект будет компилироваться. . .
Настройка MTProxy
Loafer 11.06.2025
Дополнительная информация к инструкции по настройке MTProxy: Перед сборкой проекта необходимо добавить флаг -fcommon в конец переменной CFLAGS в Makefile. Через crontab -e добавить задачу: 0 3. . .
Изучаем Docker: что это, как использовать и как это работает
Mr. Docker 10.06.2025
Суть Docker проста - это платформа для разработки, доставки и запуска приложений в контейнерах. Контейнер, если говорить образно, это запечатанная коробка, в которой находится ваше приложение вместе. . .
Тип Record в C#
stackOverflow 10.06.2025
Многие годы я разрабатывал приложения на C#, используя классы для всего подряд - и мне это казалось естественным. Но со временем, особенно в крупных проектах, я стал замечать, что простые классы. . .
Разработка плагина для Minecraft
Javaican 09.06.2025
За годы существования Minecraft сформировалась сложная экосистема серверов. Оригинальный (ванильный) сервер не поддерживает плагины, поэтому сообщество разработало множество альтернатив. CraftBukkit. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »