[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt [Skript zum "Download"]Suche-/Ersetze-Skript mit Userinterface zur Pflege - CS5

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

[Skript zum "Download"]Suche-/Ersetze-Skript mit Userinterface zur Pflege - CS5

SamiSalami
Beiträge gesamt: 66

24. Mär 2011, 11:03
Beitrag # 1 von 2
Bewertung:
(1467 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebe Skriptler :-)

Ich denke es ist mal an der Zeit eines meiner Skripte zu teilen.
Ich weiß, dass es bereits einige Skripte gibt, die sich mit dem Thema "Suchen & Ersetzen" befassen.
Mein Skript entstand aus dem Wunsch heraus viele Suchebefehle auf einmal durchzuführen, obwohl es bereits ein Skript für diesen Wunsch gab, entschied ich mich, es selbst umzusetzen, um näher in das Thema indesign scripting einzusteigen.
Da aber nunmal das Pflegen der Textdatei etwas lästig und gerade für nicht Fachkundige unpraktikabel erschien, habe ich mit dem Thema Userinterfaces in InDesign auseinandergesetzt und eine Möglichkeit gegeben, die Suchbefehle direkt in inDesign zu alterieren.

Hier ein Screenshot, auf dem entsprechende Optionen gezeigt sind:
http://content.screencast.com/.../2011-03-24_1043.png

Dieses Skript eignet sich für die Ausführung vieler Suchen-/Ersetzen-Befehle mit einfacher Pflege, in welcher Befehle auch sehr simpel für eine Suche deaktiviert werden können.

Dieses Skript eignet sich nicht für die Suche nach einzelnen Textstellen formatierten Texten.

Hinzukommend handelt es sich bei dem Skript um mein erstes mit Userinterface, dementsprechend "lang" ist es geworden.
Auch generell ist mein Wissenstand noch lange nicht auf dem der Profis hier, also kann es durchaus sein, dass ich ungünstige/umständliche Methoden gewählt habe - umso glücklicher wäre ich über Feedback!

Achja: Das Skript funktioniert nicht unter CS3(CS4 weiß ich nicht, ungetestet), ich besitze eine Version für CS3, die allerdings ohne Listboxen arbeitet.
Und da ich es nicht in meinem Zeitrahmen geschafft habe einen Scrollbalken für Fenster zu basteln, kann das Einstellungsfenster schonmal ziemlich hoch werden *lach*
Also es ist eher unpraktisch bei zu vielen Befehlen, sollte trotzdem jemand Interesse an der Version haben, kann er sich gerne melden.

Nun der "Download" (als (noch-)nicht-Member darf ich keine Dateien hochladen, was natürlich aus dem Aspekt heraus dass ich ein Skript zur Verfügung stellen möchte, irgendwie doof ist!):

suchskript_2011_cs5.jsx
Code
#targetengine "adobe" 
myFile = readFile();
myArray = loadFileArray(myFile);
createStartWindow (myArray);
function readFile()
{
var myFile = File.openDialog("Datei öffnen:", "TXT Files:*.TXT;");
myFile.open("r");
return myFile;
}

function loadFileArray(myFile)
{
var contents = new Array();
var heads = new Array();
var myArray = new Array();

myFile.open("r");

var lineCount = 0;
while(myDoc = myFile.readln()){
if (myDoc.search(/<head>/) == -1){
contents[lineCount] = myDoc.split(",");
lineCount++;
}
else
{
myDoc = myDoc.replace (/<head>/, "");
myDoc = myDoc.replace (/<\/head>/, "");
heads[lineCount] = myDoc;
}
}
myArray[0] = contents;
myArray[1] = heads;
return myArray;
}

function writeTXT(result, myFile){

myFile.open ("w");
if(myFile.write(result))
{
return true;
}
else
{
return false;
}
}


function editHeadline(line, myArray, value)
{
for (var i = 0; i < myArray[0].length; i++)
{
if (i == line)
{
myArray[1][i] = value;
}
}
return myArray;
}

function addLine(line, myArray, findWhat, replaceBy, comment, word, grep, active)
{
myLine = new Array();
myLine[0] = findWhat;
myLine[1] = replaceBy;
myLine[2] = comment;
myLine[3] = word;
myLine[4] = grep;
myLine[5] = active;

if (line == 0)
{
myArray[0].unshift(myLine);
}
else
{
myArray[0].push(myLine);
}
return myArray;
}

function editLine(line, myArray, findWhat, replaceBy, comment, word, grep, active)
{
for (var i = 0; i < myArray[0].length; i++)
{
if (i == line)
{
myArray[0][i][0] = findWhat;
myArray[0][i][1] = replaceBy;
myArray[0][i][2] = comment;
myArray[0][i][3] = word;
myArray[0][i][4] = grep;
myArray[0][i][5] = active;
}
}
return myArray;
}

function deleteLine(line, myArray)
{
for (var i = 0; i < myArray[0].length; i++)
{
if (i == line)
{
myArray[0].splice(i, 1);
}
}
return myArray;
}

function createTemplate(myArray)
{
var result = "";
for (var i = 0; i < myArray[0].length; i++)
{
if (myArray[1][i] != "" && myArray[1][i] != undefined && myArray[1][i] != null)
{
result = result + "<head>" + myArray[1][i] + "</head>\r";
}
result = result + myArray[0][i][0] + "," + myArray[0][i][1] + "," + myArray[0][i][2] +","+ myArray[0][i][3] + "," + myArray[0][i][4] + "," + myArray[0][i][5] + "\r";
}
return result;
}
function searchGrep(findWhat, replaceBy, type)
{
app.findGrepPreferences = app.changeGrepPreferences = null;
app.findGrepPreferences.findWhat = findWhat;
app.changeGrepPreferences.changeTo = replaceBy;
if (type == "document")
{
app.activeDocument.changeGrep();
}
else if(type == "all")
{
for (var i = 0; i < app.documents.length; i++)
{
app.documents[i].changeGrep();
}
}
else
{
alert("Diese Aktion existiert (noch?) nicht!");
}
}
function searchText(findWhat, replaceBy, wordoption, type)
{
app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.findWhat = findWhat;
app.changeTextPreferences.changeTo = replaceBy;
app.findChangeTextOptions.wholeWord = wordoption;
app.findChangeTextOptions.caseSensitive = true;
if (type == "document")
{
app.activeDocument.changeText();
}
else if(type == "all")
{
for (var i = 0; i < app.documents.length; i++)
{
app.documents[i].changeText();
}
}
else
{
alert("Diese Aktion existiert (noch?) nicht!");
}
}
var ProgressBar = function(/*str*/title)
{
var w = new Window('palette', ' '+title, {x:0, y:0, width:340, height:60}),
pb = w.add('progressbar', {x:20, y:12, width:300, height:12}, 0, 100),
st = w.add('statictext', {x:10, y:36, width:320, height:20}, '');
st.justify = 'center';
w.center();
this.reset = function(msg,maxValue)
{
st.text = msg;
pb.value = 0;
pb.maxvalue = maxValue||0;
pb.visible = !!maxValue;
w.show();
};
this.hit = function() {++pb.value;};
this.hide = function() {w.hide();};
this.close = function() {w.close();};
};

function createStartWindow(myArray)
{
if (myArray == "" || myArray == "undefined" || myArray == null)
{
myFile = readFile();
myArray = loadFileArray(myFile);
}
var myStartWindow = new Window ("palette");
myStartWindow.add("statictext", undefined, "Bitte wählen:");

var myButtonGroup = myStartWindow.add ("group");
myButtonGroup.orientation = "column";
var options = myButtonGroup.add("button", [0,0,150,20], "Einstellungen");
var execute = myButtonGroup.add("button", [0,0,150,20], "Ausführen");
var executeonall = myButtonGroup.add("button",[0,0,150,20],"Auf alle ausführen");
var close = myButtonGroup.add("button", [0,0,150,20], "Schließen", {name: "cancel"});
close.onClick = function()
{
myStartWindow.close();
exit();
}
options.onClick = function()
{
createOptionsWindow (myArray);
}
execute.onClick = function()
{
var pBar = new ProgressBar("Suche & Ersetze");
myArray = loadFileArray(myFile);
pBar.reset("Führe durch...", myArray[0].length);
for (var i = 0; i < myArray[0].length; i++)
{
pBar.hit();
$.sleep(10);
if(myArray[0][i][5] == "j")
{
var findWhat = myArray[0][i][0];
var replaceBy = myArray[0][i][1];
if(myArray[0][i][3] == "j")
{
var wordoption = true;
}
else
{
var wordoption = false;
}
if(myArray[0][i][4] == "j")
{
$.sleep(10);
searchGrep(findWhat, replaceBy, "document");
}
else
{
$.sleep(10);
searchText (findWhat, replaceBy, wordoption, "document");
}
}
}
}
executeonall.onClick = function()
{
var pBarOnAll = new ProgressBar("Suche & Ersetze");
myArray = loadFileArray(myFile);
pBarOnAll.reset("Führe durch...", myArray[0].length);
for (var i = 0; i < myArray[0].length; i++)
{
pBarOnAll.hit();
$.sleep(10);
if(myArray[0][i][5] == "j")
{
var findWhat = myArray[0][i][0];
var replaceBy = myArray[0][i][1];
if(myArray[0][i][3] == "j")
{
var wordoption = true;
}
else
{
var wordoption = false;
}
if(myArray[0][i][4] == "j")
{
$.sleep(10);
searchGrep(findWhat, replaceBy, "all");
}
else
{
$.sleep(10);
searchText (findWhat, replaceBy, wordoption, "all");
}
}
}
}
myStartWindow.show ();
}
function createOptionsWindow(myArray)
{
if (myArray == "" || myArray == "undefined" || myArray == null)
{
myFile = readFile();
myArray = loadFileArray(myFile);
}
var myEditHeadButtons = new Array();
var editHeadButtonCount = 0;

var myOptionWindow = new Window ("dialog", "Einstellungen", undefined,{scrolling: true});
myPanel = myOptionWindow.add("panel");
myPanel.orientation = "column";

for (var i =0; i < myArray[0].length; i++)
{
if (myArray[1][i] != "" && myArray[1][i] != undefined && myArray[1][i] != null)
{
var myHeadGroup= myPanel.add("group");
myHeadGroup.orientation = "row";
myHeadGroup.alignment = "left";
myHeadGroup.add("statictext", undefined, myArray[1][i]);
myEditHeadButtons[editHeadButtonCount] = myHeadGroup.add("button",[0,0,50,20],"edit");
myEditHeadButtons[editHeadButtonCount].name = i;
myEditHeadButtons[editHeadButtonCount].onClick = function()
{
line = this.name;
myArray = createEditHeadlineWindow(line, myArray);
myOptionWindow.close();
createOptionsWindow(myArray);

}
editHeadButtonCount++;
var myList = myPanel.add("listbox", undefined, "",{numberOfColumns: 6, showHeaders: true,columnTitles: ["Finde", "Ersetze Durch", "Kommentar","Wortsuche", "Grep", "Aktiv"],columnWidths: [100,100,100,100, 100, 100]});
}
with (myList.add("Item", myArray[0][i][0]))
{
subItems[0].text = myArray[0][i][1];
subItems[1].text = myArray[0][i][2];
if (myArray[0][i][3] == "j")
{
subItems[2].text = "Ja";
}
else
{
subItems[2].text = "Nein";
}
if (myArray[0][i][4] == "j")
{
subItems[3].text = "Ja";
}
else
{
subItems[3].text = "Nein";
}
if (myArray[0][i][5] == "j")
{
subItems[4].text = "Ja";
}
else
{
subItems[4].text = "Nein";
}
}
}
myList.onDoubleClick = function()
{
line = myList.selection.index;
myArray = createEditLineWindow(line, myArray);
myOptionWindow.close();
createOptionsWindow(myArray);
}
var addLineButton = myPanel.add("button", undefined, "Neuer Eintrag");
addLineButton.alignment = "left";
var buttonGroup = myPanel.add("group");
var closeOptions = buttonGroup.add("button", [0,0,100,20], "Schließen");
var save = buttonGroup.add("button", [0,0,100,20], "Speichern");

addLineButton.onClick = function()
{
myArray = createAddLineWindow(myArray);
myOptionWindow.close();
createOptionsWindow(myArray);
}

save.onClick = function()
{
result = createTemplate(myArray);
writeTXT(result,myFile);
alert("Änderungen gespeichert!");
}

closeOptions.onClick = function()
{
var myOldArray = new Array();
myOldArray = loadFileArray(myFile);
saved = true;
if (myOldArray.length == myArray.length && myOldArray[0].length == myArray[0].length && myOldArray[1].length == myArray[1].length)
{
for (var i = 0; i < myArray[0].length; i++)
{
if (myArray[0][i][0] != null && myArray[0][i][0] != "undefined" && myOldArray[0][i][0] != null && myOldArray[0][i][0] != "undefined")
{
if (myArray[0][i][0] != myOldArray[0][i][0])
{
saved = false;
}
if (myArray[0][i][1] != myOldArray[0][i][1])
{
saved = false;
}
if (myArray[0][i][2] != myOldArray[0][i][2])
{
saved = false;
}
if (myArray[0][i][3] != myOldArray[0][i][3])
{
saved = false;
}
if (myArray[0][i][4] != myOldArray[0][i][4])
{
saved = false;
}
if (myArray[0][i][5] != myOldArray[0][i][5])
{
saved = false;
}
if (myArray[1][i] != myOldArray[1][i])
{
saved = false;
}
}
}
}
else
{
saved = false;
}
if (saved == true)
{
myOptionWindow.close();
}
else
{
var warningWindow = new Window ("dialog", "Nichtgespeicherte Änderungen gefunden");
myWarningText = warningWindow.add("staticText", undefined, "Wollen Sie das Fenster wirklich schließen?\rDie nicht gespeicherten Änderungen gehen verloren!");
warningWindow.add("button", undefined, "Ja", {name:"ok"});
warningWindow.add("button", undefined, "Abbrechen", {name:"cancel"});
if (warningWindow.show() == 1)
{
warningWindow.close();
myOptionWindow.close();
}
}
}
myOptionWindow.show();
}
function createEditHeadlineWindow(line, myArray)
{
for (var i = 0; i < myArray[0].length; i++)
{
if (i == line)
{
var headvalue = myArray[1][i];
}
}
var myEditHeadlineWindow = new Window("dialog", "Headline ändern");
var myEditHeadlineGroup = myEditHeadlineWindow.add("group");
var myInput = myEditHeadlineGroup.add("edittext", undefined, headvalue);
myInput.characters = 20;
myEditHeadlineGroup.add("button", undefined, "OK");
myEditHeadlineGroup.add("button", undefined, "Cancel");
if (myEditHeadlineWindow.show() == 1)
{
myArray = editHeadline(line, myArray, myInput.text);
return myArray;
}
else
{
myEditHeadlineWindow.close();
return myArray;
}
}
function createEditLineWindow(line, myArray)
{
var clicked = false;
for (var i = 0; i < myArray[0].length; i++)
{
if (i == line)
{
var findWhat = myArray[0][i][0];
var replaceBy = myArray[0][i][1];
var comment = myArray[0][i][2];
var word = myArray[0][i][3];
var grep = myArray[0][i][4];
var active = myArray[0][i][5];
}

}
var myEditLineWindow = new Window("dialog", "Befehl bearbeiten");

var myEditLinePanel = myEditLineWindow.add("panel");
myEditLinePanel.orientation = "column";
var DeleteLineButton = myEditLinePanel.add("button", undefined, "Eintrag löschen");
DeleteLineButton.alignment = "left";
DeleteLineButton.onClick = function()
{
myArray = deleteLine(line, myArray);
myEditLineWindow.close();
}

var EditFindWhat = myEditLinePanel.add("group");
EditFindWhat.orientation = "row";
var findWhatLabel = EditFindWhat.add("statictext", undefined, "Finde:");
var findWhatInput = EditFindWhat.add("edittext", undefined, findWhat);
findWhatInput.characters = 20;
findWhatLabel.characters = 10;

var EditReplaceBy = myEditLinePanel.add("group");
EditReplaceBy.orientation = "row";
var replaceByLabel = EditReplaceBy.add("statictext", undefined, "Ersetze durch:");
var replaceByInput = EditReplaceBy.add("edittext", undefined, replaceBy);
replaceByInput.characters = 20;
replaceByLabel.characters = 10;

var EditComment = myEditLinePanel.add("group");
EditComment.orientation = "row";
var commentLabel = EditComment.add("statictext", undefined, "Kommentar:");
var commentInput = EditComment.add("edittext", undefined, comment);
commentInput.characters = 20;
commentLabel.characters = 10;

var EditWord = myEditLinePanel.add("group");
EditWord.orientation = "row";
EditWord.alignment = "left";
var wordLabel = EditWord.add("statictext", undefined, "Wortsuche:");
var WordYesRadio = EditWord.add("radiobutton", undefined, "ja");
var WordNoRadio = EditWord.add("radiobutton", undefined, "nein");
wordLabel.characters = 10;
if (word == "j")
{
WordYesRadio.value = true;
}
else
{
WordNoRadio.value = true;
}
var EditGrep = myEditLinePanel.add("group");
EditGrep.orientation = "row";
EditGrep.alignment = "left";
var grepLabel = EditGrep.add("statictext", undefined, "Grep:");
var grepYesRadio = EditGrep.add("radiobutton", undefined, "ja");
var grepNoRadio = EditGrep.add("radiobutton", undefined, "nein");
grepLabel.characters = 10;
if (grep == "j")
{
grepYesRadio.value = true;
}
else
{
grepNoRadio.value = true;
}

var EditStatus = myEditLinePanel.add("group");
EditStatus.orientation = "row";
EditStatus.alignment = "left";
var statusLabel = EditStatus.add("statictext", undefined, "Aktiv:");
var ActiveYesRadio = EditStatus.add("radiobutton", undefined, "ja");
var ActiveNoRadio = EditStatus.add("radiobutton", undefined, "nein");
statusLabel.characters = 10;
if (active == "j")
{
ActiveYesRadio.value = true;
}
else
{
ActiveNoRadio.value = true;
}

var EditLineButtons = myEditLinePanel.add("group");
EditLineButtons.orientation = "row";
var SaveButton = EditLineButtons.add("button", undefined, "Speichern");
var CloseButton = EditLineButtons.add("button", undefined, "Abbrechen", {name:"cancel"});

SaveButton.onClick = function()
{
if (WordYesRadio.value == true)
{
word = "j";
}
else
{
word = "n";
}
if (grepYesRadio.value == true)
{
grep = "j";
}
else
{
grep = "n";
}
if (ActiveYesRadio.value == true)
{
active = "j";
}
else
{
active = "n";
}
myArray = editLine(line, myArray, findWhatInput.text, replaceByInput.text, commentInput.text, word, grep,active);
myEditLineWindow.close();
}
myEditLineWindow.show();
return myArray;
}

function createAddLineWindow(myArray)
{
var myAddLineWindow = new Window("dialog", "Neuer Befehl");
var myAddLinePanel = myAddLineWindow.add("panel");
myAddLinePanel.orientation = "column";

var EditLine = myAddLinePanel.add("group");
EditLine.orientation = "row";
EditLine.alignment = "left";
var selectLabel = EditLine.add("statictext", undefined, "Zeile:");
var selectList = EditLine.add("dropdownlist", undefined, ["Am Anfang", "Am Ende"]);
selectList.selection = 1;
selectLabel.characters = 10;

var EditFindWhat = myAddLinePanel.add("group");
EditFindWhat.orientation = "row";
var findWhatLabel = EditFindWhat.add("statictext", undefined, "Finde:");
var findWhatInput = EditFindWhat.add("edittext");
findWhatInput.characters = 20;
findWhatLabel.characters = 10;

var EditReplaceBy = myAddLinePanel.add("group");
EditReplaceBy.orientation = "row";
var replaceByLabel = EditReplaceBy.add("statictext", undefined, "Ersetze durch:");
var replaceByInput = EditReplaceBy.add("edittext");
replaceByInput.characters = 20;
replaceByLabel.characters = 10;

var EditComment = myAddLinePanel.add("group");
EditComment.orientation = "row";
var commentLabel = EditComment.add("statictext", undefined, "Kommentar:");
var commentInput = EditComment.add("edittext");
commentInput.characters = 20;
commentLabel.characters = 10;

var EditWord = myAddLinePanel.add("group");
EditWord.orientation = "row";
EditWord.alignment = "left";
var wordLabel = EditWord.add("statictext", undefined, "Wortsuche:");
var WordYesRadio = EditWord.add("radiobutton", undefined, "ja");
var WordNoRadio = EditWord.add("radiobutton", undefined, "nein");
wordLabel.characters = 10;

var EditGrep = myAddLinePanel.add("group");
EditGrep.orientation = "row";
EditGrep.alignment = "left";
var grepLabel = EditGrep.add("statictext", undefined, "Grep:");
var grepYesRadio = EditGrep.add("radiobutton", undefined, "ja");
var grepNoRadio = EditGrep.add("radiobutton", undefined, "nein");
grepLabel.characters = 10;

var EditStatus = myAddLinePanel.add("group");
EditStatus.orientation = "row";
EditStatus.alignment = "left";
var statusLabel = EditStatus.add("statictext", undefined, "Aktiv:");
var ActiveYesRadio = EditStatus.add("radiobutton", undefined, "ja");
var ActiveNoRadio = EditStatus.add("radiobutton", undefined, "nein");
statusLabel.characters = 10;

var AddLineButtons = myAddLinePanel.add("group");
AddLineButtons.orientation = "row";
var SaveButton = AddLineButtons.add("button", undefined, "Speichern");
var CloseButton = AddLineButtons.add("button", undefined, "Abbrechen", {name:"cancel"});

SaveButton.onClick = function()
{
if (WordYesRadio.value == true)
{
word = "j";
}
else
{
word = "n";
}
if (grepYesRadio.value == true)
{
grep = "j";
}
else
{
grep = "n";
}
if (ActiveYesRadio.value == true)
{
active = "j";
}
else
{
active = "n";
}
selection = selectList.selection.toString();
if (selection.match("Anfang"))
{
line = 0;
}
else
{
line = myArray[0].length + 1;
}
myArray = addLine(line, myArray, findWhatInput.text, replaceByInput.text, commentInput.text, word, grep, active);
myAddLineWindow.close();
}
myAddLineWindow.show();
return myArray;

}


Hier der Inhalt für die Beispiel.txt:

Code
<head>Allgemein</head> 
lulu,bibi,n,n,n,j
1,baba,n,n,n,j
kiki,bibi,hjkljkl,n,n,j
guru,bibi,n,n,n,j
ele,bibi,n,n,n,j


Beim Starten des Skriptes werdet ihr aufgefordert eine Text-Datei einzulesen. Hierfür könnt ihr die obige beliebig abspeichern. Unter Einstellungen können dann die Suchbefehle gepflegt werden.
Der Titel ist nur zur Info gedacht. Dort kann der Nutzer sich einen Namen eintragen, um zu wissen, welche Datei er gerade bearbeitet.
Der Head ist Pflicht in der Text-Datei (das werde ich vielleicht noch ändern).

Solltet ihr Änderungen in den Einstellungen vornehmen und "schließen" wählen, weist euch das Skript auf nicht gespeicherte Änderungen hin.


"Ausführen" führt auf das aktive Dokument aus.
"Auf alle ausführen" führt auf alle geöffneten Dokumente aus.

Zeilen bearbeiten, durch Doppelklick auf diese.


Ich weiß nicht, ob jemand etwas damit anfangen kann, aber ich freue mich über Feedback - falls! :-)

