Поясните скрипт пожалуйста

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

Verion

Участник
Топикстартер
Сообщения
10
Реакции
0
Приветствую всех.
Есть скрипт, который подрезает текст во фрейме в зависимости от названия файла индизайна. Так как только только начал разбираться в скриптописании, не могу толком понять, что да как он делает, пожалуйста опишите, что делает каждая строчка. И ещё один вопрос как сделать зависимость не от названия документа, а от номера страницы, на которой расположен выделенный текстовый фрейм?
Ниже текст скрипта...
Код:
var daysOfWeek = [
"Понедельник",
"Вторник",
"Среда",
"Четверг",
"Пятница",
"Суббота",
"Воскресенье"
]

with(app) {
try { var myDoc = activeDocument; } catch(error) { exit(); }
var myDay;
try {
var myDayOfWeek = myDoc.textFrames.itemByName("sDay").contents;
for(var i=0; i<daysOfWeek.length; i++) {
if(myDayOfWeek.toLowerCase() == daysOfWeek.toLowerCase())
myDay = i;
}
} catch(error) { alert("Не найдены фреймы с меткой sDay."); exit(); }

if(!selection.length) exit();

for(var mySelectionCounter=0; mySelectionCounter<selection.length; mySelectionCounter++) {
if(selection[mySelectionCounter].constructor.name == "TextFrame") {
myTextFrame = selection[mySelectionCounter];
with(myTextFrame) {
if(parentStory.itemLink) {
myLabelName = parentStory.itemLink.name.replace(/^\(R\)/, "").replace(/^(.+)\.(.+)$/, "s$1");
try {
var myTargetFrame = myDoc.textFrames.itemByName(myLabelName);
myTargetFrame.parentStory.contents = cropTheDay(myTextFrame, myDay);
} catch(error) {
alert("Не найден фрейм с меткой "+myLabelName);
}
} else {
alert("C выбранным фреймом не связан текстовый файл. ")
}
}
}
}
}

function cropTheDay(myTextFrame, myDay) {
var copyText = false;
var newText = "";
var myDayText = new RegExp("^"+daysOfWeek[myDay].toLowerCase()+", ");
if(myDay != 6) {
var myNextDayText = new RegExp("^"+daysOfWeek[myDay+1].toLowerCase()+", ");
}
with(myTextFrame.parentStory) {
//~ $.writeln(paragraphs.length);
for(var myParagraphCounter=0; myParagraphCounter<paragraphs.length; myParagraphCounter++) {
myParagraph = paragraphs[myParagraphCounter];
with(myParagraph) {
if(myDayText.test(contents.toLowerCase())) {
copyText =true;
continue;
}
if(myDay != 6 && myNextDayText.test(contents.toLowerCase())) copyText =false;
if(copyText) newText += contents;
}
}
return newText;
}
}
 
Последнее редактирование модератором:
пожалуйста опишите, что делает каждая строчка
var daysOfWeek = [ // Объявить переменную с именем daysOfWeek и присвоить ей...
"Понедельник", // ...массив, первым элементом которого будет строка "Понедельник", ...
"Вторник", // ... вторым элементом которого будет строка "Вторник", ...
"Среда", // ... третьим элементом которого будет строка "Среда", ...
"Четверг", // ... четверым элементом которого будет строка "Четверг", ...
"Пятница", // ... пятым элементом которого будет строка "Пятница", ...
"Суббота", // ... шестым элементом которого будет строка "Суббота", ...
"Воскресенье" // ... седьмым элементом которого будет строка "Воскресенье", ...
] // ... уфф, конец массива, замаялся, дальше RTFM 'rtfm'
как сделать зависимость не от названия документа, а от номера страницы
%8 А что там зависит от названия документа???
 
