Für eine relativ simple Anforderung fallen mir nur relativ aufwendige Lösungen ein. Wie erreiche ich effizient folgendes: var="Diese Worte sollten sortiert werden" varsortiert="Diese sollten sortiert werden Worte" (man sort habe ich mir natürlich angesehen) Al
Hello Al, Al Bogner wrote:
Für eine relativ simple Anforderung fallen mir nur relativ aufwendigeLösungen ein.
Wie erreiche ich effizient folgendes:
var="Diese Worte sollten sortiert werden"
varsortiert="Diese sollten sortiert werden Worte"
Wahrscheinlich suboptimal aber versuch mal den Oneliner shell> varsortiert=`echo $var | sed 's/ /\n/g' | sort -f | while read II; do echo -n "$II "; done;` shell> echo $varsortiert sort -f steht für ignore case sonst sieht man es nicht gleich. HTH, Claus
Hi Al, Am Freitag, 26. August 2005 15:42 schrieb Al Bogner:
Für eine relativ simple Anforderung fallen mir nur relativ aufwendige Lösungen ein.
Wie erreiche ich effizient folgendes:
var="Diese Worte sollten sortiert werden"
varsortiert="Diese sollten sortiert werden Worte"
Das Problem mit sort liegt ja darin, da sort nur Zeilen sortiert, und hier hat man ja nur eine. Deshalb: varsortiert=`for wort in $var; do echo $wort; done | sort` Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Al Bogner wrote:
Für eine relativ simple Anforderung fallen mir nur relativ aufwendige Lösungen ein.
Wie erreiche ich effizient folgendes:
var="Diese Worte sollten sortiert werden"
varsortiert="Diese sollten sortiert werden Worte"
(man sort habe ich mir natürlich angesehen)
Al
for i in $var ; do echo $i ; done|sort
Am Freitag, 26. August 2005 16:01 schrieb claus:
Hello Al,
Al Bogner wrote:
Für eine relativ simple Anforderung fallen mir nur relativ aufwendigeLösungen ein.
Wie erreiche ich effizient folgendes:
var="Diese Worte sollten sortiert werden"
varsortiert="Diese sollten sortiert werden Worte"
Wahrscheinlich suboptimal aber versuch mal den Oneliner
shell> varsortiert=`echo $var | sed 's/ /\n/g' | sort -f | while read II; do echo -n "$II "; done;` shell> echo $varsortiert
oder noch kürzer: varsortiert=`echo $var | sed 's/ /\n/g' | sort -f` die while-Schleife ist überflüssig. Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Am Freitag, 26. August 2005 16:03 schrieb Dr. Jürgen Vollmer:
Hi Al,
Am Freitag, 26. August 2005 15:42 schrieb Al Bogner:
Für eine relativ simple Anforderung fallen mir nur relativ aufwendige Lösungen ein.
Wie erreiche ich effizient folgendes:
var="Diese Worte sollten sortiert werden"
varsortiert="Diese sollten sortiert werden Worte"
Das Problem mit sort liegt ja darin, da sort nur Zeilen sortiert, und hier hat man ja nur eine. Deshalb:
varsortiert=`for wort in $var; do echo $wort; done | sort`
So in etwa hätte ich auch gelöst. Mir erschien eine Variante mit einer Schleife zu aufwendig, aber so wie es aussieht, geht es nicht anders. Die sed-Variante "liest" sich auch nicht einfacher. Al
Am Freitag, 26. August 2005 15:42 schrieb Al Bogner:
Für eine relativ simple Anforderung fallen mir nur relativ aufwendige Lösungen ein.
Wie erreiche ich effizient folgendes:
var="Diese Worte sollten sortiert werden"
varsortiert="Diese sollten sortiert werden Worte"
Ich hätte nun eine Zusatzfrage: Wie schließe ich bestimmte Worte aus der Sortierung aus: Die ursprüngliche Variable hat keine Leerzeichen, sondern trennt die Worte mit _, wobei ich dann _ durch Leerzeichen ersetzen lasse. Wenn das _letzte_ Wort nun "_xy" bzw. nach der Ersetzung " xy" heißt oder "_yz", dann soll diese beiden Worte nicht in der Sortierung berücksichtigt werden. Ich könnte nun vor der nach der Sortierung löschen. Was schlagt ihr vor? Mit sed? Al
Am Freitag, 26. August 2005 18:05 schrieb Al Bogner:
Am Freitag, 26. August 2005 15:42 schrieb Al Bogner:
Für eine relativ simple Anforderung fallen mir nur relativ aufwendige Lösungen ein.
Wie erreiche ich effizient folgendes:
var="Diese Worte sollten sortiert werden"
varsortiert="Diese sollten sortiert werden Worte"
Ich hätte nun eine Zusatzfrage:
Wie schließe ich bestimmte Worte aus der Sortierung aus:
Die ursprüngliche Variable hat keine Leerzeichen, sondern trennt die Worte mit _, wobei ich dann _ durch Leerzeichen ersetzen lasse.
Wenn das _letzte_ Wort nun "_xy" bzw. nach der Ersetzung " xy" heißt oder "_yz", dann soll diese beiden Worte nicht in der Sortierung berücksichtigt werden.
Ich könnte nun vor der nach der Sortierung löschen. Was schlagt ihr vor? Mit sed? dann besser gleich mit sed:
varsortiert=`echo $var | sed -e 's/_xy$//' -e 's/_/\n/g' | sort -f` Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Am Freitag, 26. August 2005 20:33 schrieb Dr. Jürgen Vollmer:
Wie erreiche ich effizient folgendes:
var="Diese Worte sollten sortiert werden"
varsortiert="Diese sollten sortiert werden Worte"
Ich hätte nun eine Zusatzfrage:
Wie schließe ich bestimmte Worte aus der Sortierung aus:
Die ursprüngliche Variable hat keine Leerzeichen, sondern trennt die Worte mit _, wobei ich dann _ durch Leerzeichen ersetzen lasse.
Wenn das _letzte_ Wort nun "_xy" bzw. nach der Ersetzung " xy" heißt oder "_yz", dann soll diese beiden Worte nicht in der Sortierung berücksichtigt werden.
Ich könnte nun vor der nach der Sortierung löschen. Was schlagt ihr vor? Mit sed?
dann besser gleich mit sed:
varsortiert=`echo $var | sed -e 's/_xy$//' -e 's/_/\n/g' | sort -f`
EInes ist mir noch syntaktisch unklar, wie ich mit sed in *1* Pipe _zuerst_ alle _ durch Leerzeichen ersetze und dann alle _xy und _yz am Ende durch nichts. Außerdem habe ich noch folgende Pipe verwendet um eventuell auftretende Leerzeichen am Anfang (kommt eher nicht vor) und am Ende sicher zu löschen: | sed 's/^ *//' | sed 's/ *$//'` Oder ist es besser mehrere Pipes zu verwenden? Syntaktisch sind für mich mehrere Pipes leichter zu lesen und die Performance dürfte bei einer Variable mit 100 Zeichen vernachlässigbar sein. Al
Am Freitag, 26. August 2005 21:16 schrieb Al Bogner:
Am Freitag, 26. August 2005 20:33 schrieb Dr. Jürgen Vollmer:
Wie erreiche ich effizient folgendes:
var="Diese Worte sollten sortiert werden"
varsortiert="Diese sollten sortiert werden Worte"
Ich hätte nun eine Zusatzfrage:
Wie schließe ich bestimmte Worte aus der Sortierung aus:
Die ursprüngliche Variable hat keine Leerzeichen, sondern trennt die Worte mit _, wobei ich dann _ durch Leerzeichen ersetzen lasse.
Wenn das _letzte_ Wort nun "_xy" bzw. nach der Ersetzung " xy" heißt oder "_yz", dann soll diese beiden Worte nicht in der Sortierung berücksichtigt werden.
Ich könnte nun vor der nach der Sortierung löschen. Was schlagt ihr vor? Mit sed?
dann besser gleich mit sed:
varsortiert=`echo $var | sed -e 's/_xy$//' -e 's/_/\n/g' | sort -f`
EInes ist mir noch syntaktisch unklar, wie ich mit sed in *1* Pipe _zuerst_ alle _ durch Leerzeichen ersetze und dann alle _xy und _yz am Ende durch nichts.
sed arbeitet die Kommandos in der angegeben Reihenfolge für jede Zeile ab. also zuerst _xy am Zeilenende durch nichts ersetzen, dann all _ durch ein blank. So einfach :-)
Außerdem habe ich noch folgende Pipe verwendet um eventuell auftretende Leerzeichen am Anfang (kommt eher nicht vor) und am Ende sicher zu löschen: | sed 's/^ *//' | sed 's/ *$//'`
ist kein separates sed nötig, es reicht eingach noch mehr sed-Kommandos anzugeben: varsortiert=`echo $var | \ sed -e 's/^ *//' -e 's/ *$// -e 's/_xy$//' -e 's/_/\n/g' | sort -f`
Oder ist es besser mehrere Pipes zu verwenden? Syntaktisch sind für mich mehrere Pipes leichter zu lesen und die Performance dürfte bei einer Variable mit 100 Zeichen vernachlässigbar sein. man kann's ja auch so schreiben:
varsortiert=`echo $var | \ sed -e 's/^ *//' \ -e 's/ *$//' \ -e 's/_xy$//' \ -e 's/_/\n/g' |\ sort -f` ist doch einfach zu lesen oder? Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Am Freitag, 26. August 2005 22:52 schrieb Dr. Jürgen Vollmer:
ist kein separates sed nötig, es reicht eingach noch mehr sed-Kommandos anzugeben:
varsortiert=`echo $var | \ sed -e 's/^ *//' -e 's/ *$// -e 's/_xy$//' -e 's/_/\n/g' | sort -f`
Oder ist es besser mehrere Pipes zu verwenden? Syntaktisch sind für mich mehrere Pipes leichter zu lesen und die Performance dürfte bei einer Variable mit 100 Zeichen vernachlässigbar sein.
man kann's ja auch so schreiben:
varsortiert=`echo $var | \ sed -e 's/^ *//' \ -e 's/ *$//' \ -e 's/_xy$//' \ -e 's/_/\n/g' |\ sort -f`
ist doch einfach zu lesen oder?
Ok, sofern man nicht einen \ beim Schreiben übersieht. :-) Ich "liebe" immer diese Fehlermeldungen von Zeile 3000, weil in Zeile 1000 ein ` vergessen wurde. So ganz passt es mir aber noch nicht: var="Diese_Worte_sollten_sortiert_ werden_xy_yz_xy" varsortiert=`echo $var | sed -e 's/_xy$//' -e 's/_yz$//' -e 's/_/\n/g' | \ sort -f | sed -e 's/^ *//' -e 's/ *$//'` Ich habe die Leerzeichen-Entfernung nach Ende der Schleife gestellt um sicher zu sein, dass letztlich kein Leerzeichen übrigbleibt. Konkret ist alles um einiges komplexer. echo $varsortiert Diese sollten sortiert werden Worte xy Ergebnis sollte aber sein: Diese sollten sortiert werden Worte xy yz Am Ende sollte also entweder oder ersetzt werden, aber nicht beides. Von der Syntax verstehe ich schon warum das passiert, weil eben hintereinander abgearbeitet wird. Al
Hallo, Am Fri, 26 Aug 2005, Al Bogner schrieb: [..]
var="Diese_Worte_sollten_sortiert_ werden_xy_yz_xy"
varsortiert=`echo $var | sed -e 's/_xy$//' -e 's/_yz$//' -e 's/_/\n/g' | \ ^^ *GNA* Das ist nicht portabel. Das kann mein GNU-sed z.B. noch nicht!
sort -f | sed -e 's/^ *//' -e 's/ *$//'`
Ich habe die Leerzeichen-Entfernung nach Ende der Schleife gestellt um sicher zu sein, dass letztlich kein Leerzeichen übrigbleibt. Konkret ist alles um einiges komplexer.
echo $varsortiert Diese sollten sortiert werden Worte xy
Ergebnis sollte aber sein: Diese sollten sortiert werden Worte xy yz
$ var="Diese_Worte_sollten_sortiert_ werden_xy_yz_xy" $ varsortiert="`echo \"$var\" | tr '_' '\n' | \ sed -e 's/ //g;${/^\(xy\|yz\)$/d; };' | sort -f | xargs echo`" $ echo "'$varsortiert'" 'Diese sollten sortiert werden Worte xy yz' $ var="Diese_Worte_sollten_sortiert_ werden_xy_yz_xy _yz" $ varsortiert="`echo "$var" | tr '_' '\n' | \ sed -e 's/ //g;${/^\(xy\|yz\)$/d; };' | sort -f | xargs echo`" $ echo "'$varsortiert'" 'Diese sollten sortiert werden Worte xy xy yz' Statt dem '| xargs echo' am Ende geht auch: | tr '\n' ' ' Problem ist ggfs: $ var="Diese_Worte_sollten nicht _sortiert_ werden_xy_yz_xy _yz" $ varsortiert="`echo \"$var\" | tr '_' '\n' | \ sed -e 's/ //g;${/^\(xy\|yz\)$/d; };' | sort -f | xargs echo`" $ echo "'$varsortiert'" 'Diese solltennicht sortiert werden Worte xy xy yz' ^^^^^^^^^^^^ Da koennte man tr auch Leerzeichen durch Zeilenumbrueche ersetzen lassen: varsortiert="`echo \"$var\" | tr '_ ' '\n' | \ sed -e 's/ //g;${/^\(xy\|yz\)$/d; };' | sort -f | xargs echo`" Dank "xargs" braucht man im sed nichtmal die Leerzeilen zu loeschen, aber das ginge auch: varsortiert="`echo \"$var\" | tr '_ ' '\n' | \ sed -e '/^$/d;s/ //g;${/^\(xy\|yz\)$/d; };' | sort -f | xargs echo`" Beachte ausserdem _BITTE_ generell das Quoting, insbes. das foo="`echo \"$var\" | machwas`" ^^ ^^ ^^ ^^ das gilt uebrigens auch fuer andere Schreiberlinge hier in der Liste. HTH, -dnh -- Ugga Ugga ! Nognog! Dadadadada! [Woko° in dag°]
Am Samstag, 27. August 2005 02:17 schrieb David Haller:
$ var="Diese_Worte_sollten_sortiert_ werden_xy_yz_xy" $ varsortiert="`echo \"$var\" | tr '_' '\n' | \ sed -e 's/ //g;${/^\(xy\|yz\)$/d; };' | sort -f | xargs echo`"
Beachte ausserdem _BITTE_ generell das Quoting, insbes. das foo="`echo \"$var\" | machwas`"
Ja. ja. das Quoting ist hier ganz wichtig. Ich hatte einfach echo $var verwendet und das klappte auch, während es mit "$var" nicht passte. Ich verstehe noch nicht so recht, warum du in diesem Fall \"$var\" verwendest. Einfach aus Vorsicht? Außerdem suche ich noch nach einer Lösung um Wortgruppen, wie zB "Gran Canaria" zusammenzuhalten. Mein Workaround ist als Trenner _ zu verwenden und Worte, die zusammengehören mit . zu trennen. Also zB so: "Gran.Canaria_sollte_nicht_getrennt_werden" Vielleicht hast du eine bessere Idee. Es gilt export LANG=C und die Worte sind in der Ausgangssituation Verzeichnisnamen. Al
Hallo, Am Sat, 27 Aug 2005, Al Bogner schrieb:
Am Samstag, 27. August 2005 02:17 schrieb David Haller:
$ var="Diese_Worte_sollten_sortiert_ werden_xy_yz_xy" $ varsortiert="`echo \"$var\" | tr '_' '\n' | \ sed -e 's/ //g;${/^\(xy\|yz\)$/d; };' | sort -f | xargs echo`"
Beachte ausserdem _BITTE_ generell das Quoting, insbes. das foo="`echo \"$var\" | machwas`"
Ja. ja. das Quoting ist hier ganz wichtig. Ich hatte einfach echo $var verwendet und das klappte auch, während es mit "$var" nicht passte.
Ich verstehe noch nicht so recht, warum du in diesem Fall \"$var\" verwendest. Einfach aus Vorsicht?
Nein. Hm. Ich kann aber gerade nicht nachvollziehen, warum die inneren Doublequotes escaped werden (muessen?)... Gequoted werden muss aber. Ich habe das mit Jan Trippler mal auseinanderklamusert: foo=`echo $var | bar` ## faellt sehr oft auf die Schnauze, z.B. wenn ## $var mit '-e' beginnt und escape-Sequenzen ## enthaelt. Und Wildcards werden expandiert. foo=`echo "$var" | bar` ## faellt in seltenen Sonderfaellen, dann aber ## sehr gemein auf die Fresse (Sonderzeichen ## in der Ausgabe von bar foo="`echo $var | bar`" ## faellt haeufig, siehe erster Fall foo="`echo \"$var\" | bar`" ## faellt IIRC nur bei " in $var und ist ## noch die beste Loesung.
Außerdem suche ich noch nach einer Lösung um Wortgruppen, wie zB "Gran Canaria" zusammenzuhalten. Mein Workaround ist als Trenner _ zu verwenden und Worte, die zusammengehören mit . zu trennen. Also zB so: "Gran.Canaria_sollte_nicht_getrennt_werden"
Jup, wenn Du musst irgendwie die Gruppen "erstellen", sei es durch ein anderes Trennzeichen oder durch quoten. Der Punkt ist nicht ideal, weil der einerseits zu haeufig (und in z.B. in ~/.kde/) vorkommt und andererseits eben eine Bedeutung in REs hat. Nimm z.B. das Macron '¯'. Oder das Leerzeichen ;) Oder haben die Ausgangsdaten Leerzeichen, die du vor der Bearbeitung durch "_" ersetzt? Und wie soll das Ergebnis aussehen? Ich hab' hier z.B. das: dh@slarty[3]: ~ (0)$ echo "var='$var'"; \ echo "$var" | tr '_' '\n' | sed -e '${/^\(xy\|yz\)$/d;};s/¯/ /g' \ | sort -f | while read x; do echo -n "'$x' "; done \ | sed 's/ $/\ /' var='Gran Canaria_sollte_nicht_getrennt_werden' 'getrennt' 'Gran Canaria' 'nicht' 'sollte' 'werden' (mit der While-Schleife ist die Ausgabe huebscher, wenn du die '' ums $x weglaesst ;) Wenn du noch etwas mehr anstellst ist perl bald sehr interessant, da ist alles etwas einfacher: dh@slarty[3]: ~ (0)$ echo "var='$var'"; dh@slarty[3]: ~ (0)$ echo "$var" | perl -ne ' @_ = split(/_/); pop @_ if $_[$#_-1] =~ /^xy|yz/; print "\"", join("\" \"", sort { uc($a) cmp uc($b) } @_), "\"\n";' var='Gran Canaria_sollte_nicht_awooga!_getrennt_werden_yz_xy_yz' "awooga!" "getrennt" "Gran Canaria" "nicht" "sollte" "werden" "xy" "yz" (Lass dich von den \"\" nicht irritieren, die sind hier eher zum debuggen und wg. dem quoten aus der shell da, in einem script geht das wesentlich uebersichtlicher.) Das Perl kann man natuerlich mit gescheiten laengeren Variablennamen schreiben v.a. missbrauche ich auch '@_'. Und die Ausgabe kannst du beim "join" ja beliebig anpassen. BTW: wo kommen die Eingabedaten her? Aus ner Datei? Die koenntest du dann auch gleich in perl lesen und verwursten... Oder per Pipe aus ls oder find? Dann hilft File::Find mit einer grossen Flexibilitaet. Jedenfalls: du muesstest das meiste direkt in perl machen koennen, ohne externe Prozessse zu starten, das sollte dann die vergleichsweise lange Startzeit von perl ausgleichen. Erzaehl also noch ein bisserl mehr ;) -dnh -- "Man kann sich auch die Brille an die Nase nageln. Alleskleber erpsart das lästige kämmen am Morgen." [Woko° in dag°]
Am Sonntag, 28. August 2005 01:44 schrieb David Haller:
Außerdem suche ich noch nach einer Lösung um Wortgruppen, wie zB "Gran Canaria" zusammenzuhalten. Mein Workaround ist als Trenner _ zu verwenden und Worte, die zusammengehören mit . zu trennen. Also zB so: "Gran.Canaria_sollte_nicht_getrennt_werden"
Jup, wenn Du musst irgendwie die Gruppen "erstellen", sei es durch ein anderes Trennzeichen oder durch quoten. Der Punkt ist nicht ideal,
Da gebe ich dir recht und deswegen habe ich gefragt.
weil der einerseits zu haeufig (und in z.B. in ~/.kde/) vorkommt und andererseits eben eine Bedeutung in REs hat. Nimm z.B. das Macron '¯'.
Gefällt mir auch nicht so gut, weil ¯ kein Zeichen auf der Tastatur ist. Mehr siehe unten.
Wenn du noch etwas mehr anstellst ist perl bald sehr interessant, da ist alles etwas einfacher:
Ja ja, meine Perl-Bücher lachen mich gerade an :-)
BTW: wo kommen die Eingabedaten her? Aus ner Datei?
Ich experimentiere gerade mit IPTC-Keywords. Ob das folgende in der Praxis sinnvoll ist, ist ein anderes Thema, ich will das einfach mal so machen um Testdaten zu erhalten. Ausgangsbasis ist ein über die Tastatur eingegebener Verzeichnisname, der verlässlich keine Leerzeichen hat und nach dem 1. _ Keywords enthält, die wiederum durch _ getrennt sind. Vor dem 1. _ befindet sich Jahr-Monat, d.h. - ist tabu. Somit ist ein Zeichen gesucht, dass direkt über die Tastatur eingegeben werden kann und Wortgruppen definiert. Ein . ist IMHO relativ gut lesbar und rückt bei proportionaler Schrift die Wortgruppe zusammen, hat aber die Konsequenz, dass man sich dadurch Stolpersteine baut. Andererseits arbeitet das Script gerade ein paar Tausend Fotos ab und ich habe noch keinen Fehler aufgrund der Verwendung von . entdeckt.
Die koenntest du dann auch gleich in perl lesen und verwursten...
Ist immer dasselbe, ich muss mich mal zu Perl zwingen, denn mit der Bash komme ich immer viel schneller zu einem brauchbaren Ergebnis. BTW: Kennt wer eine Fotoverwaltung, die es ermöglich aus JPG/TIF-Files neben Exif-Daten auch IPTC-Daten auszulesen und wenn möglich in einer MySQL-DB zu synchronisieren? Ob Exhibit Engine - http://photography-on-the.net/ee/ eine Lösung für mich ist, kann ich noch nicht sagen,weil ich EE noch nicht installiert habe. Al
Hallo, Am Sun, 28 Aug 2005, Al Bogner schrieb:
Am Sonntag, 28. August 2005 01:44 schrieb David Haller: [..]
weil der einerseits zu haeufig (und in z.B. in ~/.kde/) vorkommt und andererseits eben eine Bedeutung in REs hat. Nimm z.B. das Macron '¯'.
Gefällt mir auch nicht so gut, weil ¯ kein Zeichen auf der Tastatur ist. Mehr siehe unten.
Bei mir schon ;) Aeh, hast du ne deutsche Tastatur? Dann wuerde sich evtl. µ anbieten. Das liest sich zwar schlecht, ist aber auf der Standardtastatur und duerfte kaum sonst vorkommen... Alternativ vielleicht auch ^ oder °.
Wenn du noch etwas mehr anstellst ist perl bald sehr interessant, da ist alles etwas einfacher:
Ja ja, meine Perl-Bücher lachen mich gerade an :-)
;)
BTW: wo kommen die Eingabedaten her? Aus ner Datei? Ich experimentiere gerade mit IPTC-Keywords. [..] BTW: Kennt wer eine Fotoverwaltung, die es ermöglich aus JPG/TIF-Files neben Exif-Daten auch IPTC-Daten auszulesen und wenn möglich in einer MySQL-DB zu synchronisieren?
==== UNGETESTET! DB-Kram anpassen! ==== #!/usr/bin/perl -w use strict; use Image::ExifTool; use DBD::mysql; my $dbh; my $database = "test"; my $table = "exiftest"; my $dbistr = "DBI:mysql:database=$database;host=localhost"; sub bailout { $dbh->disconnect if $dbh; die @_; } my $exifTool = new Image::ExifTool; $dbh = DBI->connect($dbistr, "user", "passwort", { RaiseError => 1 }) or die "cannot connect to database: $database"; my $sth = $dbh->prepare("INSERT INTO $table(file, date, focallength) VALUES(?,?,?)") or bailout $dbh->errstr; foreach my $file (@ARGV) { my %iinfo = $exifTool->ImageInfo($file); $sth->execute( $file, $iinfo->{'CreateDate'}, $iinfo->{'FocalLength'} ) or bailout $dbh->errstr; } $dbh->disconnect; ==== Hier mal die Liste der Testdateien von Image::ExifTool: BMP.bmp CanonRaw.crw Casio.jpg Casio2.jpg ExifTool.gif ExifTool.jpg ExifTool.tif FujiFilm.jpg GPS.jpg GeoTiff.tif IPTC-XMP.jpg Jpeg2000.jp2 Kodak.jpg MIFF.miff Minolta.jpg Nikon.jpg NikonD2Hs.jpg NikonD70.jpg Olympus.jpg OlympusE1.jpg PDF.pdf PNG.png Panasonic.jpg Pentax.jpg Photoshop.psd PostScript.eps Ricoh.jpg Sanyo.jpg Sigma.jpg Sony.jpg Unknown.jpg Writer.jpg HTH, -dnh -- "Help!! Come see the violence inherent in the sysadmin!" -- Cobb, User Friendly, by Illiad
participants (6)
-
Al Bogner
-
claus
-
Daniel Gompf
-
David Haller
-
Dr. Jürgen Vollmer
-
Torsten Foertsch