Forenindex » Programmierung/Entwicklung » AppleScript » rechen problem

rechen problem

jekyll
Beiträge gesamt: 2047

19. Nov 2017, 21:05
Bewertung:

gelesen: 11767

Beitrag als Lesezeichen
Hallo Allerseits,
ich habe eine Problem mit applescript auf Yosemite (10.10.5) und auch auf al Capitan 10.11.5.
Applescript scheint nicht korrekt zu rechnen wenn es 3 stellen vor und nach dem Komma gibt.

Kann das jemand mir erklären bzw. verifizieren. kann ich das irgendwie um gehen?

Code
set px to {"9138.897755", "9138.897", "913.88977", "283.550", "913.889", "91.388977", "91.38897755"} 
set mm to 2.835
set br1 to (item 1 of px as real) / mm
set br2 to (item 2 of px as real) / mm
set br3 to (item 3 of px as real) / mm
set br4 to (item 4 of px as real) / mm
set br5 to (item 5 of px as real) / mm
set br6 to (item 6 of px as real) / mm
set br7 to (item 7 of px as real) / mm

Gruß Sándor


Hier auf der HDS, kann jeder was dazu lernen, sogar die die glauben alles (besser) zu wissen Wink
Das sollten WIR ALLE unterstützen: http://www.hilfdirselbst.ch/...m.cgi?do=membership;

Anhang:
rechnen.png (221 KB)

rechen problem

Hans Haesler
  
Beiträge gesamt: 5826

19. Nov 2017, 21:40
Bewertung:

gelesen: 11761

Beitrag als Lesezeichen
Hallo Sándor,

die Ergebnisse sind doch alle korrekt.

Was erwartest Du denn bei den sieben Divisionen?
Jedes mal nur drei Nachkommastellen?

Gruss, Hans

rechen problem

jekyll
Beiträge gesamt: 2047

19. Nov 2017, 22:28
Bewertung:

gelesen: 11746

Beitrag als Lesezeichen
Hallo Hans,
hier sind meine Ergebnise:

{3223.59709171076, 3223.59682539683, 322.359707231041, 1.00017636684303E+5, 3.22359435626102E+5, 32.235970723104, 32.235970917108}

Da rutscht bei mir die Kommastelle nach 2 stellen vorne

Kannst Du auch auf Bild sehen.
Gruß Sándor


Hier auf der HDS, kann jeder was dazu lernen, sogar die die glauben alles (besser) zu wissen Wink
Das sollten WIR ALLE unterstützen: http://www.hilfdirselbst.ch/...m.cgi?do=membership;

(Dieser Beitrag wurde von jekyll am 19. Nov 2017, 22:30 geändert)

rechen problem

Hans Haesler
  
Beiträge gesamt: 5826

19. Nov 2017, 22:42
Bewertung:

gelesen: 11743

Beitrag als Lesezeichen
Hallo Sándor,

ja, Deine Ergebnisse der beiden "123 Komma 123" sind nicht wie erwartet.

Zitat Kannst Du auch auf Bild sehen.

Ein Bild ist nicht zu sehen. Vermutlich hast Du es zwar angehängt, aber nicht auf "Anhang speichern" geklickt.

Was geschieht, wenn Du das folgende Script startest?

Code
set px to {"9138.897755", "9138.897", "913.88977", "283.550", "913.889", "91.388977", "91.38897755"} 
set mm to 2.835
set br1 to ((((item 1 of px) / mm) * 1000) div 1) / 1000
set br2 to ((((item 2 of px) / mm) * 1000) div 1) / 1000
set br3 to ((((item 3 of px) / mm) * 1000) div 1) / 1000
set br4 to ((((item 4 of px) / mm) * 1000) div 1) / 1000
set br5 to ((((item 5 of px) / mm) * 1000) div 1) / 1000
set br6 to ((((item 6 of px) / mm) * 1000) div 1) / 1000
set br7 to ((((item 7 of px) / mm) * 1000) div 1) / 1000

Drei Nachkommastellen sind doch ausreichend.

Gruss, Hans

(Dieser Beitrag wurde von Hans Haesler am 20. Nov 2017, 07:54 geändert)

rechen problem

jekyll
Beiträge gesamt: 2047

19. Nov 2017, 23:01
Bewertung:

gelesen: 11734