Liebe Grüße,
Sami


EDIT:

Noch ein Hinweis.
Da ich da so für mich dran gearbeitet habe, ist der Code - wie ihr bereits gesehen habt - noch nicht wirklich kommentiert/dokumentiert. Das werde ich auf jeden Fall noch nachholen!

(Dieser Beitrag wurde von SamiSalami am 24. Mär 2011, 11:22 geändert)
X

[Skript zum "Download"]Suche-/Ersetze-Skript mit Userinterface zur Pflege - CS5

SamiSalami
Beiträge gesamt: 66

24. Mär 2011, 12:31
Beitrag # 2 von 2
Beitrag ID: #467595
Bewertung:
(1438 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hier nun noch einmal mit den nötigsten Kommentaren um einen kleinen Überblick zu bewahren :-)

Code
// german script for searching and replacing text in one ore more documents for indesign cs5 
// strings are saved in a text file, which can be altered via the given interface in "options" ("Einstellungen")
// ©Samjessa Lewy, 2011
// this script is non-commercial and free to use; it may be altered or changed in any way - but is not for sale!


// loading targetengine for the use of a palette
#targetengine "adobe"
// user will be asked to choose the target text file
myFile = readFile();
// for further processing the informations in the text file will be saved in an array
myArray = loadFileArray(myFile);
// the start window (actually a palette) is called
createStartWindow (myArray);

