[AI CS4-CS6] Удалить пронумерованные текстовые блоки

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

sylvio

Участник
Топикстартер
Сообщения
77
Реакции
5
Уважаемые коллеги,
подскажите как через скрипт выделить и удалить текстовый объект или текстовый блок, который начинается на цифру?
 
А, ну да, знак параграфа.
Наверное, самое верное искать что-то вроде 1.*, где * - любые символы.
 
Насколько я помню, по умолчанию иллюстратор греп-запросы не понимает, но можно воспользоваться, например, таким скриптом
 
  • Спасибо
Реакции: sylvio
Спасибо, буду разбираться
 
Или вам вообще весь фрейм удалить надо? 'hmmm'
 
RexEx ^\d{1,2}\. [\s\S]+ удаляет нужный текст, но остается сам блок со знаком параграфа.
Да, нужно удалить фрейм ;)
 
Ну, в самом первом приближении, навскидку как то так:
Код:
var scope = app.activeDocument.selection.length ? app.activeDocument.selection : app.activeDocument.pageItems;

var find = prompt("Find: (Text or GREP/regex)","");
if(find !== null){

   
        var changes = 0;

        for(var i=0;i<scope.length;i++){

            var text = scope[i];

            var string = text.contents;
            if(typeof string == "string"){
                if (string.match( new RegExp(find, 'g'))!=-1)
               {
                   text.remove();
                }
           
        }
    }
}
 
странно как-то работает. RegEx Не подскажете? С моим почему-то неточно удаляет.
 
Да в принципе наверное можно вообще без регекспа обойтись
Код:
var scope = app.activeDocument.selection.length ? app.activeDocument.selection : app.activeDocument.pageItems;

        for(var i=0;i<scope.length;i++){

            var text = scope[i];

            var string = text.contents;
            if(typeof string == "string"){
                if (!isNaN(parseInt(string.substr(0,1)))
               {
                   text.remove();
                }
          
        }
 
}
 
да, так лучше, но пропускает следующую строку удовлетворяющюю условию.
А если слегка усложнить задачу, чтобы скрипт искал строки, которые начинаются на цифру<точку><пробел>?
 
Добавить дополнительное условие if (string.substring(1,2)==". ") Как то так
 
А что насчет пропуска строки я не понял? Что-то не удаляет? Вообще говоря, по хорошему, цикл надо в обратном порядке крутить, с конца в начало. Иначе, программа рискует себя за задницу укусить.
 
Получился такой скрипт

Код:
var scope = app.activeDocument.selection.length ? app.activeDocument.selection : app.activeDocument.pageItems;

var find = prompt("Find: (Text or GREP/regex)","\^\\d{1,2}\\. [\\s\\S]+";

if(find !== null){

    var replace = prompt("Replace: (Text or GREP/regex)","");
    if(replace !== null){

        var changes = 0;

        for(var i=0;i<scope.length;i++){ 

            var text = scope[i];

            var string = text.contents; 
            if(typeof string == "string"){

                var newstring = string.replace( new RegExp(find, 'g'), replace);
                if (newstring != string) {
                    changes++;
                    var paragraphsArray = newstring.split("\n");
                    text.paragraphs.removeAll();
                    for(var ii=0;ii<paragraphsArray.length;ii++){ 
                         text.paragraphs.add(paragraphsArray[ii]);
                    }
                }
            }
        }
        alert( changes==1 ? "1 text object changed" : changes + " text objects changed");
    }
}
        for(var i=scope.length-1;i>=0;i--){
            var text = scope[i];
            var string = text.contents;
            if(typeof string == "string"){
                if (scope[i].contents =="")
               {
                   text.remove();
                }
        }
}
 
Первая половина с грепом лишняя.
 
так компактнее

Код:
var scope = app.activeDocument.selection.length ? app.activeDocument.selection : app.activeDocument.pageItems;

var find = '^\\d{1,2}\\. [\\s\\S]+';
if(find !== null){
 
        var changes = 0;
        for(var i = scope.length - 1; i >= 0; i--){
            var text = scope[i];
            var string = text.contents;
            if(typeof string == "string"){
                if (string.match( new RegExp(find, 'g')))
               {
                   text.remove();
                }
        }
    }
}
 
Да, так лучше
А конструкция
Код:
var scope = app.activeDocument.selection.length ? app.activeDocument.selection : app.activeDocument.pageItems;


if(find !== null){

       var changes = 0;
       for(var i = scope.length - 1; i >= 0; i--){
           var text = scope[i];
           var string = text.contents;
           if(typeof string == "string"){
               if ((!isNaN(parseInt(string.substr(0,1)))
&&(string.substring(1,2)==". "))
              {
                  text.remove();
               }
       }
   }
}
Чем плоха?
 
GREP универсальный, могу искать по другим маскам:)
Спасибо большое за помощь!
 
Статус
Закрыто для дальнейших ответов.