2 Replies Latest reply on Jan 9, 2014 4:45 AM by Raphael.tebarts

    FindChangeByList multi files

    romanobstuder Level 1

      Hi all

      I just tested the FindChangeByList script and it looks like it only works on your active file.

      Has anybody changed it so it works on all open files or better still on a given directory?

      Batch processing a lot of files…

      Romano

        • 1. Re: FindChangeByList multi files
          romanobstuder Level 1

          I have adapted the FindChangeByList code so it works on all open files.

           

           

           

           

          // Copyright ZITRONE Romano Studer

          // Melbourne, Australia 2012

          // www.zitrone.com.au

          // Changes to the code in order to process multyple files

           

           

          //target any InDesign

           

           

          #target "InDesign"

           

           

           

           

           

           

           

           

           

           

           

           

           

           

          //FindChangeByList.jsx

          //An InDesign CS5.5 JavaScript

          /* 

          @@@BUILDINFO@@@ "FindChangeByList.jsx" 3.0.0 15 December 2009

          */

          //Loads a series of tab-delimited strings from a text file, then performs a series

          //of find/change operations based on the strings read from the file.

          //

          //The data file is tab-delimited, with carriage returns separating records.

          //

          //The format of each record in the file is:

          //findType<tab>findProperties<tab>changeProperties<tab>findChangeOptions<tab>description

          //

          //Where:

          //<tab> is a tab character

          //findType is "text", "grep", or "glyph" (this sets the type of find/change operation to use).

          //findProperties is a properties record (as text) of the find preferences.

          //changeProperties is a properties record (as text) of the change preferences.

          //findChangeOptions is a properties record (as text) of the find/change options.

          //description is a description of the find/change operation

          //

          //Very simple example:

          //text          {findWhat:"--"}          {changeTo:"^_"}          {includeFootnotes:true, includeMasterPages:true, includeHiddenLayers:true, wholeWord:false}          Find all double dashes and replace with an em dash.

          //

          //More complex example:

          //text          {findWhat:"^9^9.^9^9"}          {appliedCharacterStyle:"price"}          {include footnotes:true, include master pages:true, include hidden layers:true, whole word:false}          Find $10.00 to $99.99 and apply the character style "price".

          //

          //All InDesign search metacharacters are allowed in the "findWhat" and "changeTo" properties for findTextPreferences and changeTextPreferences.

          //

          //If you enter backslashes in the findWhat property of the findGrepPreferences object, they must be "escaped"

          //as shown in the example below:

          //

          //{findWhat:"\\s+"}

          //

          //For more on InDesign scripting, go to http://www.adobe.com/products/indesign/scripting/index.html

          //or visit the InDesign Scripting User to User forum at http://www.adobeforums.com

          //

          main();

          function main(){

                    var myObject;

                    //Make certain that user interaction (display of dialogs, etc.) is turned on.

                    app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

                    if(app.documents.length > 0){

                              if(app.selection.length > 0){

                                        switch(app.selection[0].constructor.name){

                                                  case "InsertionPoint":

                                                  case "Character":

                                                  case "Word":

                                                  case "TextStyleRange":

                                                  case "Line":

                                                  case "Paragraph":

                                                  case "TextColumn":

                                                  case "Text":

                                                  case "Cell":

                                                  case "Column":

                                                  case "Row":

                                                  case "Table":

                                                            myDisplayDialog();

                                                            break;

                                                  default:

                                                            //Something was selected, but it wasn't a text object, so search the document.

                                                            myFindChangeByList(app.documents.item(0));

                                        }

                              }

                              else{

                      //Nothing was selected, so simply search the document.

                      var myNumberOfDocuments = app.documents.length;

                     

                      //The FindChangeList.txt file used to be aquirred inside the myFindChangeByList function. Hence we would ask for it many times.

                      //Here we ask only one time. We use the same FindChangeList.txt file for the operation on all InDesign files.

                      var myFindChangeFile = myFindFile("/FindChangeSupport/FindChangeList.txt")

                     

                      for(i=0;i<myNumberOfDocuments;i++){

                          myFindChangeByList(app.documents.item(i), myFindChangeFile);

                      }

                              }

                    }

                    else{

                              alert("No documents are open. Please open a document and try again.");

                    }

          }

          function myDisplayDialog(){

                    var myObject;

                    var myDialog = app.dialogs.add({name:"FindChangeByList"});

                    with(myDialog.dialogColumns.add()){

                              with(dialogRows.add()){

                                        with(dialogColumns.add()){

                                                  staticTexts.add({staticLabel:"Search Range:"});

                                        }

                                        var myRangeButtons = radiobuttonGroups.add();

                                        with(myRangeButtons){

                                                  radiobuttonControls.add({staticLabel:"Document", checkedState:true});

                                                  radiobuttonControls.add({staticLabel:"Selected Story"});

                                                  if(app.selection[0].contents != ""){

                                                            radiobuttonControls.add({staticLabel:"Selection", checkedState:true});

                                                  }

                                        }

                              }

                    }

                    var myResult = myDialog.show();

                    if(myResult == true){

                              switch(myRangeButtons.selectedButton){

                                        case 0:

                                                  myObject = app.documents.item(0);

                                                  break;

                                        case 1:

                                                  myObject = app.selection[0].parentStory;

                                                  break;

                                        case 2:

                                                  myObject = app.selection[0];

                                                  break;

                              }

                              myDialog.destroy();

                              myFindChangeByList(myObject);

                    }

                    else{

                              myDialog.destroy();

                    }

          }

          function myFindChangeByList(myObject, myFindChangeFile){

                    var myScriptFileName, myFindChangeFile, myFindChangeFileName, myScriptFile, myResult;

                    var myFindChangeArray, myFindPreferences, myChangePreferences, myFindLimit, myStory;

                    var myStartCharacter, myEndCharacter;

                    //var myFindChangeFile = myFindFile("/FindChangeSupport/FindChangeList.txt")

                    if(myFindChangeFile != null){

                              myFindChangeFile = File(myFindChangeFile);

                              var myResult = myFindChangeFile.open("r", undefined, undefined);

                              if(myResult == true){

                                        //Loop through the find/change operations.

                                        do{

                                                  myLine = myFindChangeFile.readln();

                                                  //Ignore comment lines and blank lines.

                                                  if((myLine.substring(0,4)=="text")||(myLine.substring(0,4)=="grep")|| (myLine.substring(0,5)=="glyph")){

                                                            myFindChangeArray = myLine.split("\t");

                                                            //The first field in the line is the findType string.

                                                            myFindType = myFindChangeArray[0];

                                                            //The second field in the line is the FindPreferences string.

                                                            myFindPreferences = myFindChangeArray[1];

                                                            //The second field in the line is the ChangePreferences string.

                                                            myChangePreferences = myFindChangeArray[2];

                                                            //The fourth field is the range--used only by text find/change.

                                                            myFindChangeOptions = myFindChangeArray[3];

                                                            switch(myFindType){

                                                                      case "text":

                                                                                myFindText(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions);

                                                                                break;

                                                                      case "grep":

                                                                                myFindGrep(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions);

                                                                                break;

                                                                      case "glyph":

                                                                                myFindGlyph(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions);

                                                                                break;

                                                            }

                                                  }

                                        } while(myFindChangeFile.eof == false);

                                        myFindChangeFile.close();

                              }

                    }

          }

          function myFindText(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions){

                    //Reset the find/change preferences before each search.

                    app.changeTextPreferences = NothingEnum.nothing;

                    app.findTextPreferences = NothingEnum.nothing;

                    var myString = "app.findTextPreferences.properties = "+ myFindPreferences + ";";

                    myString += "app.changeTextPreferences.properties = " + myChangePreferences + ";";

                    myString += "app.findChangeTextOptions.properties = " + myFindChangeOptions + ";";

                    app.doScript(myString, ScriptLanguage.javascript);

                    myFoundItems = myObject.changeText();

                    //Reset the find/change preferences after each search.

                    app.changeTextPreferences = NothingEnum.nothing;

                    app.findTextPreferences = NothingEnum.nothing;

          }

          function myFindGrep(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions){

                    //Reset the find/change grep preferences before each search.

                    app.changeGrepPreferences = NothingEnum.nothing;

                    app.findGrepPreferences = NothingEnum.nothing;

                    var myString = "app.findGrepPreferences.properties = "+ myFindPreferences + ";";

                    myString += "app.changeGrepPreferences.properties = " + myChangePreferences + ";";

                    myString += "app.findChangeGrepOptions.properties = " + myFindChangeOptions + ";";

                    app.doScript(myString, ScriptLanguage.javascript);

                    var myFoundItems = myObject.changeGrep();

                    //Reset the find/change grep preferences after each search.

                    app.changeGrepPreferences = NothingEnum.nothing;

                    app.findGrepPreferences = NothingEnum.nothing;

          }

          function myFindGlyph(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions){

                    //Reset the find/change glyph preferences before each search.

                    app.changeGlyphPreferences = NothingEnum.nothing;

                    app.findGlyphPreferences = NothingEnum.nothing;

                    var myString = "app.findGlyphPreferences.properties = "+ myFindPreferences + ";";

                    myString += "app.changeGlyphPreferences.properties = " + myChangePreferences + ";";

                    myString += "app.findChangeGlyphOptions.properties = " + myFindChangeOptions + ";";

                    app.doScript(myString, ScriptLanguage.javascript);

                    var myFoundItems = myObject.changeGlyph();

                    //Reset the find/change glyph preferences after each search.

                    app.changeGlyphPreferences = NothingEnum.nothing;

                    app.findGlyphPreferences = NothingEnum.nothing;

          }

          function myFindFile(myFilePath){

                    var myScriptFile = myGetScriptPath();

                    var myScriptFile = File(myScriptFile);

                    var myScriptFolder = myScriptFile.path;

                    myFilePath = myScriptFolder + myFilePath;

                    if(File(myFilePath).exists == false){

                              //Display a dialog.

                              myFilePath = File.openDialog("Choose the file containing your find/change list");

                    }

                    return myFilePath;

          }

          function myGetScriptPath(){

                    try{

                              myFile = app.activeScript;

                    }

                    catch(myError){

                              myFile = myError.fileName;

                    }

                    return myFile;

          }

          • 2. Re: FindChangeByList multi files
            Raphael.tebarts

            Hey,

             

            I have the same problem here.

             

            Can you tell me a code wich I can use on Adobe CS4?

             

            would be amazing!

             

            Thanks

             

            Raphael