// calls a dialogue to choose a text file
function readFile()
{
var myFile = File.openDialog("Datei öffnen:", "TXT Files:*.TXT;");
myFile.open("r");
return myFile;
}

// creates an array from given text file
function loadFileArray(myFile)
{
var contents = new Array();
var heads = new Array();
var myArray = new Array();

myFile.open("r");

var lineCount = 0;
while(myDoc = myFile.readln()){
if (myDoc.search(/<head>/) == -1){
contents[lineCount] = myDoc.split(",");
lineCount++;
}
else
{
myDoc = myDoc.replace (/<head>/, "");
myDoc = myDoc.replace (/<\/head>/, "");
heads[lineCount] = myDoc;
}
}
myArray[0] = contents;
myArray[1] = heads;
return myArray;
}

// writes the target text file with given result string
function writeTXT(result, myFile){

myFile.open ("w");
if(myFile.write(result))
{
return true;
}
else
{
return false;
}
}

// changes headline in the target line of the array
function editHeadline(line, myArray, value)
{
for (var i = 0; i < myArray[0].length; i++)
{
if (i == line)
{
myArray[1][i] = value;
}
}
return myArray;
}

// adds new line to the array
function addLine(line, myArray, findWhat, replaceBy, comment, word, grep, active)
{
myLine = new Array();
myLine[0] = findWhat;
myLine[1] = replaceBy;
myLine[2] = comment;
myLine[3] = word;
myLine[4] = grep;
myLine[5] = active;

if (line == 0)
{
myArray[0].unshift(myLine);
}
else
{
myArray[0].push(myLine);
}
return myArray;
}

