KeywordsToClipboard

IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren 1.02

W.P.

Mitglied
Dabei seit
16.10.02
Beiträge
5.099
Standort
Anzing BY
#41
Ach so. Exiftool ist in Perl programmiert. Was für eine Skript-Sprache es verwendet, weiß ich nicht. Perl liegt aber nahe...
Aber warum machst du das nicht mit FF?
 

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.654
Standort
Hamburg-Moorburg
#42
Im Kern Perl, ja! Kompiliert aber für Windows.
Ich frage mich nur, was Harald benutzt hat zu Beginn.

Ich bin in Ff zu sehr an die Skripte gebunden.
Ich arbeite kaum noch mit FF. Meist nur im Finishing, oder wenn ich mal ganz konkret eingreifen muss und weiß, was ich tue.
Ich hab hier für meine Bedürfnisse eine große Symbol-Leiste mit Exiftool-Befehlen, die fertig konfiguriert sind. Kopieren Exif-Blöcke, IPTC, GPS von markierten Dateien im Ziel-Lister von markierten im Quell-Lister. Füge feste Keyword-Sätze hinzu, kopiere aus Exif in die Keywords. Sehr flexibel und voll für meine Bedürfnisse. Das ist halt voll auf DOpus zugeschnitten und ich habe meine Files oder die Thumbs permanent unter Kontrolle, weil ich die benötigten Lister ständig vor Augen habe. Ist halt mein System...
 

Mecki14

Mitglied
Dabei seit
15.03.06
Beiträge
2.810
Standort
Düsseldorf
Trophäen
einige {*} {!} * !
#43
Hallo Eike,
ich habe das Skript in der Version 1.02 zur Entfernung definierbarer Zeichen erweitert.
In Zeile 50 findest Du die Zeile
ArrayZEZ = Array(chr(34),"/","-",".") 'zu entfernende Zeichen

Dort werden die zu entfernenden Zeichen definiert, jeweils eingefasst in Anführungsstriche und getrennt durch Kommata. Eine Ausnahme ist das Anführungszeichen; es wird angegeben mit char(34).
Als Beispiel habe ich als zu entfernende Zeichen das Anführungszeichen, /, -, und . eingetragen. Die kannst Du löschen oder durch beliebige Zeichen ergänzen.

Ich hoffe damit ist Dein Problem gelöst.
 

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.654
Standort
Hamburg-Moorburg
#44
Nein, ist es nicht, Harald...
und es tut mir Leid, dass ich hier Rat/Hilfe gesucht habe, weil es mich inzwischen überfordert den Hilfen oder Ratschlägen zu folgen.
Wusste nicht, wie schlecht es mir geht, sorry...

@Mecki14
Ich bin ja mit dem Angefragten schon außerhalb FF in Exiftool/DOpus und nicht in der Lage dort ein Array einzufügen, weil alles in die Befehlszeile von Exiftool gehört.
Also nicht weitersuchen bitte!

@W.P.
Werner, ich nutze WP-META nicht mehr, weil auch es mich mit unzähligen Spezialfunktionen aus deinem Workflow überfrachtet und ich nur am nachschlagen/lernen bin. Das aber gibt mir momentan den Rest. Ich hab das Update von WP-META mit Ach und Krach unter Win10 zum Laufen gekriegt, wo aber BatchTransfer.ini zu importieren (?) ist hat sich mir nicht erschlossen.
Nein! Nicht bemühen bitte!

Ihr seid alle sooo lieb, habt mir aber Meilen voraus und vielleicht überfordere ich euch mit meiner Ausdrucksweise. Mir gelingt es offenbar nicht die Kernfrage einfach genug zu formulieren. Ein Kommunikationsproblem! Ich bin aber nicht in der Lage zu mehr

