hilfdirselbst.ch
Facebook Twitter gamper-media
Mac OS X enthält verschiedene integrierte Werkzeuge und Technologien, mit denen sich gängige Aufgaben schnell und einfach automatisieren lassen.
Hans Haesler  M  p
Beiträge: 5470
16. Mär 2004, 10:47
Beitrag #1 von 3
Bewertung:
(378 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Eine komfortablere Lösung


Im Thema "Bug beim Exportieren als XPress Tags" ( http://www.page-online.de/page/forum/viewthread/2127 ) habe ich eine Lösung skizziert, welche erlaubt den Text direkt zu adressieren, weil der Export im XPress-Tags-Format problematisch sein kann.

Die gezeigten Suchmuster für die Artikel-Nummern sind fix im Script integriert. Das bedeutet: wenn eine Serie von Dokumenten mit anders formatierten Nummern behandelt werden soll, dann muss das Script editiert werden. Es ist möglich, aber mühsam, weil das Suchmuster nicht weniger als sechs Mal im Script vorkommt. Zudem muss auch die Länge der Nummer berücksichtigt werden, damit die Position der zu ersetzenden Versionsnummern richtig ausgerechnet werden kann.

Weil dies alles recht kompliziert ist, habe ich versucht, eine komfortablere Lösung zu finden. Im einleitenden Dialog, welcher ermöglicht, die neue Versionsnummer und das Suffix für das Dokument einzutragen, habe ich ein Feld eingefügt, in welchem die ganze Artikelnummer eingegeben werden kann.

Das Script setzt anschliessend selbständig das Suchmuster zusammen, gibt es in die Variable 'patVar', welche an den sechs Stellen im Script die hard-gecodeten Muster ersetzt. Die Länge der Nummer wird ebenfalls festgestellt.
---
on compPat()
  set patVar to ""
  repeat with i from 1 to count searchPattern
    set curChar to character i of searchPattern
    if curChar is in "0123456789" then
      set patVar to patVar & "[0-9]"
    else
      set patVar to patVar & curChar
    end if
  end repeat
  return patVar
end compPat
Code
Die Repeatschleife geht das eingegebene Muster zeichenweise durch. Angenommen, das 'searchPattern' ist "123 456-78", dann wird jedes Mal wenn das aktuelle Zeichen eine Ziffer ist, die Variable 'patVar' mit den Zeichen '[0-9]' ergänzt. Andere Zeichen – wie der Zwischenraum und der Trennungsstrich – werden unverändert angehängt. Das Resultat ist somit … 

[0-9][0-9][0-9] [0-9][0-9][0-9]-[0-9][0-9]
---
… und diese Zeichenkette – gespeichert in der Variablen 'patVar' – dient zum Aufspüren der entsprechend formatierten Artikelnummern.

Hans Haesler <hsa@ringier.ch> Top
 
X
Hans Haesler  M  p
Beiträge: 5470
16. Mär 2004, 11:08
Beitrag #2 von 3
Beitrag ID: #418683
Bewertung:
(377 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Eine komfortablere Lösung


In der neuesten Version muss der Anwender das Zeichenmuster nicht mehr eingeben, wenn die Formatierung der Artikelnummern in einer neuen Serie anders ist. Das Script sucht in den Stories, ob eine gewisse Zeichenfolge vorkommt.

Damit die möglichen Fälle "12 34 56-78" oder "123 456-78" oder "12 3456-78" alle mit dem gleichen Suchmuster abgedeckt werden, benötigt man dieses Muster:
Code
set testString to REMatch actStory pattern "[0-9][0-9 ]+[-&#150;][0-9][0-9]" 

Das 'pattern' beginnt mit '[0-9]', also einer beliebigen Einzelziffer. Im nächsten Klammernpaar steht dasselbe, aber gefolgt von einem Zwischenraum. Und das Pluszeichen dahinter bedeutet, dass eine oder mehrere Ziffern und ein oder mehrere Zwischenräume gefunden werden. Weiter geht es mit einem kurzen und einem halblangen Trennungsstrich. Der eine oder der andere wird erkannt. Zum Schluss noch mal zwei einzelne Ziffern. Man könnte sie zusammenfassen in '[0-9]+', aber weil immer zwei Ziffern den Abschluss machen, ist es besser, sie separat aufzuführen.

Keine Lösung ist perfekt. Mit dieser komfortablen hat man ein Problem, wenn das Script ausgerechnet auf eine Artikelnummer stösst, welche nicht korrekt formatiert ist und dann deren Muster zum Suchen/Ersetzen verwendet. Aber ich glaube, dass dies doch ein Einzelfall bleiben wird.

Wie allzuoft, ist es leider nicht möglich, das ganze Script hier zu publizieren. Aber wer Fragen dazu hat, der kann sich gerne an mich wenden.

Hans Haesler <hsa@ringier.ch>
als Antwort auf: [#418682] Top
 
Hans Haesler  M  p
Beiträge: 5470
20. Mär 2004, 09:21
Beitrag #3 von 3
Beitrag ID: #418684
Bewertung:
(377 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Eine komfortablere Lösung


Ein intelligenteres Script entwickeln &#150; ein guter Vorsatz. Aber der Scripter sollte auch auf der Höhe sein &#133;

Christian meldete mir einen Fall, in welchem das Script eine Nummer fand, welche nicht eine der gesuchten Artikelnummern ist, sondern der Zoomfaktor eines Produkts ("50-75-150%") und daraus das erste Zahlenpaar ("50-75") auszog.

Ich konnte mir nicht erklären weshalb. Diese Nummer sollte laut meinem Suchmuster nicht gefunden werden, weil sie keinen Zwischenraum enthält. Für's erste fügte ich eine Test ein, welcher einen Dialog zeigt, wenn der gefundene String zu kurz ist.

Obwohl dieser Fall eine Ausnahme war (eines unter 60 korrekt behandelten Dokumenten) musste ich eine Erklärung und eine Lösung finden. Ich versuchte Verschiedenes, aber ohne Erfolg. So wandte ich mich an die AppleScript-Users-Mailing-Liste. Und erhielt umgehend drei Antworten. Und jetzt sah ich auch meinen Denkfehler. Mit dem Muster [0-9 ]+ wird eine oder mehrere Ziffern oder Zwischenräume gefunden. Na klar! Der Zwischenraum muss nicht zwingend enthalten sein.

Einer der Antwortenden zeigte mir, wie das Suchmuster aussehen sollte. Obwohl er weder "RegEx Commands" noch "Satimage" zum Testen hatte. Meinen Respekt!
Code
"[0-9][0-9]+( [0-9][0-9]+)+-[0-9][0-9]" 

Dieses Muster kann so vereinfacht werden: "[0-9]+( [0-9]+)+-[0-9][0-9]"

Ich werde noch die Variante mit dem längeren Trennungsstrich einfügen (dieses Zeichen kann in der Mailingliste nicht dargestellt werden, deshalb nahm ich es aus meinem Beispiel heraus) und Christian noch heute die neueste Version des Scripts zustellen.

Hans Haesler <hsa@ringier.ch>
als Antwort auf: [#418682] Top