Busque una cadena y elimine todo el marco de texto con JavaScript para Illustrator

Puedo eliminar una capa por su nombre:

    var myDoc = app.activeDocument;
    var myLayers = myDoc.layers;

    var myLayer = myLayers["layer name"];
    myLayer.remove();

o por orden de apilamiento:

    var myLayer = myLayers[1];
    myLayer.remove();

y sé cómo encontrar y reemplazar texto con un script, así que estoy tratando de encontrar una manera de combinar estos dos y encontrar una cadena, luego elimino la capa en la que está la cadena ya que no puedo usar el nombre de la capa o el orden de apilamiento. Estoy tratando de aprender a escribir secuencias de comandos a medida que avanzo, por lo que es posible que esto no sea posible (entonces, alguien que diga que no es posible sería útil) y mi secuencia de comandos probablemente esté llena de problemas... pero esto es lo que traté de armar y no funciona. t trabajo así que aquí estoy pidiendo ayuda.

    var myDoc = app.activeDocument;
    var search_string = "words I am trying to search for";  
    var text_frames = myDoc.textFrames;  

    if (text_frames.length > 0)  
    {  
        for (var i = 0 ; i < text_frames.length; i++)  
          {  
              var this_text_frame = text_frames[i];   

               if (this_text_frame = search_string.contents)  
                   {  
                        this_text_frame.remove();  
                   }  
          }  
    }  
1) Esto no muestra ningún esfuerzo en el uso del código y parece estar buscando a alguien que escriba algo para usted. 2) No hay una pregunta clara aquí, así que no estoy seguro de cuál es tu intento. Si desea ayuda, realice una edición con una pregunta que explique lo que realmente necesita y muéstrenos lo que ha intentado y estaremos encantados de ayudarle.
Si desea participar en la discusión sobre las preguntas de código para referencia de aplicaciones: ¿Deben cerrarse las preguntas de código si no se intenta codificar?
Deje que el registro muestre que la pregunta inicial se cerró por falta de esfuerzo y voté a favor de la pregunta después de cerrarla, lo que dio como resultado que las preguntas recibieran un total de tres votos a favor. OP se encargó de editar la pregunta, revisé la edición , descubrí que se ajusta a las preguntas y respuestas de nuestro sitio y reabrí la pregunta. Dado que la pregunta ahora muestra esfuerzo y se ajusta a nuestro modelo, también más 1.

Respuestas (2)

Esto funcionará siempre que haya un fragmento de texto consistente para buscar. Se puede aplicar a una acción y por lotes.

Observe que se repite en orden inverso. Esta es una estrategia común cada vez que se repiten elementos que se eliminarán de la matriz. De lo contrario, la reducción de la longitud de la matriz interferirá con los ciclos futuros a través del ciclo.

Al usar el método de coincidencia, puede ver si una cadena está en algún lugar dentro del contenido.

El método de coincidencia también aceptará un objeto RegExp (expresión regular). Esto será útil si el texto de búsqueda cambia ligeramente pero sigue un patrón.

var doc, texts, i, count, find;

find = "MyString"; // Replace with your own string

doc = activeDocument;
texts = doc.textFrames;
count = texts.length;
for (i=count-1; i>0; i--)
{ if (texts[i].contents.match (find) == find)
  { texts[i].remove ();
  }
}

Un método sería simplemente Buscar y reemplazar, reemplazar con nada y ejecutar este script para eliminar todos los marcos de texto vacíos.

Written By Łukasz Wieczorek - hellowoo.com
you can destribute this freely via creative commons(http://creativecommons.org/licenses/by-sa/3.0/)
 but leave this message in tact, or give credit to original script.

var numberOfEmptyTextBoxes = 0;
var layersWithNoText = new Array();
if ( app.documents.length > 0 ) {
    for ( i = 0; i < app.activeDocument.textFrames.length; i++ ) {
        text = app.activeDocument.textFrames[i].textRange;
        numWords = app.activeDocument.textFrames[i].words.length;
        if (numWords == 0){ 
            layersWithNoText.push(app.activeDocument.textFrames[i]);
            numberOfEmptyTextBoxes++; 
        }
    }
    if(numberOfEmptyTextBoxes > 0){
        alert("You have " + numberOfEmptyTextBoxes + " empty text boxes. They will be deleted.");
    }
    removeTextLayersWithNoContent(layersWithNoText);
}
function removeTextLayersWithNoContent(layersWithNoText) {
    var layersWithNoText = layersWithNoText;
    for (var i = 0; i < layersWithNoText.length; i++) {
        var currentIndex = layersWithNoText[i];
        layersWithNoText[i].remove();
    };
}

Copie y pegue esto y guárdelo como .jsx

Lamentablemente, Illustrator no tiene métodos de búsqueda tan sólidos como InDesign.

El problema es que el texto que quiero eliminar varía de un archivo a otro, pero tiene una sección que sería consistente. Quería usar la sección consistente para poder llamar a todo el cuadro de texto si es posible.
@kmrtn Si varía, es probable que esto no se pueda procesar por lotes. ¿Cuál es el texto incluso? ¿Puede actualizar su pregunta con información más detallada/capturas de pantalla?