Ich danke EUCH! Und nochmal sorry by depri!
 

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.654
Standort
Hamburg-Moorburg
#45
@Mecki14
Hallo Harald, heute hab ich mich getraut und dein Skript angeschaut, importiert und erprobt.
Respekt, wie einfach (haha) die Änderung eingefügt ist.
Tut, was das Eingangs-Skript verspricht. Aber der geleerte Kommata-String macht so keinen Sinn mehr, es sei denn es gelingt ihn zu verwursten.
Und dann hab ich mit einem Rest Gehirnschmalz die Stelle gefunden, an der ich wieder eingreifen kann, um mein Gatterzeichen "#" ein-/anzufügen. Jetzt hab ich tatsächlich zu 99,9% das, was ich haben wollte.
Dir ist es damit gelungen mich damit wieder an FF zu binden.

UUUPS, STOPP! Im Folgenden ist noch wieder ein Leerzeichen reingemogelt, bzw. nicht ausgetauscht gegen nix.
Aber meine erste Lösung macht wieder alle Leerzeichen raus aus dem fertigen String. Auch das was ich wieder reingefügt habe.

Und jetzt bin ich im Wald...

Skript importieren, Skript im Editor öffnen und die Zeile 45/46 suchen.
In Zeile 46 das letzte Komma tauschen gegen " #" (Leerzeichen trennt die gebildeten Hashtags).
Code:
KW = FF_GetIPTC("keywords")
KW = replace(KW,vbCrLf," #")
Der gebildete String bildet für mich das Hashtag-Paket, das ich so einfügen/benutzen kann.
Aber ich muss händisch immer dem ersten Keyword noch das Gatter anfügen.

Nächste Aufgabe: Wo füge ich an den ganzen String noch ein führendes "#"-Zeichen an? Das fehlt jetzt in der Array-Schleife (tauscht die Kommata... Da gibt es aber keines!).

Wie gesagt, der neue Kommata-String taugt nur zur Weiterverarbeitung...

Aber großes Lob, Harald! Danke!
 
Zuletzt bearbeitet:

W.P.

Mitglied
Dabei seit
16.10.02
Beiträge
5.099
Standort
Anzing BY
#48
Du kannst die Leerzeichen in der Zeichenkette setzen, wo du lustig bist. Alles innerhalb Anführungszeichen sind Zeichenketten.
 

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.654
Standort
Hamburg-Moorburg
#49
Richtig, Werner, das hab ich so gerade noch drauf... ;)
Problem ist, dass Leerzeichen zu entfernen sind und mit dem Gatter auch einzufügen sind.
Das Gatter ans erste Keyword hab ich übrigens definiert, da, wo der String zusammengegrabbelt wird von FF. Ganz sauber! :)
MORGEN!
 

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.654
Standort
Hamburg-Moorburg
#50
Es macht mich Knille. Irgendwie hänge ich in einer Schleife. Immer wieder kommt derselbe Fehler vorbei.

Problem ist, dass Olympus seine Geräte-Tags mit Leerzeichen schreibt, die das Skript korrekt mit Leerzeichen ins Array schreibt.
Bei der "Falsch"zeichen-Behandlung müssten diese Leerzeichen auch rausgefiltert werden.. Werden es aber nicht... Die Geräte-Keywords werden komplett mit Leerzeichen in den String geschrieben.

Ich habe jetzt ein Ergebnis, bei dem in der Routine 'Zeichen entfernen, auch die Leerzeichen entfernt werden, die ich zuvor an den Kommata mit dem '" #" reingetauscht habe.
Eine andere Reihenfolge könnte also möglicherweise helfen. Ich kann das Skript aber nicht ausreichend lesen. Alles nur mit Try & Error reingestümpert von mir. Aber an dieser Stelle hakt es.

Mein Gedanke gerade: Wenn die Falschzeichen-Behandlung bei Übernahme ins Array passieren würde, wäre es richtiger vielleicht...?
 

W.P.

Mitglied
Dabei seit
16.10.02
Beiträge
5.099
Standort
Anzing BY
#51
So was?
Doppelte Leerzeichen killen:
Dim ZK 'Zeichenkette
Do While Instr(ZK, " ") > 0
ZK = Replace(ZK, " ", " ")
Loop