Beitrag als Lesezeichen
Antwort auf: Ein Bild ist nicht zu sehen. Vermutlich hast Du es zwar angehängt, aber nicht auf "Anhang speichern" geklickt.

interessant bei mir zeigt es an.

Antwort auf: Was geschieht, wenn Du das folgende Script startest?

bekomme ich ohne as real Fehler Meldung mit as real ist die Ergebnis gleich.

Code
set px to {"9138.897755", "9138.897", "913.88977", "283.500", "913.889", "91.388977", "91.38897755"} 
set mm to 2.835
set br1 to ((((item 1 of px as real) / mm) * 1000) div 1) / 1000
set br2 to ((((item 2 of px as real) / mm) * 1000) div 1) / 1000
set br3 to ((((item 3 of px as real) / mm) * 1000) div 1) / 1000
set br4 to ((((item 4 of px as real) / mm) * 1000) div 1) / 1000
set br5 to ((((item 5 of px as real) / mm) * 1000) div 1) / 1000
set br6 to ((((item 6 of px as real) / mm) * 1000) div 1) / 1000
set br7 to ((((item 7 of px as real) / mm) * 1000) div 1) / 1000

Gruß Sándor


Hier auf der HDS, kann jeder was dazu lernen, sogar die die glauben alles (besser) zu wissen Wink
Das sollten WIR ALLE unterstützen: http://www.hilfdirselbst.ch/...m.cgi?do=membership;

rechen problem

jekyll
Beiträge gesamt: 2047

19. Nov 2017, 23:05
Bewertung:

gelesen: 11733

Beitrag als Lesezeichen
hier sind die Bilder als Link:
http://www.download.siscosep.com/hds/rechnen.pdf
Gruß Sándor


Hier auf der HDS, kann jeder was dazu lernen, sogar die die glauben alles (besser) zu wissen Wink
Das sollten WIR ALLE unterstützen: http://www.hilfdirselbst.ch/...m.cgi?do=membership;

rechen problem

jekyll
Beiträge gesamt: 2047

20. Nov 2017, 00:10
Bewertung:

gelesen: 11719

Beitrag als Lesezeichen
Ich bekomme dieser Fehler nur wenn ich das "as real" verwende.

Code
set px to {"283.500", "283.5000"} 
set mm to 2.835
set test to round (item 1 of px as real)
set test2 to round item 1 of px
set test3 to round (item 2 of px as real)
set test4 to round item 2 of px


Liefert mir die Ergebnis: test = 284, test2 = 283500, test3 = 284, test4 = 284
Merkwürdig.
Gruß Sándor


Hier auf der HDS, kann jeder was dazu lernen, sogar die die glauben alles (besser) zu wissen Wink
Das sollten WIR ALLE unterstützen: http://www.hilfdirselbst.ch/...m.cgi?do=membership;

rechen problem

Hans Haesler
  
Beiträge gesamt: 5826

20. Nov 2017, 07:58
Bewertung:

gelesen: 11669

Beitrag als Lesezeichen
Hallo Sándor,

das Konvertieren mit as real braucht es nicht. Weil der Wert durch die Division umgewandelt wird.

Code
set px to {"9138.897755", "9138.897", "913.88977", "283.550", "913.889", "91.388977", "91.38897755"} 
set mm to 2.835

set br4 to (item 4 of px) / mm

Die Fehlermeldung kam, weil in meinem Beitrag #4 die Zeile set mm to 2.835 fehlte. Habe ich jetzt korrigiert.

Deine Versionen vom Mac OS X habe ich nicht zur Verfügung. Aber weder mit Mavericks noch mit Sierra kann ich das Problem nachvollziehen.

Falls es Dir sicherer scheint, den Wert umzuwandeln, dann hilft vielleicht eine Multiplikation mit Eins:

Code
set px to {"9138.897755", "9138.897", "913.88977", "283.550", "913.889", "91.388977", "91.38897755"} 
set mm to 2.835

set br4 to ((item 4 of px) * 1) / mm

Gruss, Hans

rechen problem

jekyll
Beiträge gesamt: 2047

20. Nov 2017, 08:49
Bewertung:

gelesen: 11660

Beitrag als Lesezeichen
Morgen Hans,
leider geht das nur ohne ( ) sobald ich es in den ( ) lege ist meine Ergebnis falsch.