// changes target line in the array with given information
function editLine(line, myArray, findWhat, replaceBy, comment, word, grep, active)
{
for (var i = 0; i < myArray[0].length; i++)
{
if (i == line)
{
myArray[0][i][0] = findWhat;
myArray[0][i][1] = replaceBy;
myArray[0][i][2] = comment;
myArray[0][i][3] = word;
myArray[0][i][4] = grep;
myArray[0][i][5] = active;
}
}
return myArray;
}

// removes line from array
function deleteLine(line, myArray)
{
for (var i = 0; i < myArray[0].length; i++)
{
if (i == line)
{
myArray[0].splice(i, 1);
}
}
return myArray;
}

// creates the result string from array for writing the text file
function createTemplate(myArray)
{
var result = "";
for (var i = 0; i < myArray[0].length; i++)
{
if (myArray[1][i] != "" && myArray[1][i] != undefined && myArray[1][i] != null)
{
result = result + "<head>" + myArray[1][i] + "</head>\r";
}
result = result + myArray[0][i][0] + "," + myArray[0][i][1] + "," + myArray[0][i][2] +","+ myArray[0][i][3] + "," + myArray[0][i][4] + "," + myArray[0][i][5] + "\r";
}
return result;
}

// executes a grep search
function searchGrep(findWhat, replaceBy, type)
{
app.findGrepPreferences = app.changeGrepPreferences = null;
app.findGrepPreferences.findWhat = findWhat;
app.changeGrepPreferences.changeTo = replaceBy;
if (type == "document")
{
app.activeDocument.changeGrep();
}
else if(type == "all")
{
for (var i = 0; i < app.documents.length; i++)
{
app.documents[i].changeGrep();
}
}
else
{
alert("Diese Aktion existiert (noch?) nicht!");
}
}

