hilfdirselbst.ch
Facebook Twitter gamper-media
mahony2k
Beiträge: 8
20. Nov 2013, 10:40
Beitrag #1 von 5
Bewertung:
(1454 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Problem mit aus Datei gelesenem Wert


Hallo zusammen,

erst einmal vielen Dank für die vielen tollen Skripte und Anregungen!

Ich musste für unseren Workflow das Skript "SpracheWechseln" von Hans Haesler ein wenig anpassen, damit ich zusätzlich mittels einer Checkbox einstellen kann, ob Silbentrennung in der entsprechenden Sprache erlaubt sein soll, oder nicht.

Soweit habe ich auch alles hinbekommen und ich habe es sogar geschafft, dass ich die Einstellung der Checkbox mit in die selbe Textdatei speichere.

Nun habe ich aber beim Ausführen, das Problem, dass obwohl in der Datei true oder false gespeichert wird, und sogar richtig wieder aus der Datei gelesen wird (wie ich mittels alert sehen kann), der ausgelesene Wert für den checkedState beim erneuten Ausführen nicht entsprechend voreingestellt wird. Stattdessen bekomme ich die Fehlermeldung dass der Parameter ungültig ist. Wenn ich checkedState manuell auf true setze geht es, aber in folgender Form nicht, obwohl der alert bestätigt, dass die Variable curHyph ebenso "true" ist:

Code
with (dialogRows.add()) {    
alert ("curHyph \n" + curHyph);
checkHyph = checkboxControls.add({staticLabel:"&Ohne Silbentrennung", checkedState:curHyph});


Wo liegt mein Denkfehler?

Vielen Dank schon mal!

Grüße,
Toni



Hier der ganze Code:
Code
var myDoc = app.activeDocument; 
var myScriptFolder = app.activeScript;


//if (parseFloat(app.version) < 6)
//Sprachen();
//else
//app.doScript(Sprachen, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.ENTIRE_SCRIPT, "Sprache wechseln");


//function Sprachen() {

// die Liste(n) der verfügbaren Sprachen
var allLang = app.languagesWithVendors;
var lngNameList = app.languagesWithVendors.everyItem().name;
var locLangList = app.languagesWithVendors.everyItem().name;
locLangList.sort();
var noLang = locLangList.pop();
locLangList.unshift(noLang);

// die Datei lesen, in welcher die zuletzt angewendete Sprache und Silbentrennung gespeichert ist
var curLang = 0;
var curHyph = false;
//var tempFolder = Folder.temp;
var f = File((Folder(myScriptFolder)).parent + "/curLang.txt");
fileIsOpen = f.open("r");
if (fileIsOpen) {
try {
curLang = (f.readln())*1;
curHyph = f.readln();
f.close();
}
catch (e) {
try {
f.close();
}
catch (e) {
}
}
}

alert ("curLang \n" + curLang);
alert ("curHyph \n" + curHyph);


// Dialoge, welche eventuell im Speicher geblieben sind, löschen
try {
app.dialogs.everyItem().destroy();
}
catch (e) {
}

// vorbeugenderweise das Anzeigen von Dialogen aktivieren
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

// testen, ob ein Dokument geöffnet ist (wenn nicht: den Ordner-Auswahldialog zeigen)
var nDocs = app.documents.length;
if (nDocs == 0) {
var folderObj = File (Folder.selectDialog("Den Ordner auswählen, welcher die InDesign-Dokumente enthält."));
var testObj = "" + folderObj;
if (testObj.match("null")) {
exit();
}
// den Handler aufrufen, welcher die Wahl der neuen Sprache anzeigt
var dialogIndex = askUser();
var newLang = getLang(lngNameList, locLangList, dialogIndex);
// eventuelle Dialoge wegen fehlender Bilder und Schriften ausschalten
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.neverInteract;
// den Inhalt des Ordners auflisten
var allFiles = folderObj.getFiles();

// eine Schleife durch die Dateien
var curName;
for (var i=0; i<allFiles.length; i++) {
curName = allFiles[i].name;
if (curName.match(".indd")) {
try {
// die aktuelle Datei öffnen
app.open(File (allFiles[i]));
changeLanguage(newLang);
app.activeDocument.close(SaveOptions.yes);
}
catch (e) {
}
}
}
// die Dialoge wieder einschalten
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;
}
else {
var dialogIndex = askUser();
var newLang = getLang(lngNameList, locLangList, dialogIndex);
var docRef = new Array ();
for (var i=0; i<nDocs; i++) {
docRef.push(app.documents[i].name);
}
var okay = true;
var docName;
for (var i=0; i<docRef.length; i++) {
//app.activeDocument = app.documents.item(docRef[i]); // DEAKTIVIERT, DAMIT NUR AKTIVES DOKUMENT BEARBEITET WIRD
docName = app.activeDocument.name;
if (nDocs>1 && i>0) {
//okay = confirm ("Die Sprache dieses Dokuments ändern?\n\n" + docName); // DEAKTIVIERT, DAMIT NUR AKTIVES DOKUMENT BEARBEITET WIRD
}
if (okay) {
changeLanguage(newLang);
}
}
//app.activeDocument = app.documents.item(docRef[0]); // DEAKTIVIERT, DAMIT NUR AKTIVES DOKUMENT BEARBEITET WIRD
}

// der Handler, welcher die Auswahl der neuen Sprache ermöglicht
var dialogHyph;
function askUser() {
// einen Dialog vorbereiten
var aDialog = app.dialogs.add({name:"Sprache wechseln", canCancel:true});
with (aDialog) {
with (dialogColumns.add()) {
with (dialogRows.add()) {
staticTexts.add({staticLabel:"Neue Sprache:", minWidth:80});
staticTexts.add({staticLabel:"", minWidth:20});
}
with (borderPanels.add()) {
with (dialogColumns.add()) {
var langName = dropdowns.add({stringList:locLangList, selectedIndex:curLang, minWidth:130});
}
}
with (dialogColumns.add()) {
staticTexts.add({staticLabel:"", minWidth:4});
}
with (dialogRows.add()) {
alert ("curHyph \n" + curHyph);
checkHyph = checkboxControls.add({staticLabel:"&Ohne Silbentrennung", checkedState:curHyph});
}
}
}

//alert (checkHyph.checkedState);

// den Dialog anzeigen, die Wahl des Anwenders speichern
if (aDialog.show() == true) {
var dialogIndex = langName.selectedIndex;
dialogHyph = checkHyph.checkedState;
aDialog.destroy();
}
else {
aDialog.destroy();
exit();
}

// die Nummer der Sprache in die Datei schreiben
//var tempFolder = Folder.temp;
var f = File((Folder(myScriptFolder)).parent + "/curLang.txt");
var fileIsOpen = f.open("w");
if (fileIsOpen) {
try {
f.writeln(dialogIndex);
f.writeln(dialogHyph);
f.close();
}
catch (e) {
try {
f.close();
}
catch (e) {
}
}
}
return dialogIndex;

// Silbentrennung in Datei schreiben
//var tempFolder = Folder.temp;
var fh = File((Folder(myScriptFolder)).parent + "/curHyph.txt");
var fhfileIsOpen = fh.open("w");
if (fhfileIsOpen) {
try {
fh.write(dialogHyph);
fh.close();
}
catch (e) {
try {
fh.close();
}
catch (e) {
}
}
}
return dialogHyph;
}
alert (dialogHyph);


// der Handler zum Bestimmen der Sprache
function getLang(lngNameList, locLangList, dialogIndex) {
for (var i=0; i<lngNameList.length; i++) {
if (lngNameList[i] == locLangList[dialogIndex]) {
return i
}
}
}

// der Handler zum Wechseln der Sprache
function changeLanguage(newLang) {
// die Sprache der Absatzformate wechseln
var curLang;
var nParaStyles = app.documents[0].paragraphStyles.length;
for (var i=1; i<nParaStyles; i++) {
try {
curLang = app.documents[0].paragraphStyles[i].appliedLanguage.name;
if (curLang != noLang) {
app.documents[0].paragraphStyles[i].appliedLanguage = allLang[newLang];
}
}
catch (e) {
}
try {
var curHyph = app.documents[0].paragraphStyles[i].hyphenation;
if (dialogHyph == true) {
app.documents[0].paragraphStyles[i].hyphenation = false;
}
}
catch (e) {
}
}

// die Sprache der Absatzformate der Gruppen wechseln
var curGroup
var curGroups = app.documents[0].paragraphStyleGroups;
var curParaStyles;
var nParaStyleGroups = curGroups.length;
for (var i=0; i<nParaStyleGroups; i++) {
curGroup = curGroups[i];
curParaStyles = curGroup.allParagraphStyles;
var nParaStyles = curParaStyles.length;
for (var k=0; k<nParaStyles; k++) {
try {
curLang = curParaStyles[k].appliedLanguage.name;
if (curLang != noLang) {
curParaStyles[k].appliedLanguage = allLang[newLang];
}
}
catch (e) {
}
/*try {
curHyph = curParaStyles[k].appliedLanguage.name; /// SIlbentrennung deaktivieren
if (curLang != noLang) {
curParaStyles[k].appliedLanguage = allLang[newLang];
}
}
catch (e) {
}*/
}
}

// die Sprache der Zeichenformate wechseln
nCharStyles = app.documents[0].characterStyles.length;
for (var i=1; i<nCharStyles; i++) {
try {
curLang = app.documents[0].characterStyles[i].appliedLanguage.name;
if (curLang != noLang) {
app.documents[0].characterStyles[i].appliedLanguage = allLang[newLang];
}
}
catch (e) {
}
}

// die Sprache der Zeichenformate der Gruppen wechseln
curGroups = app.documents[0].characterStyleGroups;
var nCharStyleGroups = curGroups.length;
for (var i=0; i<nCharStyleGroups; i++) {
var curGroup = curGroups[i];
var curCharStyles = curGroup.allCharacterStyles;
var nCharStyles = curCharStyles.length;
for (var k=0; k<nCharStyles; k++) {
try {
curLang = curCharStyles[k].appliedLanguage.name;
if (curLang != noLang) {
curCharStyles[k].appliedLanguage = allLang[newLang];
}
}
catch (e) {
}
}
}

// die Sprache der Texte ändern, damit auch solche ohne Format berücksichtigt werden
app.documents[0].stories.everyItem().appliedLanguage = allLang[newLang];

// die Tabellen auch behandeln
try {
app.documents[0].stories.everyItem().tables.everyItem().cells.everyItem().texts[0].appliedLanguage = allLang[newLang];
}
catch (e) {
}
}
//}

Top
 
X
Hans Haesler  M  p
Beiträge: 5557
20. Nov 2013, 11:28
Beitrag #2 von 5
Beitrag ID: #519910
Bewertung:
(1421 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Problem mit aus Datei gelesenem Wert


Hallo Toni,

der Inhalt von 'curHyph' – aus der Datei eingelesen – ist ein String.
Dieser muss geprüft und in die entsprechende Konstante umgewandelt werden:

Code
if (curHyph == "true") { 
curHyph = true;
else {
curHyph = false;
}

So sollte es klappen.

Gruss, Hans
als Antwort auf: [#519907] Top
 
WernerPerplies
Beiträge: 2177
20. Nov 2013, 11:59
Beitrag #3 von 5
Beitrag ID: #519915
Bewertung:
(1404 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Problem mit aus Datei gelesenem Wert


Oder etwas kürzer:

statt curHyph
(curHyph == "true")
zuweisen.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler jetzt mit Vollwaschgang
Aktuelles
XING
als Antwort auf: [#519910] Top
 
mahony2k
Beiträge: 8
20. Nov 2013, 17:14
Beitrag #4 von 5
Beitrag ID: #519935
Bewertung:
(1344 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Problem mit aus Datei gelesenem Wert


Das war's. Super, vielen Dank!
als Antwort auf: [#519910] Top
 
Hans Haesler  M  p
Beiträge: 5557
23. Nov 2013, 10:56
Beitrag #5 von 5
Beitrag ID: #520024
Bewertung:
(1266 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Problem mit aus Datei gelesenem Wert


Hallo Toni,

bitte sehr.

Der Vollständigkeit halber: Anstelle von true und false können auch 1 und 0 verwendet werden:

Code
if (curHyph == "true") { 
curHyph = 1;
else {
curHyph = 0;
}

Gruss, Hans
als Antwort auf: [#519935] Top
 
X