Geht auch mit beliebigen anderen Zeichen. Auch Nullzeichen.
 

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.654
Standort
Hamburg-Moorburg
#52
Keine doppelten Leerzeichen, Werner...
Das Skript killt alle falschen Zeichen, also auch Leerzeichen, wenn ich sie definiere. Macht es auch richtig!
Nur die Olympus-Keywords werden mehrfach behandelt wegen "-" und ".", die Olympus reichlich einstreut, z. B. beim Objektiv.
Ich muss mal vergleichen. Scheint, dass die durch " " ersetzt werden. Sieht reichlich zerpflückt aus.
Wenn alles richtig entfernt wird, sieht der String korrekt aus, durch Kommata getrennt.
Wenn ich die Kommata durch " #" ersetze beim Schreiben, fliegt alles bei Olympus wieder auseinander. Punkte und Dashes entfernt aber reichlich Leerzeichen drin. Ich muss mal Beispiele zeigen! Bin aber im Moment wieder gestresst...
 

Mecki14

Mitglied
Dabei seit
15.03.06
Beiträge
2.810
Standort
Düsseldorf
Trophäen
einige {*} {!} * !
#53
Hallo Wener, hallo Eike,
mit replace wird das Suchzeichen immer ersetzt, auch wenn es mehrmals in der Zeichenkette vorkommt.
Zum Entfernen aller Leerzeichen in einer Zeichenkette reicht also:

Dim ZK 'Zeichenkette
ZK = Replace(ZK, " ", "")
 

W.P.

Mitglied
Dabei seit
16.10.02
Beiträge
5.099
Standort
Anzing BY
#54
@Mecki14,
dass man so alle Leerzeichen killen kann, ist mir schon klar. Manchmal ist es aber erforderlich, eines zu lassen und den Rest zu killen. So erreicht man das.
@eike,
wo stehen denn die Daten. In den Keywords?
Du kannst die Keywords separat behandeln, indem du sie in ein Array einliest und dann abarbeitest
Code:
Dim aArray
Dim aReplaceStrings
Dim iKeyWords
Dim iReplaceStrings
Dim sKeyWords
Dim sWord
Dim sResult
aSearchStrings = Array(" ", ";", "-", ".")
aRepaceStrings = Array("", "", "_", "_")
….
FF_LoadIPTC(sFile)
sKeyWords = FF_GetIPTCTag("Keywords")
aArray = Split(sKeyWords, vbCrLf)
For iKeyWords = 0 To UBound(aArray, 0)
  sWord = aArray(iKeyWords)
  For iReplaceWords = 0 To UBound(aReplaceStrings, 0)
    sWord = Replace(sWord, aSearchStrings(iReplaceWords), aReplaceStrings(iReplaceWords))
  Next
  aArray(iKeyWords) = sWord
Next
sResult = "#" &  Join(aArray, "; #")
Der Code macht nun folgendes. Er nimmt sich jedes Keyword separat vor und ersetzt jedes Zeichen gegen ein definiertes Pendant. Hier: Leerzeichen und Semikolon durch Nichts und Bindestrich und Punkt durch Unterstrich. Danach wird alles zum fertigen String zusammengesetzt.
Du kannst auch gezielte Abfragen für die Ersetzungen in der äußeren For-Schleife einfügen. Mit If..Then..ElseIf..Else oder Select Case... Aber dann wird es schon wieder komplizierter und unübersichtlicher.

PS: Profiversion wären hierbei Regular Expressions. RegExp gibt es im Scripting. Aber hier geht es tief in die Abgründe des Eingemachten. Da muss dann sogar ich testen, testen, testen, testen,...…
 