Antwort auf: Die Fehlermeldung kam, weil in meinem Beitrag #4 die Zeile set mm to 2.835 fehlte. Habe ich jetzt korrigiert.

Nein, das habe ich gemerkt :)
Applescript zickt weil das Typ nicht in real gewandelt werden kann. Siehe Bild.

Normaleweise vergesse ich die Wandlung zu Nummer bzw. mache ich es an falsche stelle :(
Ich habe es hierfür gebraucht.
Code
 set pdfGr to do shell script "cat " & quoted form of POSIX path of neueDok & " | egrep -ao '/MediaBox ?\\[ ?[0-9]+ [0-9]+ [0-9]+(\\.[0-9]+)? [0-9]+(\\.[0-9]+)?\\]' | head -1" 

set {origDelim, AppleScript's text item delimiters} to {AppleScript's text item delimiters, " "}
set breite to text item 3 of pdfGr
set breite1 to ((((round (text item 3 of pdfGr) rounding up) / mm) * 100) div 1) / 100
set hoehe to text item 4 of pdfGr
set AppleScript's text item delimiters to "]"
set hoehe1 to ((((round (text item 1 of hoehe) rounding up) / mm) * 100) div 1) / 100
set AppleScript's text item delimiters to origDelim


Habe aber mittlerweile das hier gefunden und verwendet :
Zitat set {hoehePx, breitePx} to paragraphs of (do shell script "mdls " & quoted form of POSIX path of pdfDok & "| grep -Ei 'kMDItemPage(Height|Width)' | awk '{print $3}'")


Aber nur so bekomme ich korrekte Ergebnisse mit dem man weiter rechnen kann:
Code
set breiteMm to ((((round (breitePx) rounding up) / mm) * 100) div 1) / 100 
set hoeheMm to ((((round (hoehePx) rounding up) / mm) * 100) div 1) / 100

Gruß Sándor


Hier auf der HDS, kann jeder was dazu lernen, sogar die die glauben alles (besser) zu wissen Wink
Das sollten WIR ALLE unterstützen: http://www.hilfdirselbst.ch/...m.cgi?do=membership;

(Dieser Beitrag wurde von jekyll am 20. Nov 2017, 08:50 geändert)

Anhang:
rechen1.png (260 KB)

rechen problem

jekyll
Beiträge gesamt: 2047

20. Nov 2017, 10:10
Bewertung:

gelesen: 11645

Beitrag als Lesezeichen
sorry hier #560822 habe ich die test und test2 vertauscht.

das muss heissen: Liefert mir die Ergebnis: test = 283500, test2 = 284, test3 = 284, test4 = 284
siehe Bild.

Kann mir jemand anders meine Problem bestätigen?
Gruß Sándor


Hier auf der HDS, kann jeder was dazu lernen, sogar die die glauben alles (besser) zu wissen Wink
Das sollten WIR ALLE unterstützen: http://www.hilfdirselbst.ch/...m.cgi?do=membership;

(Dieser Beitrag wurde von jekyll am 20. Nov 2017, 10:11 geändert)

Anhang:
rechnen3.png (167 KB)

rechen problem

Hans Haesler
  
Beiträge gesamt: 5826

20. Nov 2017, 11:30
Bewertung:

gelesen: 11611

Beitrag als Lesezeichen
Hallo Sándor,

besteht das Problem auch, wenn Du das Testscript aus meinem Beitrag #4 ab AppleScript-Editor startest? Statt mit dem ScriptDebugger.

Gruss, Hans

rechen problem

jekyll
Beiträge gesamt: 2047

20. Nov 2017, 12:06
Bewertung:

gelesen: 11600

Beitrag als Lesezeichen
Leider ja.
Dieser habe ich auf die Rechner von meine Frau gemacht al Captain 10.11.5 im Skript Editor.

http://www.download.siscosep.com/hds/rechnen5.pdf
Gruß Sándor


Hier auf der HDS, kann jeder was dazu lernen, sogar die die glauben alles (besser) zu wissen Wink
Das sollten WIR ALLE unterstützen: http://www.hilfdirselbst.ch/...m.cgi?do=membership;

rechen problem

kkauer
Beiträge gesamt: 661

20. Nov 2017, 13:53
Bewertung:

gelesen: 11583

Beitrag als Lesezeichen
Das Problem hängt mit den sprachspezifischen Einstellungen zusammen. Auf (d)einem deutschen System ist "." das Tausendertrennzeichen und aus z.B. "1.000" wird bei der Wandlung 1000. Du müsstest also in deinen Strings schon den passenden Dezimaltrenner "," verwenden oder einen anderen Weg/Workaround finden.

rechen problem

jekyll
Beiträge gesamt: 2047

20. Nov 2017, 14:15
Bewertung:

gelesen: 11576

Beitrag als Lesezeichen
Hey Karsten,
vielen Dank für die Erklärung!!

Weiss ich nicht ob´s in allen Fällen geht aber mit hochrunden bekomme ich für meine Zwecke einen akzeptablen Ergebnis.
Ist zwar einwenig Größe aber bei der Filmen macht es ja nix :)

