KeywordsToClipboard

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

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.562
Standort
Hammaburg-Horeburg-Moorburg
#1
Hallo,

ich benötige für eine Übernahme in mein Album die IPTC-Keywords im Zwischenspeicher, und zwar Komma-getrennt nach dem Standard.

Bisher habe ich die Keywords kopiert. Dabei werden aber die Keywords entweder nicht oder nur mit Semikolon getrennt, jedenfalls mit den Werkzeugen, die ich im Arbeitsablauf habe.

Mit nachfolgendem Script picke ich derzeit die Bildbeschreibung aus einem in der Computeransicht markiertem Bild.
Code:
//FFSubmenu=Exif
//FFName=Beschreibung kopieren
//FFPath=btoclib.js
// c 2008 by Eike&Heinz
// Wirkt auf ein in Computer-Ansicht selektiertes Bild
// Kopiert vorhandene EXIF-Bildbeschreibung in die Zwischenablage
if ( FF_GetImageCount() ==1 )
{
 if( FF_GetImageName(-1) != FF_GetImageName(0) )
   // Bild ist momentan nicht geladen, also lade es
    FF_LoadImage(FF_GetImageName(0));
 if(FF_HasExif() )
   {
     var beschreibung=FF_GetExifTag("ImageDescription");
     beschreibung=beschreibung.replace(/ /g,"");
     if( beschreibung > "")
          FF_TextToClipboard(beschreibung);
     else ff_MessageBox("Keine Bildbeschreibung vorhanden.",0);  
   }
   else FF_MessageBox("Keine Exif Informationen vorhanden.",0);
}
else FF_MessageBox("Bitte genau ein Bild markieren.",0);
Es wäre schön, wenn ich sowas auf die IPTC-Keywords loslassen könnte und die Trennungen durch ein "," erfolgen...

Kann/Möchte mir jemand helfen dabei?

Danke!
 

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.562
Standort
Hammaburg-Horeburg-Moorburg
#2
AW: IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren

Ich glaube ich hab's bis auf die Komma-Trennung...
Code:
//FFSubmenu=IPTC
//FFName=Keywords kopieren
//FFPath=key2clipb.js
// c 2008 by Eike&Heinz
// Wirkt auf ein in Computer-Ansicht selektiertes Bild
// Kopiert vorhandene IPTC-Keywords in die Zwischenablage
if ( FF_GetImageCount() ==1 )
{
 if( FF_GetImageName(-1) != FF_GetImageName(0) )
   // Bild ist momentan nicht geladen, also lade es
    FF_LoadImage(FF_GetImageName(0));
 if(FF_HasIPTC() )
   {
     var keywords=FF_GetIPTC(Keywords);
     if( keywords > "")
     
     	//Hier fehlt noch die Keyword-Trennung durch ","
     
          FF_TextToClipboard(keywords);
     else ff_MessageBox("Keine Keywords vorhanden.",0);  
   }
   else FF_MessageBox("Keine IPTC-Daten vorhanden.",0);
}
else FF_MessageBox("Bitte genau ein Bild markieren.",0);
Kann das mal jemand checken?