// executes a text search
function searchText(findWhat, replaceBy, wordoption, type)
{
app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.findWhat = findWhat;
app.changeTextPreferences.changeTo = replaceBy;
app.findChangeTextOptions.wholeWord = wordoption;
app.findChangeTextOptions.caseSensitive = true;
if (type == "document")
{
app.activeDocument.changeText();
}
else if(type == "all")
{
for (var i = 0; i < app.documents.length; i++)
{
app.documents[i].changeText();
}
}
else
{
alert("Diese Aktion existiert (noch?) nicht!");
}
}

// creates the progress bar shown during search and replace
var ProgressBar = function(/*str*/title)
{
var w = new Window('palette', ' '+title, {x:0, y:0, width:340, height:60}),
pb = w.add('progressbar', {x:20, y:12, width:300, height:12}, 0, 100),
st = w.add('statictext', {x:10, y:36, width:320, height:20}, '');
st.justify = 'center';
w.center();
this.reset = function(msg,maxValue)
{
st.text = msg;
pb.value = 0;
pb.maxvalue = maxValue||0;
pb.visible = !!maxValue;
w.show();
};
this.hit = function() {++pb.value;};
this.hide = function() {w.hide();};
this.close = function() {w.close();};
};

// creates the start window (actually a palette)
function createStartWindow(myArray)
{
// verifies that an array is given, else user will be asked to choose a text file again
if (myArray == "" || myArray == "undefined" || myArray == null)
{
myFile = readFile();
myArray = loadFileArray(myFile);
}
// creating palette with text and buttons
var myStartWindow = new Window ("palette");
myStartWindow.add("statictext", undefined, "Bitte wählen:");

var myButtonGroup = myStartWindow.add ("group");
myButtonGroup.orientation = "column";
var options = myButtonGroup.add("button", [0,0,150,20], "Einstellungen");
var execute = myButtonGroup.add("button", [0,0,150,20], "Ausführen");
var executeonall = myButtonGroup.add("button",[0,0,150,20],"Auf alle ausführen");
var close = myButtonGroup.add("button", [0,0,150,20], "Schließen", {name: "cancel"});
// defining functions of the buttons
close.onClick = function()
{
myStartWindow.close();
exit();
}
options.onClick = function()
{
createOptionsWindow (myArray);
}
// executing search on active document
execute.onClick = function()
{
// initialising progress bar
var pBar = new ProgressBar("Suche & Ersetze");
myArray = loadFileArray(myFile);
pBar.reset("Führe durch...", myArray[0].length);
// executing search for every line, checking the given options
for (var i = 0; i < myArray[0].length; i++)
{
pBar.hit();
$.sleep(10);
if(myArray[0][i][5] == "j")
{
var findWhat = myArray[0][i][0];
var replaceBy = myArray[0][i][1];
if(myArray[0][i][3] == "j")
{
var wordoption = true;
}
else
{
var wordoption = false;
}
if(myArray[0][i][4] == "j")
{
$.sleep(10);
// parameter "document" is given for searching only in the active document
searchGrep(findWhat, replaceBy, "document");
}
else
{
$.sleep(10);
// parameter "document" is given for searching only in the active document
searchText (findWhat, replaceBy, wordoption, "document");
}
}
}
}
// executing search on all documents
executeonall.onClick = function()
{
// initialising progress bar
var pBarOnAll = new ProgressBar("Suche & Ersetze");
myArray = loadFileArray(myFile);
pBarOnAll.reset("Führe durch...", myArray[0].length);
// executing search for every line, checking the given options
for (var i = 0; i < myArray[0].length; i++)
{
pBarOnAll.hit();
$.sleep(10);
if(myArray[0][i][5] == "j")
{
var findWhat = myArray[0][i][0];
var replaceBy = myArray[0][i][1];
if(myArray[0][i][3] == "j")
{
var wordoption = true;
}
else
{
var wordoption = false;
}
if(myArray[0][i][4] == "j")
{
$.sleep(10);
// parameter "all" is given for searching in all documents
searchGrep(findWhat, replaceBy, "all");
}
else
{
$.sleep(10);
// parameter "all" is given for searching in all documents
searchText (findWhat, replaceBy, wordoption, "all");
}
}
}
}
myStartWindow.show ();
}
// creating options window
function createOptionsWindow(myArray)
{
// verifies that an array is given, else user will be asked to choose a text file again
if (myArray == "" || myArray == "undefined" || myArray == null)
{
myFile = readFile();
myArray = loadFileArray(myFile);
}
// creating options view
var myEditHeadButtons = new Array();
var editHeadButtonCount = 0;

var myOptionWindow = new Window ("dialog", "Einstellungen", undefined,{scrolling: true});
myPanel = myOptionWindow.add("panel");
myPanel.orientation = "column";

// reading array line by line for display
for (var i =0; i < myArray[0].length; i++)
{
// getting headline and creating edit button
if (myArray[1][i] != "" && myArray[1][i] != undefined && myArray[1][i] != null)
{
var myHeadGroup= myPanel.add("group");
myHeadGroup.orientation = "row";
myHeadGroup.alignment = "left";
myHeadGroup.add("statictext", undefined, myArray[1][i]);
myEditHeadButtons[editHeadButtonCount] = myHeadGroup.add("button",[0,0,50,20],"edit");
myEditHeadButtons[editHeadButtonCount].name = i;
myEditHeadButtons[editHeadButtonCount].onClick = function()
{
line = this.name;
// window for editing headline is called
myArray = createEditHeadlineWindow(line, myArray);
myOptionWindow.close();
createOptionsWindow(myArray);

}
editHeadButtonCount++;
// creating listbox for search/replace commands
var myList = myPanel.add("listbox", undefined, "",{numberOfColumns: 6, showHeaders: true,columnTitles: ["Finde", "Ersetze Durch", "Kommentar","Wortsuche", "Grep", "Aktiv"],columnWidths: [100,100,100,100, 100, 100]});
}
// adding subitems, showing "j" as "Ja" and "n" as "Nein"
with (myList.add("Item", myArray[0][i][0]))
{
subItems[0].text = myArray[0][i][1];
subItems[1].text = myArray[0][i][2];
if (myArray[0][i][3] == "j")
{
subItems[2].text = "Ja";
}
else
{
subItems[2].text = "Nein";
}
if (myArray[0][i][4] == "j")
{
subItems[3].text = "Ja";
}
else
{
subItems[3].text = "Nein";
}
if (myArray[0][i][5] == "j")
{
subItems[4].text = "Ja";
}
else
{
subItems[4].text = "Nein";
}
}
}
// window for editing a line is called via double click on subitem
myList.onDoubleClick = function()
{
line = myList.selection.index;
myArray = createEditLineWindow(line, myArray);
// closing options window for reload (updating the display)
myOptionWindow.close();
createOptionsWindow(myArray);
}
// creating buttons
var addLineButton = myPanel.add("button", undefined, "Neuer Eintrag");
addLineButton.alignment = "left";
var buttonGroup = myPanel.add("group");
var closeOptions = buttonGroup.add("button", [0,0,100,20], "Schließen");
var save = buttonGroup.add("button", [0,0,100,20], "Speichern");

// window for adding a new search/replace command is called via click on addLineButton
addLineButton.onClick = function()
{
myArray = createAddLineWindow(myArray);
myOptionWindow.close();
createOptionsWindow(myArray);
}
// template will be created and saved to the text file by clicking on save
save.onClick = function()
{
result = createTemplate(myArray);
writeTXT(result,myFile);
alert("Änderungen gespeichert!");
}
// closing window by clicking on closeOptions
closeOptions.onClick = function()
{
// array from file will be loaded and compared to the current array - user will be warned if unsaved changes are found
var myOldArray = new Array();
myOldArray = loadFileArray(myFile);
saved = true;
if (myOldArray.length == myArray.length && myOldArray[0].length == myArray[0].length && myOldArray[1].length == myArray[1].length)
{
for (var i = 0; i < myArray[0].length; i++)
{
if (myArray[0][i][0] != null && myArray[0][i][0] != "undefined" && myOldArray[0][i][0] != null && myOldArray[0][i][0] != "undefined")
{
if (myArray[0][i][0] != myOldArray[0][i][0])
{
saved = false;
}
if (myArray[0][i][1] != myOldArray[0][i][1])
{
saved = false;
}
if (myArray[0][i][2] != myOldArray[0][i][2])
{
saved = false;
}
if (myArray[0][i][3] != myOldArray[0][i][3])
{
saved = false;
}
if (myArray[0][i][4] != myOldArray[0][i][4])
{
saved = false;
}
if (myArray[0][i][5] != myOldArray[0][i][5])
{
saved = false;
}
if (myArray[1][i] != myOldArray[1][i])
{
saved = false;
}
}
}
}
else
{
saved = false;
}
if (saved == true)
{
// no changes are found -> close window
myOptionWindow.close();
}
else
{
// found unsaved changes, user will be asked, if he really wants to quit
var warningWindow = new Window ("dialog", "Nichtgespeicherte Änderungen gefunden");
myWarningText = warningWindow.add("staticText", undefined, "Wollen Sie das Fenster wirklich schließen?\rDie nicht gespeicherten Änderungen gehen verloren!");
warningWindow.add("button", undefined, "Ja", {name:"ok"});
warningWindow.add("button", undefined, "Abbrechen", {name:"cancel"});
if (warningWindow.show() == 1)
{
// user wants to close the options anyway -> window is closed
warningWindow.close();
myOptionWindow.close();
}
}
}
myOptionWindow.show();
}
// creating window for editing headline
function createEditHeadlineWindow(line, myArray)
{
// saving value of given line in variable headvalue
for (var i = 0; i < myArray[0].length; i++)
{
if (i == line)
{
var headvalue = myArray[1][i];
}
}
// creating window
var myEditHeadlineWindow = new Window("dialog", "Headline ändern");
var myEditHeadlineGroup = myEditHeadlineWindow.add("group");
var myInput = myEditHeadlineGroup.add("edittext", undefined, headvalue);
myInput.characters = 20;
myEditHeadlineGroup.add("button", undefined, "OK");
myEditHeadlineGroup.add("button", undefined, "Cancel");
if (myEditHeadlineWindow.show() == 1)
{
// by clicking on "OK" the array is altered
myArray = editHeadline(line, myArray, myInput.text);
return myArray;
}
else
{
// by clicking on "Cancel" the window will be closed
myEditHeadlineWindow.close();
return myArray;
}
}
// creating window for editing a search/replace command
function createEditLineWindow(line, myArray)
{
var clicked = false;
// getting values of given line
for (var i = 0; i < myArray[0].length; i++)
{
if (i == line)
{
var findWhat = myArray[0][i][0];
var replaceBy = myArray[0][i][1];
var comment = myArray[0][i][2];
var word = myArray[0][i][3];
var grep = myArray[0][i][4];
var active = myArray[0][i][5];
}

}
// creating the view for edit line window
var myEditLineWindow = new Window("dialog", "Befehl bearbeiten");

var myEditLinePanel = myEditLineWindow.add("panel");
myEditLinePanel.orientation = "column";
var DeleteLineButton = myEditLinePanel.add("button", undefined, "Eintrag löschen");
DeleteLineButton.alignment = "left";
DeleteLineButton.onClick = function()
{
// removing line from array, if delete button is clicked
myArray = deleteLine(line, myArray);
myEditLineWindow.close();
}

var EditFindWhat = myEditLinePanel.add("group");
EditFindWhat.orientation = "row";
var findWhatLabel = EditFindWhat.add("statictext", undefined, "Finde:");
var findWhatInput = EditFindWhat.add("edittext", undefined, findWhat);
findWhatInput.characters = 20;
findWhatLabel.characters = 10;

var EditReplaceBy = myEditLinePanel.add("group");
EditReplaceBy.orientation = "row";
var replaceByLabel = EditReplaceBy.add("statictext", undefined, "Ersetze durch:");
var replaceByInput = EditReplaceBy.add("edittext", undefined, replaceBy);
replaceByInput.characters = 20;
replaceByLabel.characters = 10;

var EditComment = myEditLinePanel.add("group");
EditComment.orientation = "row";
var commentLabel = EditComment.add("statictext", undefined, "Kommentar:");
var commentInput = EditComment.add("edittext", undefined, comment);
commentInput.characters = 20;
commentLabel.characters = 10;

var EditWord = myEditLinePanel.add("group");
EditWord.orientation = "row";
EditWord.alignment = "left";
var wordLabel = EditWord.add("statictext", undefined, "Wortsuche:");
var WordYesRadio = EditWord.add("radiobutton", undefined, "ja");
var WordNoRadio = EditWord.add("radiobutton", undefined, "nein");
wordLabel.characters = 10;
if (word == "j")
{
WordYesRadio.value = true;
}
else
{
WordNoRadio.value = true;
}
var EditGrep = myEditLinePanel.add("group");
EditGrep.orientation = "row";
EditGrep.alignment = "left";
var grepLabel = EditGrep.add("statictext", undefined, "Grep:");
var grepYesRadio = EditGrep.add("radiobutton", undefined, "ja");
var grepNoRadio = EditGrep.add("radiobutton", undefined, "nein");
grepLabel.characters = 10;
if (grep == "j")
{
grepYesRadio.value = true;
}
else
{
grepNoRadio.value = true;
}

var EditStatus = myEditLinePanel.add("group");
EditStatus.orientation = "row";
EditStatus.alignment = "left";
var statusLabel = EditStatus.add("statictext", undefined, "Aktiv:");
var ActiveYesRadio = EditStatus.add("radiobutton", undefined, "ja");
var ActiveNoRadio = EditStatus.add("radiobutton", undefined, "nein");
statusLabel.characters = 10;
if (active == "j")
{
ActiveYesRadio.value = true;
}
else
{
ActiveNoRadio.value = true;
}

var EditLineButtons = myEditLinePanel.add("group");
EditLineButtons.orientation = "row";
var SaveButton = EditLineButtons.add("button", undefined, "Speichern");
var CloseButton = EditLineButtons.add("button", undefined, "Abbrechen", {name:"cancel"});

// saving changes after checking radio values
SaveButton.onClick = function()
{
if (WordYesRadio.value == true)
{
word = "j";
}
else
{
word = "n";
}
if (grepYesRadio.value == true)
{
grep = "j";
}
else
{
grep = "n";
}
if (ActiveYesRadio.value == true)
{
active = "j";
}
else
{
active = "n";
}
// changes line in array with given values
myArray = editLine(line, myArray, findWhatInput.text, replaceByInput.text, commentInput.text, word, grep,active);
myEditLineWindow.close();
}
myEditLineWindow.show();
return myArray;
}