Code
set {hoehePx, breitePx} to paragraphs of (do shell script "mdls " & quoted form of POSIX path of pdfDok & "| grep -Ei 'kMDItemPage(Height|Width)' | awk '{print $3}'") 
set breiteMm to ((((round (breitePx) rounding up) / mm) * 100) div 1) / 100
set hoeheMm to ((((round (hoehePx) rounding up) / mm) * 100) div 1) / 100

Gruß Sándor


Hier auf der HDS, kann jeder was dazu lernen, sogar die die glauben alles (besser) zu wissen Wink
Das sollten WIR ALLE unterstützen: http://www.hilfdirselbst.ch/...m.cgi?do=membership;

rechen problem

Hans Haesler
  
Beiträge gesamt: 5826

20. Nov 2017, 23:05
Bewertung:

gelesen: 11518

Beitrag als Lesezeichen
Hallo Karsten,

jetzt, wo Du es sagst ... Hätte ich eigentlich wissen müssen ...

@ Sandor: Dein Dreizeiler funktioniert. Aber durch das Aufrunden sind die Werte leicht erhöht.

Code
set pdfDok to choose file 

set mm to 2.835

set {hoehePx, breitePx} to paragraphs of (do shell script "mdls " & ¬
quoted form of POSIX path of pdfDok & ¬
"| grep -Ei 'kMDItemPage(Height|Width)' | awk '{print $3}'")
set hoeheMm to ((((round (hoehePx) rounding up) / mm) * 100) div 1) / 100
set breiteMm to ((((round (breitePx) rounding up) / mm) * 100) div 1) / 100

{hoeheMm, breiteMm}

--> {280.07, 220.81}

Wenn die Punkte durch Kommas ersetzt werden, ist das Ergebnis präziser:

Code
set pdfDok to choose file 

set mm to 2.835

set {hoehePx, breitePx} to paragraphs of (do shell script "mdls " & ¬
quoted form of POSIX path of pdfDok & ¬
"| grep -Ei 'kMDItemPage(Height|Width)' | awk '{print $3}'")

set AppleScript's text item delimiters to "."
set tmpList_1 to every text item of hoehePx as list
set tmpList_2 to every text item of breitePx as list
set AppleScript's text item delimiters to ","
set hoehePx to tmpList_1 as string
set breitePx to tmpList_2 as string

set AppleScript's text item delimiters to {""}

set hoeheMm to ((((hoehePx) / mm) * 100) div 1) / 100
set breiteMm to ((((breitePx) / mm) * 100) div 1) / 100

{hoeheMm, breiteMm}

--> {279.97, 220.67}

Okay, das sind nur Zehntelsmillimeter.

Gruss, Hans

rechen problem

kkauer
Beiträge gesamt: 661

21. Nov 2017, 13:14
Bewertung:

gelesen: 7847

Beitrag als Lesezeichen
Die mdls-Seitenwerte und 2.835 sind ja auch gerundet. ;)

Anyway: Wir "tummeln" uns eh schon in der Shell, also könn(t)en wir dort auch gleich die Probleme angehen/lösen.

Code-Beispiel:
- mdls eingegrenzt, daher kein grep notwendig
- Übergabe der sprachspezifischen Einstellungen (Werte kommen direkt mit Dezimalkomma zurück)
- Umrechnung (_pt/(72/25.4)) inkl. Angabe der gewünschten Nachkommastellen (%.1f = 1 Nachkommastelle)