%8 А что там зависит от названия документа???
По факту что делает скрипт, есть файлы индизайна(1_понедельник, 2_вторник и т.д.) есть текстовые файлы с телепрограммой(внутри: Понедельник... 8.00 Новости и так далеее программа... Вторник... и так далее программа... Среда...). Ты подгружаешь в текстовый фрейм документ, выделяешь его и запускаешь скрипт - в результате он оставляет только телепрограмму за понедельник для файла индизайна 1_понедельник и так далее вторник для 2_вторника.
 
Ну так не от имени файла же, а от имени фрейма!
Вот:
Код:
var myTargetFrame = myDoc.textFrames.itemByName(myLabelName);
 
Ну так не от имени файла же, а от имени фрейма!
Что подтверждает мои слабые познания в скриптинге)
Просто так мне объяснил его работу другой человек.

Тогда от какого именно фрейма он зависит? Посматривает ли он все в поисках фрейма с надписью например "понедельник" или записано его местоположение например...
Опять же вопрос как сделать так, чтобы он искал тот же фрейм понедельник только на первой странице.
Или может какие то скрытые метки стоят во фреймах?
 
Или может какие то скрытые метки стоят во фреймах?
У каждого фрейма есть имя. В данном случае, как я понимаю, оно наследуется от имени помещенного файла. Хотя, на мой взгляд, какое то сомнительное допущение. Метки точно никаким дополнительным софтом специально не именовали?
 
У каждого фрейма есть имя. В данном случае, как я понимаю, оно наследуется от имени помещенного файла. Хотя, на мой взгляд, какое то сомнительное допущение. Метки точно никаким дополнительным софтом специально не именовали?
К сожалению не знаю... сейчас чисто помучил скрипт, он закидывает полученный после преобразования текст в определённый фрейм, то есть программа для 1 канала попадает во фрейм для 1 канала, куда бы я изначально не погружал текстовик.
 
Фреймы в исходном индизайновском файле, к которому вы применяете скрипт уже поименованны. На этом и основывается работа скрипта.
 
Хорошо, тогда вопрос как фреймы проименовать?(увы гугл ничего не дал)
 
Да ну? Четвертая ссылка ведет прямо сюда
Почитал, у меня CS4, я конечно пробовал в 6-м открывать, но фреймы не были проименованы, видимо каким-то скриптом они именовались, есть мысли каким?
 
Ну как можно судить об этом, не видя исходного файла?
Возможно, действительно от импортированного файла наследуются а возможно и именуются специальным скриптом.
Я не пойму ваших целей - вы пытаетесь, абсолютно не разбираясь в скриптинге и программировании, переделать существующий скрипт, написать под него (на базе него) какой то новый? Напоминает анекдот:
- Доктор, у меня стреляет в боку.
- Ok, гугл, "стрельба в Баку"
'))'
 
Ну в скриптинге я разбираюсь, но не в этом языке... когда то я писал боты для игры Aion официального сервера на UO pilot'е и ничего работало)
Может посоветуешь тогда "учебник" или что-то похожее)
 
Понял по большей части как обойтись без особой переписи скрипта, скажи пожалуйста какой командой можно запустить другой скрипт, то есть предположим у меня 10 отдельных скриптов, которые нужно запустить последовательно, а хотелось бы щёлкнуть один и все 10 по очереди запустятся)
 
Наверное никак, экшнов в индизайне нет.
Разве что, объединить десять скриптов в один ;)
 
  • Спасибо
Реакции: Verion
ну вот, например, запускает скрипт из той же папки,
где сам находится

Код:
var filePath = (new File($.fileName)).parent;
var myFile1 = new File (filePath+'/alert1.jsx');
var myFile2 = new File (filePath+'/alert2.jsx');

if (myFile1.exists && myFile2.exists)
{
    //Call another script
   app.doScript(myFile1, ScriptLanguage.JAVASCRIPT)
   app.doScript(myFile2, ScriptLanguage.JAVASCRIPT)
}
 
Ну так это и есть новый скрипт, вызывающий десять других.
Не проще объединить все в один?
 
Статус
Закрыто для дальнейших ответов.