Zuletzt bearbeitet:

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.654
Standort
Hamburg-Moorburg
#55
Arrrgh! Ihr habt beide soviel Spaß daran, zuviel Spaß...
Schlimm ist, dass ich die überzeugende Lösung von Werner in das strukturierte Skript von Harald integrieren muss. Aber um diese Struktur lesen und nutzen zu können muss ich eindeutig besser drauf sein. Das muss sacken.
Und ihr braucht ein Beispiel. Morgen vielleicht...
 

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.654
Standort
Hamburg-Moorburg
#56
Der aus den jüngsten Bild extrahierte String Keywords, getrennt durch Kommata, sieht so aus:

Germany,Hamburg,Moorburg,hippopark,Hippo,Nilpferd,Flusspferd,Hippopotamus,Nili,Kleidung,Strümpfe,dekoriert,bedruckt,stockings,clothes,Sammlung,collection,OLYMPUS IMAGING CORP,EM1,Olympus MZuiko Digital ED 60mm F28 Macro,2018

In den Olympus Kamera-Tags sind korrekt schon im Original enthaltene "-" und "." entfernt.
Die Leerzeichen sind so auch im Original enthalten.
Ich glaube nicht, dass sie gelöscht und dann wieder eingefügt wurden durch das Skript.
In einer Test-Version war es mir gelungen einen Komma-getrennten Keyword-String ohne Leerzeichen zu erzeugen. Das war schon nahe am Ziel!
Als ich dann " #" an den Komma-Stellen schreiben ließ, flogen die Olympus-Tags förmlich auseinander, durch Leerzeichen.

An Werners Lösung hab ich mich noch nicht getraut...

Nur zur Demo! Bitte nichts Neues!
 

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.654
Standort
Hamburg-Moorburg
#57
Bin wieder im Wald!
Laufzeitfehler wegen nicht definierter Variablen...
Schreibfehler und fehlend.
Bin aber nicht in der Lage das hier wiederzugeben, sorry.
Grrrh, Nerven stehen schon wieder unter Strom.
 

stoffball

Mitglied
Dabei seit
08.05.06
Beiträge
42
#59
Hallo Eike,

Jetzt aber bleiben immer noch kleine Reste zurück, die in den #hashtags unverträglich sind:
- Dash, Minus oder Gedankenstriche​
. Dot, Punkt​

Wie kann ich jetzt den Keyword-String noch um diese Zeichen bereinigen?

Hier mal das Paket auf meinem DOpus-Button, der unter DOS ausgeführt wird:

@nodeselect
chcp 65001
exiftool -p "${keywords;s/ //g;s/^/#/g;s/,/ #/g}" {filepath$} | Clip
Um alle Minus-Striche und Punkte zu entfernen, einfach das Exiftool-Kommando noch etwas ergänzen:
Code:
exiftool -p "${keywords;s/ //g;s/^/#/g;s/,/ #/g;s/[-.]//g}" {filepath$} | Clip
Sollen Minus-Striche und Punkte durch verschiedene Zeichen ersetzt werden, kann
Code:
exiftool -p "${keywords;s/ //g;s/^/#/g;s/,/ #/g;tr/-./+*/}" {filepath$} | Clip
verwendet werden. Alle Minus-Striche werden durch + ersetzt, alle . mit *. Diese Zeichen können natürlich angepasst werden.
 
Zustimmungen: eike

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.654
Standort
Hamburg-Moorburg
#60
@stoffball
Klasse! Noch nicht probiert, aber das ist ja genau das, was ich angefragt hatte!
Jetzt erkenne ich auch die Syntax...

Im Skript von @Mecki14 hänge ich in dem Problem, dass durch Keywords Leerzeichen in den String gebracht werden, die sich nicht rausfiltern lassen. Das Skript nimmt auch die Leerzeichen raus, die ich gerade mit dem Gatter als Trennung geschrieben habe.
Kannst du sagen oder erkennen, ob sich in Exiftool dieses Leerzeichen reinschreiben lässt, obwohl sie in der Befehlszeile an anderer Stelle rausgelöscht werden? Spielt die Reihenfolge der Schalter ggf. eine Rolle?

Ich kann mir das Testen heute noch nicht antun...
Auf jeden Fall Danke soweit!
 
Oben