hilfdirselbst.ch
Facebook Twitter gamper-media
pitware2005 S
Beiträge: 39
9. Okt 2013, 08:20
Beitrag #1 von 4
Bewertung:
(779 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

BerechnungMitDialogUndRundung.jsx erweitern


Hallo zusammen,

ich wollte das Berechnungsskript etwas erweitern. Leider will er nicht so wie ich möchte deshalb meine Frage an Euch ob mir jemand helfen bzw. einen Denkanstoß geben kann.

Hier sind meine Modifikationen:

Code
// Berechnungsfunktion      
function theCalculation(theData, theRound){
var theOldNumber = theData.split(",").join(".") // Komma wird ggf. durch Punkt ersetzt

if ((theOldNumber) * myFactor) > 10
var theNewString = myRound(parseFloat(theOldNumber) * myFactor, theRound) + ",00" ; // Berechnung der neuen Zahl
else if ((theOldNumber) * myFactor) < 10
var theNewString = myRound(parseFloat(theOldNumber) * 10, theRound) + ",00" ; // Berechnung der neuen Zahl

return theNewString;
}


Diese habe ich in den unteren Gesamtcode eingefügt, leider will er mir diese if/else Unterscheidung für die Variable "theNewString" nicht machen.

Code
var myDoc = app.documents[0];      
var myObj = (app.selection.length > 0 &&
(
(
app.selection[0].hasOwnProperty('baseline') &&
app.selection[0].constructor.name != 'InsertionPoint'
) ||
app.selection[0].constructor.name == 'TextFrame' ||
app.selection[0].constructor.name == 'Table' ||
app.selection[0].constructor.name == 'Cell'
)
)
? app.selection[0]
: app.activeDocument;
var theStyles = myDoc.characterStyles.everyItem().name; // Zeichenformate in Array
theStyles.shift(); // Abschneiden von Zeichenformat [Keine]

var theData = myDisplayDialog(); // Funktionsaufruf
var myFactor = theData.factor;
if (myFactor != undefined)
{
app.findGrepPreferences = app.changeGrepPreferences = null;
app.findGrepPreferences.appliedCharacterStyle = theData.style;
app.findGrepPreferences.findWhat = '\\d+[\\.,]?\\d*';
var myNumbers = myObj.findGrep();
app.findGrepPreferences = app.changeGrepPreferences = null;

for (oneNum = myNumbers.length-1; oneNum >= 0; oneNum--)
{
// Funktionsaufruf zu Berechnung und
// Zuweisung des neuen Inhats
if (isNaN(myNumbers[oneNum].contents.split(",").join(".") )){}
else
{
myNumbers[oneNum].contents = theCalculation(myNumbers[oneNum].contents, theData.round)
}
}
}

// Dialog
function myDisplayDialog()
{
var myFieldWidth = 80;

var myDialog = app.dialogs.add({name:"Berechnung"});
with(myDialog.dialogColumns.add())
{
with(dialogRows.add())
{
with(dialogColumns.add())
{
staticTexts.add({staticLabel:"Faktor:", minWidth:myFieldWidth});
}
with(dialogColumns.add())
{
var myFacTextEditbox = textEditboxes.add({editContents:"1,19", minWidth:140});
}
}
with(dialogRows.add())
{
with(dialogColumns.add())
{
staticTexts.add({staticLabel:"Rundung:", minWidth:myFieldWidth});
}
with(dialogColumns.add())
{
var myRoundTextEditbox = textEditboxes.add({editContents:"0,01", minWidth:140});
}
}
with(dialogRows.add())
{
with(dialogColumns.add())
{
staticTexts.add({staticLabel:"Zeichenformat:", minWidth:myFieldWidth});
}
with(dialogColumns.add())
{
var myStylesDropDown = dropdowns.add({stringList:theStyles, selectedIndex:0, minWidth:140});
}
}
}
var myResult = myDialog.show();
if(myResult == true)
{
var aFactor = myFacTextEditbox.editContents.split(",").join(".")*1;
var aStyle = theStyles[myStylesDropDown.selectedIndex];
var myRoundNum = Number(myRoundTextEditbox.editContents.split(",").join("."))
var aRound = (isNaN(myRoundNum) || myRoundNum == 0)
? 1
: 1/myRoundNum;
//Remove the dialog box from memory.
myDialog.destroy();
}
else
{
myDialog.destroy();
}
return {factor:aFactor, style:aStyle, round:aRound};
}

// Berechnungsfunktion
function theCalculation(theData, theRound){
var theOldNumber = theData.split(",").join(".") // Komma wird ggf. durch Punkt ersetzt
var theNewString = myRound(parseFloat(theOldNumber) * myFactor, theRound) ; // Berechnung der neuen Zahl
return theNewString;
}

function myRound(aNum, aDec)
{
var myResult = Math.round(aNum * aDec)/aDec;
if (aDec == 1)
return String(myResult);
if (myResult - Math.floor(myResult) == 0)
myResult += '.';
var myParts = String(myResult).split('.');
while (myParts[1].length < String(aDec).length-1)
{
myParts[1] += '0';
}
return myParts.join(',');


Ich danke Euch wie immer im voraus für Eure Unterstützung.

Lg
Peter
Viele Grüße
Peter Top
 
X
WernerPerplies
Beiträge: 2200
9. Okt 2013, 10:10
Beitrag #2 von 4
Beitrag ID: #518246
Bewertung:
(754 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

BerechnungMitDialogUndRundung.jsx erweitern


Hallo Peter,

Du gehst mit Deinen Informationen recht sparsam um:

Zitat Leider will er nicht so

Was will nicht?, Bekommst Du eine Fehlermeldung, wenn ja, welche.

Bist Du das Skript im Einzelschrittverfahren durchgegangen?

Meine Empfehlung:

Teste zuerst nur die Funktion theCalculation(theData, theRound), z. B. so;

Code
main() 
function main()
{
alert(theCalculation(Wert für theData, Wert für theRound))
// Berechnungsfunktion
function theCalculation(theData, theRound){
var theOldNumber = theData.split(",").join(".") // Komma wird ggf. durch Punkt ersetzt

if ((theOldNumber) * myFactor) > 10
var theNewString = myRound(parseFloat(theOldNumber) * myFactor, theRound) + ",00" ; // Berechnung der neuen Zahl
else if ((theOldNumber) * myFactor) < 10
var theNewString = myRound(parseFloat(theOldNumber) * 10, theRound) + ",00" ; // Berechnung der neuen Zahl

return theNewString;
}
}


Schau Dir dann die Fehlermeldung an und korrigiere.
Wenn die Funktion dann noch nicht wie erwartet funktioniert, prüfe jeden Schritt einzeln: -> ESTK, Taste F11

Prüfe auch die Klammersetzung in der Bedingung.

Ich hoffe, das reicht als erster Denkanstoß.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING
als Antwort auf: [#518242] Top
 
pitware2005 S
Beiträge: 39
9. Okt 2013, 10:48
Beitrag #3 von 4
Beitrag ID: #518247
Bewertung:
(744 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

BerechnungMitDialogUndRundung.jsx erweitern


Hallo Werner,

sorry hab den Anhang vergessen. Die Fehlermeldung ist nun im Anhang.

Nein ich bin es noch nicht in einzelnen Schritten durchgegangen weil ich eigentlich dachte es wäre ja keine große Änderung sondern einfach nur eine kleine if/else Erweiterung.

Das mit dem jeden Schritt einzeln werde ich sobald ich Zeit habe mal durchlaufen lassen. Aber vielleicht ist es ja mit der Fehlermeldung einfacher zu erkennen.

Lg
Peter
Viele Grüße
Peter
als Antwort auf: [#518246] Top

Anhang:
Fehler.jpg (81.4 KB)
 
WernerPerplies
Beiträge: 2200
9. Okt 2013, 11:13
Beitrag #4 von 4
Beitrag ID: #518250
Bewertung:
(729 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

BerechnungMitDialogUndRundung.jsx erweitern


Hallo Peter,

die Anwort steht in meinem letzten Beitrag.
Noch einmal:
Teste Deine Funktion separat und prüfe die Klammersetzung.

Die Bedingung muss in Klammern stehen.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING
als Antwort auf: [#518247] Top
 
X