// creating window for adding a search/replace command
function createAddLineWindow(myArray)
{
var myAddLineWindow = new Window("dialog", "Neuer Befehl");
var myAddLinePanel = myAddLineWindow.add("panel");
myAddLinePanel.orientation = "column";

var EditLine = myAddLinePanel.add("group");
EditLine.orientation = "row";
EditLine.alignment = "left";
var selectLabel = EditLine.add("statictext", undefined, "Zeile:");
var selectList = EditLine.add("dropdownlist", undefined, ["Am Anfang", "Am Ende"]);
selectList.selection = 1;
selectLabel.characters = 10;

var EditFindWhat = myAddLinePanel.add("group");
EditFindWhat.orientation = "row";
var findWhatLabel = EditFindWhat.add("statictext", undefined, "Finde:");
var findWhatInput = EditFindWhat.add("edittext");
findWhatInput.characters = 20;
findWhatLabel.characters = 10;

var EditReplaceBy = myAddLinePanel.add("group");
EditReplaceBy.orientation = "row";
var replaceByLabel = EditReplaceBy.add("statictext", undefined, "Ersetze durch:");
var replaceByInput = EditReplaceBy.add("edittext");
replaceByInput.characters = 20;
replaceByLabel.characters = 10;

var EditComment = myAddLinePanel.add("group");
EditComment.orientation = "row";
var commentLabel = EditComment.add("statictext", undefined, "Kommentar:");
var commentInput = EditComment.add("edittext");
commentInput.characters = 20;
commentLabel.characters = 10;

var EditWord = myAddLinePanel.add("group");
EditWord.orientation = "row";
EditWord.alignment = "left";
var wordLabel = EditWord.add("statictext", undefined, "Wortsuche:");
var WordYesRadio = EditWord.add("radiobutton", undefined, "ja");
var WordNoRadio = EditWord.add("radiobutton", undefined, "nein");
wordLabel.characters = 10;

var EditGrep = myAddLinePanel.add("group");
EditGrep.orientation = "row";
EditGrep.alignment = "left";
var grepLabel = EditGrep.add("statictext", undefined, "Grep:");
var grepYesRadio = EditGrep.add("radiobutton", undefined, "ja");
var grepNoRadio = EditGrep.add("radiobutton", undefined, "nein");
grepLabel.characters = 10;

var EditStatus = myAddLinePanel.add("group");
EditStatus.orientation = "row";
EditStatus.alignment = "left";
var statusLabel = EditStatus.add("statictext", undefined, "Aktiv:");
var ActiveYesRadio = EditStatus.add("radiobutton", undefined, "ja");
var ActiveNoRadio = EditStatus.add("radiobutton", undefined, "nein");
statusLabel.characters = 10;

var AddLineButtons = myAddLinePanel.add("group");
AddLineButtons.orientation = "row";
var SaveButton = AddLineButtons.add("button", undefined, "Speichern");
var CloseButton = AddLineButtons.add("button", undefined, "Abbrechen", {name:"cancel"});

// saving changes after checking radio values
SaveButton.onClick = function()
{
if (WordYesRadio.value == true)
{
word = "j";
}
else
{
word = "n";
}
if (grepYesRadio.value == true)
{
grep = "j";
}
else
{
grep = "n";
}
if (ActiveYesRadio.value == true)
{
active = "j";
}
else
{
active = "n";
}
selection = selectList.selection.toString();
if (selection.match("Anfang"))
{
line = 0;
}
else
{
line = myArray[0].length + 1;
}
// adding line to array at given position with given values
myArray = addLine(line, myArray, findWhatInput.text, replaceByInput.text, commentInput.text, word, grep, active);
myAddLineWindow.close();
}
myAddLineWindow.show();
return myArray;

}


(Gibts hier die Möglichkeit, es wie eine Art "Spoiler" in anderen Foren, es zu verschachteln? Nimmt viel Platz weg!)


als Antwort auf: [#467581]