[GastForen Programmierung/Entwicklung AppleScript Preise Suchen/Ersetzen Komb. aus txt in QXP8 komb. Schlüssel

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Preise Suchen/Ersetzen Komb. aus txt in QXP8 komb. Schlüssel

flopau
Beiträge gesamt: 6

28. Jul 2012, 12:16
Beitrag # 1 von 21
Bewertung:
(5303 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo und einen netten Gruß in die Runde.
Ich hoffe, dass mir hier geholfen werden kann.

Ich habe ein Problem mit unserem 400 Seiten starken Produktkatalog. Der Katalog umfasst ca. 4000 ArtikelNr. und Preise , die mehrfach vorkommen können.
Die ArtikelNr. auch in Kombination mit anderen Werten oder ohne Preis.
Es befinden sich immer ein oder mehrere ArtikelNr. mit oder ohne Preise in Textrahmen.
Tag´s, Marker oder Stilelemente sind nicht vorhanden.

Insgesamt beläuft sich die Anzahl an Textrahmen die Preise enthalten (könnten) auf 2500.
Die einzige (fast) Regel ist, dass, wenn ein Preiseintrag vorhanden ist ArtikelNr. und Preis in einer Zeile eines Textrahmens sind.

Wobei die ArtikelNr. ein String ist.
Also ggf. auch 11393-AB-39-1 od. 29.399.228
aber auch 0008 oder 00081

Es sind zwar auch ein paar Matrix-Tabellen dabei, aber die könnten von Hand nachkorrigiert werden:

die ArtikelNr. und der alte Preis stehen in Listenform zur Verfügung und sind bislang händisch im Dokument eingepflegt..
(ohne Sortierung!!)

Systemumgebung:
OS X Lion / QXP 8.51

Nun zum Umsetzungs-Problem:
Der Preis wird ja nur eindeutig in Verbindung mit der Artikelnummer. Hier also mit dem alten Preis
Eine ArtikelPreisliste wäre von mir z.B. in folgender Form (xls od. txt,,) erstellbar:

ArtNr;Preis_alt;Preisneu;
2939;19,39; 14,38
1818;929,29; 94,10
usw.

Ich bräuchte dementsprechend ein Script/Werkzeug das
anhand der Liste durch sämtliche Textrahmen geht und
folgendes tut..
alle textrahmen mit allen einträgen in der txt durchlaufen..
Treffer ArtikelNr. in Textrahmen
wenn ja
Treffer in gleicher Zeile mit Preis_alt;
wenn ja Ersetze Preis_alt mit Preis_neu.
..nächster Textrahmen
wenn nein nächster Textrahmen

Toll wäre es natürlich, wenn das Script eine Protokolldatei schreiben würde
a la
ART 2399 -ersetzt auf Seite 1, 99,105
ART 2939 -nicht gefunden
ART 2939 -gefunden aber alter Preis falsch.

Ich hoffe, ihr könnt mir weiterhelfen.
X

Preise Suchen/Ersetzen Komb. aus txt in QXP8 komb. Schlüssel

Hans Haesler
  
Beiträge gesamt: 5826

28. Jul 2012, 12:48
Beitrag # 2 von 21
Beitrag ID: #498678
Bewertung:
(5273 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo flopau,

herzlich willkommen im AppleScript-Forum auf HilfDirSelbst! :-)

Ich habe schon öfters ein Script für solche Preisänderungen geschrieben. Auch in Verbindung mit der Artikelnummer. Aber jedes Mal war es wichtig, Originaldateien zu bekommen, damit die Voraussetzungen identisch sind.

Wenn Du mir eine typische Doppelseite des Katalogs und eine Excel-Datei (oder auch ".csv") schickst, könnte ich versuchen, eine Lösung zu finden.

Die E-Mail-Adresse befindet sich im Profil (auf meinen Namen links auf dem grauen Feld klicken).

Gruss, Hans


als Antwort auf: [#498675]

Preise Suchen/Ersetzen Komb. aus txt in QXP8 komb. Schlüssel

flopau
Beiträge gesamt: 6

28. Jul 2012, 12:57
Beitrag # 3 von 21
Beitrag ID: #498679
Bewertung:
(5269 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
vielen Dank für die schnelle Antwort.
Das klingt absolut fantastisch !
Am Montag morgen würde Ich Ihnen entsprechende Dateien zukommen lassen.

Allerbesten Dank!



als Antwort auf: [#498678]

Preise Suchen/Ersetzen Komb. aus txt in QXP8 komb. Schlüssel

Hans Haesler
  
Beiträge gesamt: 5826

28. Jul 2012, 21:19
Beitrag # 4 von 21
Beitrag ID: #498686
Bewertung:
(5217 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo flopau,

bitteschön.

Aber: Zuerst muss die Machbarkeit geprüft werden.

Die Voraussetzungen sind nicht gerade die einfachsten:
– drei verschiedene Muster der Artikel-Nummern;
– der alte Preis muss auch geprüft werden;
– Artikel-Nummern ohne Preis.

Doch erst mit den Muster-Dokumenten kann beurteilt werden, ob die Aufgabe lösbar sein wird.

Gruss, Hans


als Antwort auf: [#498679]

Preise Suchen/Ersetzen Komb. aus txt in QXP8 komb. Schlüssel

flopau
Beiträge gesamt: 6

29. Jul 2012, 06:16
Beitrag # 5 von 21
Beitrag ID: #498688
Bewertung:
(5185 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen :)

Mir ist bewusst, dass diese Unschärfe fürchterlich ist.
Insbesondere bei den Artikelnummer gibt es wohl gar kein Muster -ist wohl eher als allgemeiner STRING zu betrachten.
Der "Punkt" kann innerhalb der "Artikelnummer"überall auftreten und auch an beliebigen Stellen können Buchstaben auftreten.
Die Länge der Artikelnummer ist variabel
(4 - 12 Zeichen)

Im März diesen Jahres habe ich folgenden Weg gewählt:
Der Katalog 2012 war fertig.
400 Seiten PDF ---> txt ausgelesen
Alle Zeilen in EXCEL reinladen -txt in spalten (leerzeichen als feldtrenner)

Anhand der jeweiligen Fußzeile -Seitenzahlen für jede Zeile vergeben.
ArtikelNr/Preisliste in Excel eingelesen.
Und dann String-vergleich.
Orientieren konnte ich mich quasi nur an :
zu prüfende ArtikelNr -wenn davor nichts und danach leerzeichen -treffer--> Prüfen ob auch Preis in gleicher Zeile: Wenn alter Preis getroffen prüfen ob davor dahinter leer.

4000 x ca. 30000 Zeilen /15 Spalten durchlaufen - alle Treffer in Statuszeile der Artikel/Preisliste mit Seitenzahl u. Seitenposition zurückschreiben.

Die Exceltabelle nach Kataloseiten sortiert drucken und von Hand eintragen.


als Antwort auf: [#498686]
(Dieser Beitrag wurde von flopau am 29. Jul 2012, 06:17 geändert)

Preise Suchen/Ersetzen Komb. aus txt in QXP8 komb. Schlüssel

Hans Haesler
  
Beiträge gesamt: 5826

29. Jul 2012, 06:59
Beitrag # 6 von 21
Beitrag ID: #498689
Bewertung:
(5171 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen flopau,

wenn die Artikel-Nummern tatsächlich immer zu Beginn der Zeile stehen und immer von einem Leerschlag gefolgt werden (und selbst keinen Leerschlag enthalten), dann sollte es machbar sein. Dann kann sich die Suche an diesen "Ankern" orientieren.

Gruss, Hans


als Antwort auf: [#498688]

Preise Suchen/Ersetzen Komb. aus txt in QXP8 komb. Schlüssel

flopau
Beiträge gesamt: 6

31. Jul 2012, 16:12
Beitrag # 7 von 21
Beitrag ID: #498812
Bewertung:
(5065 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Haessler,
bin zur Zeit leider indisponiert :(

Ich hoffe, dass ich Ende dieser Woche mit den Dokumenten auf Sie zukommen kann.


als Antwort auf: [#498689]

Preise Suchen/Ersetzen Komb. aus txt in QXP8 komb. Schlüssel

Hans Haesler
  
Beiträge gesamt: 5826

31. Jul 2012, 16:35
Beitrag # 8 von 21
Beitrag ID: #498816
Bewertung:
(5055 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo flopau,

gute Besserung!

Ich habe schon mit der Entwicklung des Scripts begonnen. Das Suchmuster, mit welchem die drei verschiedenartigen Artikel-Nummern gefunden werden, funktioniert. Das Einlesen der csv-Datei und das Umwandeln in Listen auch.

Gruss, Hans


als Antwort auf: [#498812]

Preise Suchen/Ersetzen Komb. aus txt in QXP8 komb. Schlüssel

flopau
Beiträge gesamt: 6

8. Aug 2012, 12:24
Beitrag # 9 von 21
Beitrag ID: #499104
Bewertung:
(4865 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Haessler,

vielen Dank für Ihre Geduld.
Habe Ihnen eben eine Email mit einem Musterdokumet sowie die Preisliste gesendet.
Besten Dank!


als Antwort auf: [#498816]

Preise Suchen/Ersetzen Komb. aus txt in QXP8 komb. Schlüssel

Hans Haesler
  
Beiträge gesamt: 5826

8. Aug 2012, 13:39
Beitrag # 10 von 21
Beitrag ID: #499108
Bewertung:
(4845 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo flopau,

ich bedanke mich für die Dateien.

Voraussichtlich werde ich im Laufe des Abends schon mal die Machbarkeit prüfen können.

Gruss, Hans


als Antwort auf: [#499104]

Preise Suchen/Ersetzen Komb. aus txt in QXP8 komb. Schlüssel

Hans Haesler
  
Beiträge gesamt: 5826

9. Aug 2012, 21:17
Beitrag # 11 von 21
Beitrag ID: #499204
Bewertung:
(4795 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Florian,

sorry: Es ist nichts zu machen.

Bei meinen Versuchen stürzte QuarkXPress fünf Mal ab. Die Ursache: Das Dokument ist mit einer XTension (wie "XCatalog.xnt") hergestellt worden. Und diese hat in den Texten unzählige unsichtbare Zeichen hinterlassen.

Es genügt, ein paar Zeilen auszuwählen und die Auswahl ins XPress-Tags-Format zu exportieren:

Zitat <x@Tabelle_Inh><h89.999f$>5,5x6 <\a> 24 <x@BestellNr.><f$> 0<A(3,"BHEá",2/13468/10026/4/)[801]>,89<x@$><h89.999z8n3o("Calt","liga","locl")>

Die rot eingefärbten Zeichen sind unsichtbar, aber sehr empfindlich. Wenn eines davon ersetzt wird, dann gibt es unweigerlich einen Absturz. 

Wenn das Dokument nicht nachträglich manuell bearbeitet worden wäre, dann könnte man eine bestimmte Methode einsetzen. Aber weil da jemand nach dem Zeilenspalter unnötigerweise Leerzeichen eingetippt hat, sind die zurückerhaltenen Positionsangaben höchst unzuverlässig. Man riskiert, dass ein Preis nicht vollständig ersetzt wird. Oder eben, dass das Programm abstürzt.

Es tut mir leid, aber die Voraussetzungen sind nun mal zu schlecht.

Gruss, Hans


als Antwort auf: [#499108]

Preise Suchen/Ersetzen Komb. aus txt in QXP8 komb. Schlüssel

Hans Haesler
  
Beiträge gesamt: 5826

10. Aug 2012, 10:54
Beitrag # 12 von 21
Beitrag ID: #499231
Bewertung:
(4751 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo flopau,

ich verstehe Deine Verzweiflung gut.

Nachstehend noch eine Demo, welche zeigt, weshalb das Austauschen der Preise nicht zuverlässig gemacht werden kann.

Eine Textbox ist in ein neues Dokument kopiert worden. Im angehängten Screenshot sind die Texte zum Teil unkenntlich gemacht.

Das folgende Script geht durch die Absätze und prüft mithilfe der Satimage.osax, ob das definierte Suchmuster "([0-9]{1,4})(,)([0-9]{2})$" enthalten ist.

Jedes Mal wird der Variable "oldPrice' das aktuelle Ergebnis zugewiesen. Zum Beispiel: --> {matchPos:39, matchLen:4, matchResult:"0,89"}. Die Position (39), die Länge (4 Zeichen) und der Text "0,89").

Normalerweise würde es genügen, letzteren zu benutzen, um in der Excel-Datei nach dem neuen Preis zu fahnden. Aber weil es ein Problem-Text ist, wird mit einer zusätzlichen Zeile geprüft, was sich an der erhaltenen Position befindet.

Das Ergebnis wird an die Liste 'oldPriceList' gehängt. Die Zeichen "|" dienen zum Abgrenzen.

Code
set oldPriceList to {} 

tell application "QuarkXPress"
tell document 1
tell text box 1
tell story 1
repeat with p from 1 to count of paragraphs
set curPara to contents of paragraph p
try
set oldPrice to my getPrice(curPara)
if oldPrice is not "0" then
set curString to matchResult of oldPrice
set curPos to (matchPos of oldPrice) + 1
set curLen to (matchLen of oldPrice) - 1
set newPrice to ((curString as real) * 2) as string
set oldString to contents of characters curPos thru (curPos + curLen) of paragraph p
set end of oldPriceList to "|" & oldString & "|"
end if
end try
end repeat
end tell
end tell
end tell
end tell

oldPriceList

-- den Preis ausziehen
on getPrice(curString)
set curPrice to "0"
try
set curPrice to find text "([0-9]{1,4})(,)([0-9]{2})$" in curString using "\\1\\2\\3" with regexp
end try
return curPrice
end getPrice

Das Ergebnis ...

Code
{"|0,89|", "|0,69|", "|0,69|", "|0,85|", "|,89 
|", "|1,09|", "|1,69|"}

... enhält sechs korrekte Werte. Aber beim ursprünglichen "0,89" fehlt die Null. Dafür ist der Return erfasst worden.
So geht es natürlich nicht.

Gruss, Hans


als Antwort auf: [#499204]
Anhang:
Beispiel.png (64.3 KB)

Preise Suchen/Ersetzen Komb. aus txt in QXP8 komb. Schlüssel

-hans-
Beiträge gesamt: 748

10. Aug 2012, 13:15
Beitrag # 13 von 21
Beitrag ID: #499241
Bewertung:
(4730 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Hans,

ich nehme mal an die unsichtbaren zeichen lassen sich auch nicht durch ein copy paste per script bereinigen? 'the clipboard as type ...' Nur so 'ne Idee ...


als Antwort auf: [#499231]

Preise Suchen/Ersetzen Komb. aus txt in QXP8 komb. Schlüssel

Hans Haesler
  
Beiträge gesamt: 5826

10. Aug 2012, 13:38
Beitrag # 14 von 21
Beitrag ID: #499244
Bewertung:
(4721 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans-Gerd,

das müsste ich erst versuchen. Gelingt das, ohne die ganzen Formatierungen zu verlieren?

Und vor allem ohne wieder einen Absturz auszulösen ... ?

Gruss, Hans


als Antwort auf: [#499241]

Preise Suchen/Ersetzen Komb. aus txt in QXP8 komb. Schlüssel

-hans-
Beiträge gesamt: 748

10. Aug 2012, 14:18
Beitrag # 15 von 21
Beitrag ID: #499248
Bewertung:
(4694 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
eher nicht ...


als Antwort auf: [#499244]
X