Code
set userLocale to user locale of (get system info) 
set {hoeheMm, breiteMm} to words of (do shell script "mdls -name kMDItemPageHeight -name kMDItemPageWidth -raw '" & POSIX path of pdfDok & "'| LC_NUMERIC=" & userLocale & " xargs -0 -I _pt awk 'BEGIN {printf \"%.1f \",_pt/(72/25.4)}'")
{hoeheMm as real, breiteMm as real}

rechen problem

jekyll
Beiträge gesamt: 2047

5. Dez 2017, 10:28
Bewertung:

gelesen: 6027

Beitrag als Lesezeichen
Hallo Karsten,
ich habe Deine Antwort erst jetzt gesehen weil ich mein eigenen Thema nicht auf Themabeobachten gestellt habe. Blush

Danke schön.

Werde ich gleich einbauen.
Gruß Sándor


Hier auf der HDS, kann jeder was dazu lernen, sogar die die glauben alles (besser) zu wissen Wink
Das sollten WIR ALLE unterstützen: http://www.hilfdirselbst.ch/...m.cgi?do=membership;

rechen problem

jekyll
Beiträge gesamt: 2047

5. Dez 2017, 10:41
Bewertung:

gelesen: 6024

Beitrag als Lesezeichen
Wäre hier die "quoted form of" für den POSIX Path unnützlich?
Gruß Sándor


Hier auf der HDS, kann jeder was dazu lernen, sogar die die glauben alles (besser) zu wissen Wink
Das sollten WIR ALLE unterstützen: http://www.hilfdirselbst.ch/...m.cgi?do=membership;

rechen problem

kkauer
Beiträge gesamt: 661

6. Dez 2017, 09:31
Bewertung:

gelesen: 5944

Beitrag als Lesezeichen
Antwort auf: Wäre hier die "quoted form of" für den POSIX Path unnützlich?


Das "Absichern" des Dateipfads ist generell ratsam und in meinem Code berücksichtigt:

Code
… '" & POSIX path of pdfDok & "' … 


Die lange Form funktioniert natürlich auch, in einem solchen Fall finde ich sie aber unnötig "aufgebläht".

Code
… " & quoted form of POSIX path of pdfDok & " … 

rechen problem

jekyll
Beiträge gesamt: 2047

6. Dez 2017, 13:13
Bewertung:

gelesen: 5894

Beitrag als Lesezeichen
Na schaue her und in letzter Zeit ich bemühe mich noch in meinem scripten es nicht zu vergessen.

Der Distiller will (vielleicht nur bei mir) auch nur "POSIX path of" ohne den "quoted form of" verarbeiten.
Gruß Sándor


Hier auf der HDS, kann jeder was dazu lernen, sogar die die glauben alles (besser) zu wissen Wink
Das sollten WIR ALLE unterstützen: http://www.hilfdirselbst.ch/...m.cgi?do=membership;

rechen problem

kkauer
Beiträge gesamt: 661

6. Dez 2017, 13:55
Bewertung:

gelesen: 5878

Beitrag als Lesezeichen
Antwort auf: Na schaue her und in letzter Zeit ich bemühe mich noch in meinem scripten es nicht zu vergessen.

Der Distiller will (vielleicht nur bei mir) auch nur "POSIX path of" ohne den "quoted form of" verarbeiten.


Ich kenne deinen konkreten Anwendungsfall nicht, aber das Problem/Prinzip ist ja allgemeingültig und hat daher wahrscheinlich nichts konkret mit Distiller zu tun …

Beim Übergeben von Dateipfaden sollten diese prinzipiell 'gequoted' werden!
(wegen Leerzeichen) problematisch:
Code
/Users/User/Desktop/Meine tolle Datei.xyz 

korrekt:
Code
 '/Users/User/Desktop/Meine tolle Datei.xyz' 

'quoted form of' übernimmt genau diese 'quoten'. Das kannst du übrigens mit beliebigen Strings nutzen/testen.

In unserem obigen Beispiel wird der Befehl aber zusammengesetzt (String vorher und nachher), also kann ich die einfachen Anführungszeichen auch direkt mitgeben und spare zum einen Platz (die Zeile ist eh schon sehr lang) und zusätzlich noch den Aufruf von 'quoted form of'.

(Dieser Beitrag wurde von kkauer am 6. Dez 2017, 13:57 geändert)