Fehler: Meckert, dass die variable "keywords" definiert sein soll... :(
 
Zuletzt bearbeitet:

W.P.

Mitglied
Dabei seit
16.10.02
Beiträge
4.950
Standort
Anzing BY
#3
AW: IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren

Hallo Eike,
FF_GetIPTC("Keywords");

versuch mal was über .split oder .replace.
 

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.562
Standort
Hammaburg-Horeburg-Moorburg
#4
AW: IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren

Ja! Danke Werner. Das war's...

Gibt es irgendwelche Webseiten, wo solche .replace-Standardroutinen angeboten sind?
 

W.P.

Mitglied
Dabei seit
16.10.02
Beiträge
4.950
Standort
Anzing BY
#5
AW: IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren

Hallo Eike,

Auszug aus der WSH-Hilfe (Gibt hier im Forum bestimmt auch einen Link darauf)
Hilfe Windows Script-Technologien: JScript -> replace-Methode hat gesagt.:
Gibt unter Verwendung regulärer Ausdrücke oder Suchzeichenfolgen eine Kopie der Zeichenfolge mit ersetztem Text zurück.

StringObj.replace(RegA, ErsetzenderText)

Argumente
StringObj
Erforderlich. Das String-Objekt oder Zeichenfolgenliteral, auf dem das Ersetzen durchgeführt wird. Diese Zeichenfolge wird durch die replace-Methode nicht verändert.
RegA
Erforderlich. Eine Instanz eines Regular Expression-Objekts oder Zeichenfolgenliterals. Wenn RegA keine Instanz eines Regular Expression-Objekts ist, wird RegA in eine Zeichenfolge konvertiert, und eine exakte Suche nach Ergebnissen wird durchgeführt. Es wird kein Versuch unternommen, die Zeichenfolge in einen regulären Ausdruck zu konvertieren.
ErsetzenderText
Erforderlich. Ein String-Objekt oder Zeichenfolgenliteral mit dem Text, der jede Entsprechung von RegA in StringObj ersetzen soll. In JScript 5.5 oder höher kann das Argument ErsetzenderText auch eine Funktion sein, die den ersetzenden Text zurückgibt.

Hinweise
Das Ergebnis der replace-Methode ist eine Kopie von StringObj, nachdem die angegebenen Ersetzungen durchgeführt wurden.

Jede der folgenden Übereinstimmungsvariablen kann zum Anzeigen der aktuellen Übereinstimmung und der Zeichenfolge, aus der sie resultierte, verwendet werden. Die Übereinstimmungsvariablen können zum Ersetzen von Text verwendet werden, auf dem die Ersatzzeichenfolge dynamisch bestimmt werden muss.

Zeichen = Bedeutung
$$ = $ (JScript 5.5 oder höher)
$& = Gibt den Teil von stringObj an, auf den das vollständige Muster passte. (JScript 5.5 oder höher)
$` = Gibt den Teil von stringObj an, der der Übereinstimmung vorangeht, die durch $& beschrieben wird. (JScript 5.5 oder höher)
$' = Gibt den Teil von stringObj an, der der Übereinstimmung folgt, die durch $& beschrieben wird. (JScript 5.5 oder höher)
$n = Die nte erfasste Teilübereinstimmung, wobei n eine einfache dezimale Dezimalstelle zwischen 1 und 9 ist. (JScript 5.5 oder höher)
$nn = Die nnte erfasste Teilübereinstimmung, wobei nn eine zweistellige Dezimalzahl zwischen 01 und 99 ist. (JScript 5.5 oder höher)

Wenn der ErsetzendeText eine Funktion ist, wird die Funktion für jede überinstimmende Teilzeichenfolge mit den Argumenten m + 3 aufgerufen, wobei m eine Anzahl von links schließenden Klammern in RegA ist. Das erste Argument ist eine Teilzeichenfolge, die übereinstimmte. Die nächsten m-Argumente sind alle Erfassungen, die aus der Suche resultieren. Das Argument m + 2 ist der Versatz in stringObj, in dem die Übereinstimmung auftrat, und das Argument m + 3 ist stringObj. Das Ergebnis ist eine Zeichenfolge, die daraus resultiert, dass jede übereinstimmende Teilzeichenfolge durch den entsprechenden Rückgabewert des Funktionsaufrufs ersetzt wird.

Die replace-Methode aktualisiert die Eigenschaften des globalen RegExp-Objekts.
...
 

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.562
Standort
Hammaburg-Horeburg-Moorburg
#6
AW: IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren

Du meine Güte, Werner. Das war bestimmt lieb gemeint, aber es erschlägt mich völlig.
Ich bin völlig ungebildet, was das Skripten angeht und kann mit dem Zitat so gar nichts anfangen.
Bei mir reicht es gerade, wie Stefan es neulich für sich auch ausgedrückt hat, vielleicht ein paar Anpassungen in einem Skript vorzunehmen. Dabei folge ich meiner Logik, und der Erfahrung, dass am PC nur wenig kaputt gehen kann, wenn ich dem Prinzip "Try&Error" folge... Meist hat das geklappt, wenn das Skript überschau- und gut lesbar war. Zu Formelbildungen bin ich, auch gesundheitlich, nicht mehr in der Lage.
 

W.P.

Mitglied
Dabei seit
16.10.02
Beiträge
4.950
Standort
Anzing BY
#7
AW: IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren

keywords = keywords.replace(";",",")
oder eigentlich, wenn richtig eingegeben:
keywords = keywords.replace("\r\n", ", ")
 

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.562
Standort
Hammaburg-Horeburg-Moorburg
#8
AW: IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren

Heinz hat geschrieben, dass Semikola nur für die Anzeige eingefügt sind.
Eingegeben wurden sie mit CR/LF. Wie tausche ich das denn aus?
 

W.P.

Mitglied
Dabei seit
16.10.02
Beiträge
4.950
Standort
Anzing BY
#9
AW: IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren

Hallo Eike,

keywords = keywords.replace("\r\n", ", ")

\r\n = CRLF
 

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.562
Standort
Hammaburg-Horeburg-Moorburg
#10
AW: IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren

Moin Werner,

als Mausschubser hab ich mich nie mit solchen Schaltern rumgeschlagen. Befehlssyntax war noch nie mein Ding. Hab ich immer verdrängt.

Deshalb Danke für diesen kleinen Kurs. ;)

Nun wird aber für Zeile 19 auf ein Bild mit IPTC-Keywords (CR/LF) ein Kompilierungsfehler gemeldet. :(
Code:
//FFSubmenu=IPTC
//FFName=Keywords kopieren
//FFPath=key2clipb.js
// c 2008 by Eike&Heinz und tatkräftiger Hilfe von Werner
// Wirkt auf ein in Computer-Ansicht selektiertes Bild
// Kopiert vorhandene IPTC-Keywords in die Zwischenablage
if ( FF_GetImageCount() ==1 )
{
 if( FF_GetImageName(-1) != FF_GetImageName(0) )
   // Bild ist momentan nicht geladen, also lade es
    FF_LoadImage(FF_GetImageName(0));
   if(FF_HasIPTC() )
   {
     var keywords=FF_GetIPTC("Keywords");
     if( keywords > "")
     	  keywords = keywords.replace("\r\n", ", ") // tauscht CR+LF gegen ","
     	    
          FF_TextToClipboard(keywords);
[COLOR="Red"]     else FF_MessageBox("Keine Keywords vorhanden.",0);  [/COLOR]
   }
   else FF_MessageBox("Keine IPTC-Daten vorhanden.",0);
}
else FF_MessageBox("Bitte genau ein Bild markieren.",0);
 

W.P.

Mitglied
Dabei seit
16.10.02
Beiträge
4.950
Standort
Anzing BY
#11
AW: IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren

Hallo Eike,

wenn ein Block in C/C++ oder JScript größer als eine Zeile ist, so muss er in geschweifte Klammern gesetzt werden.
Code:
if(keywords[COLOR="RoyalBlue"].length > 0[/COLOR])[COLOR="red"][B]{[/B][/COLOR]
	keywords = keywords.replace("\r\n", ", ")[COLOR="Red"][B];[/B][/COLOR] // tauscht CR+LF gegen ","
	FF_TextToClipboard(keywords);
	[COLOR="Red"][B]}[/B][/COLOR]
else
	FF_MessageBox("Keine Keywords vorhanden.",0);
 

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.562
Standort
Hammaburg-Horeburg-Moorburg
#12
AW: IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren

Hallo Werner,

ich glaub's nicht. Das mit den geschweiften Klammern hab ich probiert, aber wohl zu intuitiv. ;)
Wir nähern uns der Endfassung, denn es wird nur nach dem ersten Keyword ausgetauscht.
Irgendwie muss da eine Schleife hin entsprechend der Anzahl Keywords. Oder kann das auch abgekürzt werden?
Ich hoffe Dir macht das noch Spass... ;)

[edit] Oh, ich hab das Blaue eben erst gesehen. Das ist das bestimmt. Hört sich so an.
[edit2] if(keywords.length > 0){ geändert! :( Das oben gilt weiter!
 
Zuletzt bearbeitet:

W.P.

Mitglied
Dabei seit
16.10.02
Beiträge
4.950
Standort
Anzing BY
#13
AW: IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren

Hallo Eike,

ok, ist mein Fehler. Einer der Gründe, warum ich JScript nicht mag, ist die Schreibweise von regulären Ausdrücken:
Code:
keywords = keywords.replace([COLOR="Red"][B]/[/B][/COLOR]\r\n[COLOR="red"][B]/g[/B][/COLOR], ", ");
Hiermit sollte es gehen.
 
Zuletzt bearbeitet:

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.562
Standort
Hammaburg-Horeburg-Moorburg
#14
AW: IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren

Gotcha, Werner! Döös woars...
Du glaubst gar nicht, wo ich überall auf der Suche war. Und dann wars wieder ganz einfach 'nur' eine Syntaxtsache. Geht gut jetzt.

Aaaaber ich erinnere dunkel, dass ich früher mal die Keywords über Saver in Reihe, aber mit Semikolon getrennt eingegeben habe. Ich konnte die jetzt auf Schlag nicht wiederfinden.
Was muss denn an den Schaltern noch zugefügt werden, um das ";" ; gegen ", " zu tauschen, wenn ich mal auf die diese treffe?

Jedenfalls bin ich Dir bis hier schon mal sehr dankbar. Auch, weil ich auch noch was dabei gelernt habe.

Grüße und
 

W.P.

Mitglied
Dabei seit
16.10.02
Beiträge
4.950
Standort
Anzing BY
#15
AW: IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren

Hallo Eike,
probier mal das aus:
Code:
keywords = keywords.replace(/;/g, ", ");
 
Zuletzt bearbeitet:

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.562
Standort
Hammaburg-Horeburg-Moorburg
#16
AW: IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren

Hallo Werner,

Schnelltest hat nicht funktioniert.
Ich hab mit Semikola-getrennt mal eingetragen und dies getestet. Ging nicht!
Aaaaber ich fürchte, oder freue mich, dass Saver42 das Eingabe-Semikolon beim Speichern behandelt und zum CR/LF macht. Jedenfalls stehen sie in FF-IPTC sauber untereinander. ???
Das hieße, dass ich die alle richtig eingetragen stehen hab.

Ich schließe hiermit mal ab. Kann mich ja wieder melden, wenn die mal als tatsächlich fehlerhaft finde. Da wird ja sicher die Schlagwortsuche auch nicht drauf ansprechen. Egal!

Ich danke Dir nochmals für die Unterstützung.

Wenn andere Bedarf daran haben, kann das ja vielleicht auch mal raufgeladen werden...?
 

W.P.

Mitglied
Dabei seit
16.10.02
Beiträge
4.950
Standort
Anzing BY
#17
AW: IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren

Hallo Eike,

Genehmigung von Heinz einholen, falls Du sein Script verändert hast, Ursprungs-Copyright und Änderungs-Copyright vermerken, nun einfach JScript-Datei als ZIP verpacken.
Dann ab auf Deinen Server und Link im Downloadbereich in der richtigen Kategorie mit Erklärungstext eintragen. Wenn Du keinen Account hast, bitte an Micha wenden.

PS: Die von mir eingetragene Variante in #15 geht. Habe es bei mir getestet. Deshalb habe ich die Alternativen wieder entfernt.
 

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.562
Standort
Hammaburg-Horeburg-Moorburg
#18
AW: IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren

Danke, Werner.
Das mit dem Copyright ist schon klar. Steht schon drin.
#15 ist als Alternative auskommentiert drin.
Den Rest hab ich nochmal gründlichst kommentiert. ;)
 

eike

Mitglied
Dabei seit
23.12.07
Beiträge
1.562
Standort
Hammaburg-Horeburg-Moorburg
#20
AW: IPTC-Keywords per Skript/F-Taste in den Zwischenspeicher kopieren

Ich muss hier wieder anknüpfen.

Das bei mir installierte Skript produziert eine Fehlermeldung:
Variable ist nicht definiert: 'keywords'
Src: Laufzeitfehler in Microsoft VBScript
Line:18 Error:0 Scode:800a01f4
Hier das Skript:
Option Explicit
'* Autor: Eike Biel (nach Vorarbeit von Werner Pilwousek)
'* Start: 21.03.2010
'* [FFAutoConfig]
'* FFSubmenu=IPTC
'* FFName=IPTC-Keywords ->Zwischenablage

Main

Sub Main
Dim sPicturePath
Dim sMsg

sPicturePath = FF_GetImageName(-1)

If FF_HasExif() Then
sMsg = sMsg & vbCRLF & FF_GetIPTC("keywords")
keywords = keywords.replace("\r\n", ", ")
'...Beliebig erweiterbar
FF_TextToClipboard Mid(sMsg, 3)
End If
End Sub
Ich krieg nicht gebacken, was da damals passiert ist. Ich hab das Skript nicht in meine Produktion übernommen. Installiert zwar, aber nie benutzt. Offenbar, weil die Semikolon-Version von Heinz dem entsprach, was ich damals benötigt hab. Plötzliche Änderung in den Arbeitsabläufen damals.

Nun kann ich das hier nicht mehr verifizieren, warum ich keine lauffähiges Skript mit Kommata auf meinem Rechner habe. Liederliche Dokumentation bei mir. Sorry! 3 x Sorry! :-(

Kann jemand nochmal anknüpfen bitte? Werner?
Ich bin Skript-unfähig und auch sonst zu nichts in der Lage.

BTW @Werner
WP-Meta kann leider die gelesenen Keywords nicht exportieren. Wäre nicht eine Ausgabe in die Zwischenablage eine Option? Absatz-, Komma-, Semikolon- etc- getrennt?

Allerdings würde ich dieses Skript bevorzugen, weil so schön einfach (wenn es denn liefe).
 
Oben