Forenindex » Programmierung/Entwicklung » AppleScript » Dateien umbenennen mit Hilfe einer Excel-Tabelle

Dateien umbenennen mit Hilfe einer Excel-Tabelle

tony_danza
Beiträge gesamt: 29

25. Feb 2018, 23:06
Bewertung:

gelesen: 7571

Beitrag als Lesezeichen
Hallo zusammen!

Ich möchte Dateien nach einem gewissen Schema umbenennen. Es ist eine komplexe Aufgabe die mit Hilfe einer Excel-Tabelle und AppleScript gelöst werden soll.
Leider bin ich blutiger Anfänger bei AppleScript und benötige nun Hilfe.

Mir liegen tausende Dateien vor die aus Artikelnummern bestehen + fortlaufender Nummer.

Beispiel: TB1234_0 1.psd (_0 2, _0 3...) oder TB567_0 1.psd

Die Artikelnummern können aus 5 oder 6 Zeichen bestehen.
Jedenfalls steht hinter jeder Artikelnummer ein "_" was mir hilft nur die Artikikelnummern ohne fortlaufende Nummern auszulesen.

Die Artikelnummern benötige ich um nach ihnen in einer Excel-Tabelle zu suchen.
Meine Excel-Tabelle ist wie folgt aufgebaut:

Spalte A: Artikelnummern
Spalte B: Farbcodes
Spalte C: Farbnamen

Eine Artikelnummer hat mehrere Farben, deshalb steht in der Excel-Tabelle oft die gleiche Artikelnummer in Spalte A untereinander. Daneben in Spalte B die unterschiedlichen Farbcodes für die vorhanden Farben in Spalte C.

Bspw. hat blau den Farbcode 00007, gelb hat den Farbcode 00220, ...
Die Farbcodes bestehen immer aus 5 Zeichen.

Verständlich bis hierher? Ich hoffe doch ;) Ich schreibe lieber mal ausführlich, da es doch sehr komplex ist.

Ziel ist es einen Dateinamen zu erhalten der so aufgebaut ist:

TB1234_0 1-Farbcode%Farbname.psd
(Artikelnummer_fortlaufende Nummer-Farbcode%Farbname.Dateiendung)

Also soll einfach hinter dem Dateinamen der passende Farbcode + Farbe zu der von mir eingegeben Farbe platziert werden. Das Prozent-Zeichen zwischen Farbcode und Farbname muss vorhanden sein.


Ich stelle mir das so vor:

• Im Finder-Fenster wähle ich alle Dateien(Artikel) aus die gelb sind (das können viele Unterschiedliche Artikelnummern sein)
• Die ausgewählten Dateien droppe ich auf ein Icon um das Script zu starten
• Ein Dialog-Fenster erscheint in dem ich den Farbnamen eingeben muss (in diesem Beispiel gelb)
• Nun sucht das Script in Spalte A der geöffneten Excel-Tabelle nach den Artikelnummern der gedroppten Dateien, schaut bei den gefunden Artikelnummern in Spalte C nach ob es gelb(den von mir eingegeben Begriff) gibt, wenn es gelb gibt, dann soll es en Spalte B den Farbcode extrahieren
• Jetzt soll Finder mit den vorhandenen Informationen die Dateien nach o.g. Schema umbenennen

Wichtig zu erwähnen ist, dass die Farben nicht immer den gleichen Farbcode haben. Gelb ist nicht immer 00220. Der Farbcode ist also auch abhängig von der Artikelnummer.
Bei Artikelnummer TB1234 kann gelb den Farbcode 00220 haben, bei TB567 aber 01031.


Hier ist der Code den ich mir bisher zurechtgebastelt habe (Dateiumbenennung noch nicht inbegriffen):
Code
on open Dropped_Files 
set filesFound to {}
set filesFound2 to {}
set nextItem to 1
repeat with i from 1 to count of Dropped_Files
tell application "Finder"
set myFiles to name of (item i of Dropped_Files)
end tell

set fileName to myFiles

set AppleScript's text item delimiters to "_"
set tmpName to (text items 1 thru -2 of fileName) as text
set AppleScript's text item delimiters to {""}
set newName to tmpName & text -5 thru -1 of fileName

display dialog tmpName as text

--loop used for populating list filesFound with all filenames found (name + extension)
repeat with i in myFiles
set end of filesFound to (item nextItem of myFiles)

end repeat

------------------------------------------------------

set theName to the text returned of (display dialog "Welche Farbe haben die Artikel?" default answer "")

-------------------------------------------

set theSearchInfo to tmpName

tell application "Microsoft Excel"

tell active sheet
tell used range
set endOfRange to (count of rows) as text
end tell
--set theRange to "A1:" & endOfRange
set theSearchRange to range ("A1:A" & endOfRange)

try
set found_range to find theSearchRange what theSearchInfo look at whole with match case
on error
display dialog "Artikelnummer nicht gefunden"
end try

set theHeaderRow to find theSearchRange what (theSearchInfo) look at whole search order rows search direction next
set theTestCell to the first row index of theHeaderRow
set color of interior object of theHeaderRow to {141, 180, 226}
set theStart to first row index of theHeaderRow
repeat with x from theStart to (endOfRange as integer)
set theHeaderRow to find next theSearchRange after theHeaderRow
if the first row index of theHeaderRow = theTestCell then
exit repeat
else
set color of interior object of theHeaderRow to {141, 180, 226}
end if
end repeat

------------------------------------------------------

tell application "Microsoft Excel"

set search_range to range "C:C"
set search_term to theName
set found_range to ""
set counter to 0
try
set found_range to find search_range what search_term look at whole with match case
on error
display dialog "Farbe nicht gefunden"
end try

if (found_range is not "") then
set first_cell_address to (get address of the cells of found_range)
log ("first_cell_address = " & first_cell_address)
repeat while true
set cur_row to the first row index of theHeaderRow
set mod_cell to cell cur_row of column 4 -- the same row in C column
set value of mod_cell to value of cell cur_row of column 2 as text
set counter to counter + 1

-- Now look for next result
set found_range to find next search_range after found_range
set cell_address to (get address of the cells of found_range)

if (cell_address = first_cell_address) then -- have looped around so we are finished!
exit repeat
end if
end repeat

activate object cell cur_row of column 4

set theList to get value of cell cur_row of column 1 as text

end if

log ("found " & counter & " items")

activate application "Microsoft Excel"
tell application "System Events" to tell process "Microsoft Excel"
keystroke "c" using command down -- Command "c" (copies active cell to clipboard)
end tell

end tell

------------------------------------------------

end tell

end tell

-------------------------------------------------

end repeat

------------------------------------------------------

end open


Ich komme leider nicht weiter, da der Vorgang, die Informationen aus Spalte B(column 2) in Spalte D(column 4)zu übertragen, immer nur in der ersten Zeile der gefunden Artikelnummer geschieht.
Das liegt wohl an dem first row index Eintrag, kann das aber irgendwie nicht umgehen.

Den Code um die Dateien anhand der vorhandenen Informationen umzubenennen poste ich jetzt mal nicht, das würde den Rahmen sprengen.
Der ist aber auf jeden Fall richtig messy und auch hier könnte ich Hilfe gebrauchen

Kann mir jemand Helfen?
Wie bekomme ich es hin, dass das Script den Farbcode aus der Zeile mit dem eingegebenen Farbnamen ausliest und nicht aus der ersten Zeile?

P.S. Sorry für so viel Text ;)

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

7. Mär 2018, 11:33
Bewertung:

gelesen: 7417

Beitrag als Lesezeichen
Hallo Tony,

noch keine Antwort bisher ... Das Lösen einer solchen, nicht alltäglichen Aufgabe, ist ohne Beispieldatei kaum möglich.

Sende mir doch bitte die Excel-Datei. Und einen Screen-shot der ausgewählten Dateien. Allerdings bin ich noch bis Samstag im Urlaub.

Gruss, Hans

Dateien umbenennen mit Hilfe einer Excel-Tabelle

tony_danza
Beiträge gesamt: 29

13. Mär 2018, 23:16
Bewertung:

gelesen: 7372

Beitrag als Lesezeichen
Hallo,

voller Stolz präsentiere ich euch nun mein finales Script.
Ich habe es tatsächlich durch zeitintensives ausprobieren(lernen) hinbekommen.

Wie gesagt habe ich keine Erfahrungen mit Programmiersprachen aber für mich sieht das wie ein solides Script aus und es funktioniert:

Code
on open Dropped_Files 

set theName to the text returned of (display dialog "Welche Farbe haben die Artikel?" default answer "")

set filesFound to {}
set filesFound2 to {}
set all_files to Dropped_Files as list
set nextItem to 1

repeat with i from 1 to count of Dropped_Files
tell application "Finder"
set myFiles to name of (item i of Dropped_Files)
end tell

set fileName to myFiles

set AppleScript's text item delimiters to "_"
set tmpName to (text items 1 thru -2 of fileName) as text
set AppleScript's text item delimiters to {""}

------------------------------------------------------

set shortName to text 1 thru ((offset of "." in fileName) - 1) of fileName

-------------------------------------------

set theSearchInfo to tmpName

tell application "Microsoft Excel"

set search_range to range "F:F"
set search_term to theName
set found_range to ""
try
set found_range to find search_range what search_term look at whole with match case
on error
display dialog "Farbe nicht gefunden"
end try

tell active sheet
tell used range
set endOfRange to (count of rows) as text
end tell
set theSearchRange to range ("A1:A" & endOfRange)

try
set found_range to find theSearchRange what theSearchInfo look at whole with match case
on error
display dialog "Artikelnummer nicht gefunden"
end try

set theHeaderRow to find theSearchRange what (theSearchInfo) look at whole with match case
set theTestCell to the first row index of theHeaderRow
set theStart to first row index of theHeaderRow
repeat with x from theStart to (endOfRange as integer)
set theHeaderRow to find next theSearchRange after theHeaderRow

if value of cell x of column 6 is in {theName} then

set mod_cell to cell x of column 7 -- the same row in C column
set value of mod_cell to value of cell x of column 2 as text

activate object mod_cell
set that_cell to value of mod_cell

if that_cell < 10 then
set that_cell to "0000" & value of mod_cell
else if that_cell < 100 then
set that_cell to "000" & value of mod_cell
else if that_cell < 1000 then
set that_cell to "00" & value of mod_cell
else if that_cell < 10000 then
set that_cell to "0" & value of mod_cell
end if

------------------------------------------------------

tell application "Finder"
set this_file to item i of all_files
set file_extension to ".jpg"

set the name of this_file to shortName & "-" & (that_cell & "%" & theName as text) & file_extension as string
end tell

------------------------------------------------------

else
x = x
end if
if the first row index of theHeaderRow = theTestCell then
exit repeat
else
x = x
end if
end repeat

end tell

end tell

end repeat
end open


Wie die Exceltabelle aussieht habe ich ja bereits beschrieben. Ich habe jetzt eine neue Exceltabelle, darum stehen die Farbnamen nun in Spalte F und nicht mehr wie anfangs beschrieben in Spalte C.

Aber hier noch mal zum Verständnis:

Artikelnummern in Spalte A sehen so aus: TB123, TB567, TB1234, TB5678...
Farbcodes in Spalte B sehen so aus: 00225, 00007, 01321...
Farbnamen in Spalte C sehen so aus: black, white, chrome-yellow, black-white-chrome-yellow... (Farbkombinationen gibt es natürlich auch)

Ich bin noch am überlegen das Script etwas umzubauen um nicht andauernd in einem Dialogfenster den Farbnamen ohne Rechtschreibfehler eingeben zu müssen. Etwas nervig wenn man Namen wie "black-white-chrome-yellow" eingeben muss. Es gibt noch längere Namen!

Am liebsten wäre mir ein sich öffnendes Dialogfenster mit einer Liste aller vorhanden Farben zu den gedroppten Dateien(Artikelnummern), aus der ich dann die gewünschte Farbe mit einem klick auswählen kann.
Ich weiß nur nicht wie das in meinem Script funktionieren soll. Wenn jemand einen hilfreichen Tip hat, sehr gerne ;)

Vielleicht hat jemand eine ähnliche Aufgabe zu bewältigen, hier ist das Script dazu. Bitteschön.

Anmerkungen zu meinem Script sind herzlich willkomen.

Gruß
tony

Dateien umbenennen mit Hilfe einer Excel-Tabelle

tony_danza
Beiträge gesamt: 29

14. Mär 2018, 00:06
Bewertung:

gelesen: 7368

Beitrag als Lesezeichen
Ich weiß leider nicht wie ich einen Beitrag editieren kann, darum hier ein neuer Post.

Wollte mich noch bei dir Bedanken Hans für dein Hilfeangebot.

Gruß
tony

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

14. Mär 2018, 08:06
Bewertung:

gelesen: 7344

Beitrag als Lesezeichen
Hallo Tony,

bitte sehr. Und Gratulation zu Deiner Selbst-Hilfe! :-)

Zum Wählen aus einer Liste bietet sich choose from list an:

Code
set colorList to {"black", "white", "chrome - yellow", "black - white - chrome - yellow"} 

set theName to (choose from list colorList without multiple selections allowed) as string

if theName is "false" then error number -128

Mit multiple selections allowed könnten mehrere Namen gewählt werden. Das without verhindert das.

Wenn man nichts vorkehrt ...

Code
set theName to choose from list colorList without multiple selections allowed 

... ist das Ergebnis eine Liste mit einem Element. Deshalb das Konvertieren mit as string.

Gruss, Hans

Dateien umbenennen mit Hilfe einer Excel-Tabelle

tony_danza
Beiträge gesamt: 29

14. Mär 2018, 10:15
Bewertung:

gelesen: 7332

Beitrag als Lesezeichen
Hallo Hans,

vielen Dank für deinen Tipp.

Allerdings habe ich das Problem, dass ich in meinem Script keine Liste mit den Farbnamen zu den gefundenen Artikelnummern habe und ich auch nicht weiß wie ich eine erstellen kann.

Mein Script sucht in Spalte A nach der Artikelnummer, sobald die Artikelnummer gefunden wurde, sucht das Script ja Zeile für Zeile ab der gefundenen Artikelnummer (ab dem first row index) ab und sobald er in Spalte F den von mir definierten Farbnamen findet, schaut das Script nach dem dazugehörigen Farbcode in Spalte B.

Es wird in keinem Moment eine Liste erstellt die ich mir anzeigen lassen könnte. Ich bin da etwas ratlos ehrlich gesagt.

Vielleicht liest hier ja jemand mit der mir einen tollen Tipp geben kann. Ich wäre euch jedenfalls sehr dankbar dafür.

Vorab schon mal vielen Dank

Gruß
tony

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

14. Mär 2018, 10:34
Bewertung:

gelesen: 7331

Beitrag als Lesezeichen
Hallo Tony,

also ... die Liste mit den Farbnamen musst Du schon selber erstellen.
Dazu ganz einfach meine Beispielzeile übernehmen und ergänzen.

Gruss, Hans

Dateien umbenennen mit Hilfe einer Excel-Tabelle

tony_danza
Beiträge gesamt: 29

16. Mär 2018, 14:49
Bewertung:

gelesen: 7263

Beitrag als Lesezeichen
Hallo,

okay, das wird dann also wohl nicht möglich sein.
In der Exel Liste sind tausende Farben, die kann ich alle händisch nicht in eine Liste einfügen.

Außerdem möchte ich in der Liste nur die Farben angezeigt bekommen, die auch zu den Artikelnummern exisiteren. Eine Liste aller vorhanden Farben macht keinen Sinn, da ich mich da totsuchen würde (über tausend Einträge).

Nun hab eich aber feststellen müssen, dass das Script zwar funktioniert, aber nur von Lokal aus.

Sobald ich versuche eine Datei, die auf einem Server liegt, mit dem Script zu bearbeiten, erscheint folgende Fehlermeldung:

"alias "Servername:Ordner:Dateiname.jpg" of Application "Finder" kann nicht als ""neuer Dateiname.jpg"" gesetzt werden. (-10006)

Müsste evtl. vor dem Servernamen noch die IP-Adresse stehen?
Falls ja, wie kommt dann diese Information dahin?

Wenn ich das richtig verstehe, dann resultiert das ja aus "on open Dropped_Files" bzw. aus all_files bei "set all_files to Dropped_Files as list".

Kann es sein, dass das Script den Pfad zur Datei nicht richtig versteht weil einfach die IP-Adresse fehlt?

Hat jemand zufällig einen Rat für mich?

Ich wäre euch sehr dankbar!



gruß
tony

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

17. Mär 2018, 20:45
Bewertung:

gelesen: 7232

Beitrag als Lesezeichen
Hallo Tony,

Zitat In der Exel Liste sind tausende Farben (...)

Zitat (...) möchte ich in der Liste nur die Farben angezeigt bekommen, die auch zu den Artikelnummern exisiteren.

Das sind unklare Aussagen. Die Farbnamen, welche den Artikelnummern zugeordnet sind, sollten sich doch auswählen und kopieren lassen.
Dann kann man sie durch Suchen/Ersetzen in eine Liste verwandeln.

Allerdings: Sobald eine gewisse Anzahl überschritten ist, wird eine Anzeige per choose from list unhandlich.

Besser wäre, die Liste mit einem InDesign-Dialog anzuzeigen. Hast du eventuell InDesign zur Hand?

Abgesehen davon: Hast du wirklich alle Farben, welche Du eintippen musst, im Kopf? Oder gibt es eine Auflistung?

*****
Zu Prüfen Deines Server-Zugriff-Problems habe ich eine stark vereinfachte Version des Droplets erstellt:

Code
on open Dropped_Files 
repeat with n from 1 to count of Dropped_Files

set this_file to item n of Dropped_Files

tell application "Finder"
set fileName to name of this_file
set file_extension to ".jpg"
set name of this_file to "Dateiname" & file_extension as string
end tell

end repeat
end open

Wenn sich die gedroppte Datei in einem lokalen Ordner befindet, wird sie wie erwartet umbenannt.
Ebenfalls keine Fehlermeldung mit einer Datei, die sich au einem Server befindet, auf welchen ich mich per VPN eingeloggt habe.

Was geschieht bei Dir, wenn Du meine Droplet-Version benutzest? Klappt es auch mit dem Server?
Falls nicht, dann hast Du sehr wahrscheinlich ein Rechte-Problem.

Gruss, Hans

Dateien umbenennen mit Hilfe einer Excel-Tabelle

tony_danza
Beiträge gesamt: 29

19. Mär 2018, 11:54
Bewertung:

gelesen: 7189

Beitrag als Lesezeichen
Hallo Hans,

du hast den Haken an der Sache richtig erkannt.
Ich habe natürlich nicht alle Farbnamen im Kopf und muss in einem System nachschauen um welche Farbe es sich handeln könnte. Das ist alles andere als optimal.

Darum wäre eine Liste aus der ich auswählen kann das schlauste.
Das Problem mit choose from list verstehe ich natürlich.
InDesign habe ich installiert und könnte wahrscheinlich abhilfe schaffen aber ich muss ehrlich sagen, dass ich nicht weiß wie so etwas geht.

Zitat Die Farbnamen, welche den Artikelnummern zugeordnet sind, sollten sich doch auswählen und kopieren lassen.
Dann kann man sie durch Suchen/Ersetzen in eine Liste verwandeln.


Dank deines Tipps habe ich folgendes dem Script hinzugefügt (gar nicht mal so kompliziert):
Code
set theList to get value of cell x of column 6 as text 
set newList to (choose from list theList without multiple selections allowed) as string


Genau das wäre das was ich brauche, allerdings weiß ich nicht was ich in meinem Script ändern muss um nur [b]eine Liste der Farbnamen zu erhalten, welche den Artikelnummern zugeordnet sind.

Momentan erscheint zu jeder gefunden Farbe ein neues Fenster.

Gibt es eine Möglichkeit wie ich die Informationen sammel und in [b]einem Fenster anzeigen lasse?

------------------

Zu meinem Server-Problem:

Dein kleines Script funktioniert ohne Probleme. Da erscheint mir keine Fehlermeldung.
Also scheint es als hätte es nichts mit Zugriffsrechten zu tun.

Ich sehe jetzt aber rein von der Logik her nicht wirklich einen Unterschied zu meinem Code:
Code
tell application "Finder" 
set this_file to item i of all_files
set file_extension to ".jpg"

set name of this_file to shortName & "-" & (that_cell & "%" & theName as text) & file_extension as string
end tell

Wenn ich nun meinen Code zum umbenennen durch deinen in meinem Script ersetze, dann erscheint die gleiche Fehlermeldung.

Liegt der Fehler also dann an andere Stelle? Ich kann es mir irgendwie nicht erklären.

Für eine kleine Hilfestellung wäre ich sehr dankbar.

Gruß
tony

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

19. Mär 2018, 13:37
Bewertung:

gelesen: 7173

Beitrag als Lesezeichen
Hallo Tony,

weisst Du was? Sende mir doch bitte Deine Excel-Datei. Dann werde ich versuchen, etwas zustandezubringen.
Meine E-Mail-Adresse befindet sich in meinem Profil (Klick auf meinen gelinkten Namen)

Ich habe allerdings nur Excel 2011 zur Verfügung. Also bitte hinunterspeichern, falls notwendig.

Das Problem mit dem Ändern des Dateinamens werde ich mir auch vornehmen.

Gruss, Hans

Dateien umbenennen mit Hilfe einer Excel-Tabelle

tony_danza
Beiträge gesamt: 29

19. Mär 2018, 14:30
Bewertung:

gelesen: 7159

Beitrag als Lesezeichen
Hallo Hans,

was soll ich sagen, einen riesen Dankeschön schon mal.

Ich habe dir die Excel-Tabelle per Mail geschickt.

Ich bin wirklich gespannt auf deine Lösung.

Danke und viele Grüße
tony

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

19. Mär 2018, 14:47
Bewertung:

gelesen: 7153

Beitrag als Lesezeichen
Hallo Tony,

bitte sehr. Und danke für das Dokument.

Ich habe es schon mal geöffnet, die Spalte "F" ausgewählt, kopiert und in ein "TextWrangler"-Dokument eingefügt.

In der Tat: Es sind 3375 Namen. Aber: öfters die gleichen.

Dann habe ich die Namen sortieren und schliesslich die Duplikate entfernen lassen. Jetzt sind es "nur" noch 475. Mal schauen, wie ich das in einen handlichen Dialog kriege.

Allerdings kann ich mich nicht sofort darum kümmern, weil ein Auftrags-JavaScript Vorrang hat.

Doch spätestens im Laufe des Abends werde ich mich dahintersetzen können.

Gruss, Hans

Dateien umbenennen mit Hilfe einer Excel-Tabelle

tony_danza
Beiträge gesamt: 29

19. Mär 2018, 15:34
Bewertung:

gelesen: 7147

Beitrag als Lesezeichen
Hallo Hans,

erst mal Vorab: bitte stress dich nicht damit.
Das Script muss nicht zwingend sofort zum Einsatz kommen.

Verstehe dass du deine Freizeit hierfür in Anspruch nimmst, also kannst du das gerne machen sobald du Zeit hast.

Vielleicht sollte ich nochmals erwähnen, dass ich nicht alle 475 Namen in einem Dialog angezeigt bekommen möchte, sondern nur die Farbnamen, die auch zu den gedroppten Artikelnummern vorhanden sind.

Ja in der Liste sind öfter die gleichen Farbnamen enthalten. Das liegt daran, dass bspw. black bei fast jedem Artikel vorkommt und jeder Artikel aufgelistet ist.

Aber leider hat bspw. black nicht bei jedem Artikel den selben Farbcode. Sonst wäre es ja zu einfach.

Ich bin wie gesagt sehr gespannt auf deine Lösung des Problems.

Gruß
tony

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

19. Mär 2018, 15:55
Bewertung:

gelesen: 7145

Beitrag als Lesezeichen
Hallo Tony,

Code
sondern nur die Farbnamen, die auch zu den gedroppten Artikelnummern vorhanden sind. 

Ach sooo ... Habe ich wegen Zeitmangel noch nicht versucht, nachzuvollziehen.

Würdest Du mir das bitte näher erklären. Am besten auch mit einem Screenshot der ausgewählten
Dateien. Dann kann ich mir eventuell einen Reim darauf machen.

Danke im voraus.

Gruss, Hans

Dateien umbenennen mit Hilfe einer Excel-Tabelle

tony_danza
Beiträge gesamt: 29

19. Mär 2018, 16:48
Bewertung:

gelesen: 4624

Beitrag als Lesezeichen
Hallo Hans,

ich habe dir per Mail einen Screenshot meiner Dateien geschickt und noch eine kurze Erklärung zu dem Ablauf des Scripts.

Danke dir schon mal
viele Grüße
tony

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

19. Mär 2018, 17:20
Bewertung:

gelesen: 4623

Beitrag als Lesezeichen
Hallo Tony,

danke für die näheren Erklärungen und den Screenshot.
Ich werde das alles in Ruhe studieren.

Gruss, Hans

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

21. Mär 2018, 08:37
Bewertung:

gelesen: 4590

Beitrag als Lesezeichen
Hallo Tony,

ich konnte mich gestern erst abends mit der Aufgabe beschäftigen.
Und musste mich herantasten, um eine effiziente Lösung zu finden.

Mit Deiner Zeile ...

Code
tell application "Microsoft Excel" 
tell workbook 1
set lastRow to (count of rows of used range of active sheet)
end tell
end tell
display dialog "" & lastRow

... ist das Ergebnis 17636. Obwohl in der Datei "nur" 3376 Zeilen belegt sind.

Mit diesem Befehl ...

Code
tell application "Microsoft Excel" 
tell active sheet
# den Index für die letzte benutzte Zelle der ersten Spalte holen
set lastRow to first row index of (get end (last cell of column 1) direction toward the top)
end tell
end tell
display dialog "" & lastRow

... ist das Ergebnis 3376. Die zu holende Tabelle wird viel handlicher sein.

Ich habe mit beiden Beispiel-Namen, welche Du in der Erklärung genannt hattest, einen Versuch gemacht.
Sowohl "TB1897" als auch "TB1898" kommt je zwei Mal vor. Bei der ersten sind die Farben "olive" und "black" eingetragen. Bei der zweiten sind es "grey" und "black".

Im Dialog werden also drei Namen angeboten:
"black"
"grey"
"olive".

Wenn Du nun "black" wählst, dann ist es okay, denn diese Farbe ist bei beiden Artikelnummern vorhanden. Aber ein "grey" ist nur bei der zweiten Artikelnummer eingetragen.

Frage 1: Werden dann dennoch beide Datei-Namen mit "00111%grey" ergänzt?
Frage 2: Wieviele Dateien droppst Du pro Arbeitsgang?

Zudem ist noch nicht klar, wie das Script bei "nicht gleichen Farbcodes" agieren soll. Es muss ja vor dem Umbenennen einer Datei deren Artikelnummer holen, dann nachschauen, wie der Code der gewählten Farbe ist. "So far, so good"? Eher kompliziert ...

Aber: Was tun, wenn z.B. "grey" nicht vorhanden ist?

Gruss, Hans

Dateien umbenennen mit Hilfe einer Excel-Tabelle

tony_danza
Beiträge gesamt: 29

21. Mär 2018, 11:22
Bewertung:

gelesen: 4576

Beitrag als Lesezeichen
Hallo Hans,

Zitat Im Dialog werden also drei Namen angeboten:
"black"
"grey"
"olive".


genau so habe ich mir die Liste vorgestellt.

Zitat Wenn Du nun "black" wählst, dann ist es okay, denn diese Farbe ist bei beiden Artikelnummern vorhanden. Aber ein "grey" ist nur bei der zweiten Artikelnummer eingetragen.


Hierzu muss ich sagen, dass ich ja unabhängig von der Artikelnummer immer die gleichen Farben nach Sicht auswähle.

Somit müsste ja die von mir gesuchte Farbe auf jeden Fall im Dialog erscheinen.

Momentan ist mein Script noch so aufgebaut, dass ich die Farbnamen eingeben muss. In diesem Fall "black".

Das Script schaut bei der TB1897 nach ob es black gibt, wenn gefunden, schaut er in der anderen Spalte nach dem Farbcode und benennt mir alle Dateien der TB1897 um, dann schaut er bei der TB1898 nach ob es black gibt, in diesem Fall findet er auch black, schaut nach dem Farbcode und benennt mir alle Dateien der TB1898 um.

Zitat Frage 1: Werden dann dennoch beide Datei-Namen mit "00111%grey" ergänzt?


Wenn ich jetzt grey auswähle bzw. eintippe, dann findet er bei der TB1897 nichts, dann werden die Dateien mit dieser Artikelnummer auch nicht umbenannt. Das Script geht weiter zur nächsten Artikelnummer und schaut dort ob es grey gibt, wenn gefunden, werden die Dateien umbenannt.

Ich muss am Ende, wenn der Arbeitsablauf abgeschlossen ist, nur mal schnell durch den Ordner mit den Dateien scrollen und sichten, ob alle ausgewählten Dateien umbenannt wurden.
In diesem Beispiel würde ich feststellen, dass die Dateien mit der Artikelnummer TB1898 in grey umbenannt wurden, die Dateien mit der Artikelnummer TB1897 aber nicht.

Zitat Frage 2: Wieviele Dateien droppst Du pro Arbeitsgang?


Das ist sehr unterschiedlich. Aber im Schnitt würde ich sagen, sind es 50 Dateien. 50 Dateien heisst jetzt aber nicht automatisch 50 Artikelnummern.
Das würden eher so 10 Artikelnummern sein.

Zitat Zudem ist noch nicht klar, wie das Script bei "nicht gleichen Farbcodes" agieren soll. Es muss ja vor dem Umbenennen einer Datei deren Artikelnummer holen, dann nachschauen, wie der Code der gewählten Farbe ist. "So far, so good"? Eher kompliziert ...

Aber: Was tun, wenn z.B. "grey" nicht vorhanden ist?


Bisher funktioniert das Script mit "nicht gleichen Farbcodes". Bleiben wir mal bei meinen Beispiel-Artikelnummern.
Änder doch einfach mal bei der TB1898 den Farbcode von black in eine andere Zahl. Änder 00007 zu 77777 und führe mein Script so aus wie es ist.


Dateinamen der Artikel sehen dann so aus:

TB1897_0 1-00007%black.jpg

TB1898_0 3-77777%black.jpg

Das funktioniert also schon mal.


Und so würden die Dateien im Ordner aussehen, wenn grey ausgewählt würde:

TB1897_0 1.jpg

TB1898_0 3-00111%grey.jpg


Wie gesagt würde ich beim durchscrollen durch den Ordner sehen, dass das Script die Dateien mit der Artikelnummer TB1897 nicht umbenannt hätte.
Das zeigt mir, dass TB1897 doch nicht die Farbe grey hat. Diese Dateien würde ich einfach noch mal droppen und in der Liste würde ich dann sehen, dass die Artikel nicht in grey exisitieren, sondern in bspw. "dark-grey" (ja ich weiss dass der Artikel nur black und olive hat, aber stellen wir uns einfach mal anstatt olive "dark-grey" vor.
Mein Fehler, also wähle ich dark-grey aus und das Problem ist erledigt.
Wie gesagt wähle ich die Farben nach Sicht aus, da kann ich schon mal denken, dass ein Artikel grey ist, in Wirklichkeit aber dark-grey ist.
Oder der Artikel ist gar nicht black, sondern black-black.

Jedenfalls passiert nichts mit den Dataien, wenn nicht die richtige Farbe gefunden wurde.

Ich hoffe das ist irgendwie nachvollziehbar.


Gruß
tony

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

21. Mär 2018, 11:53
Bewertung:

gelesen: 4570

Beitrag als Lesezeichen
Hallo Tony,

okay, wenn es die gewählte Farbe nicht gibt, dann wird nicht umbenannt.

Ich werde nun mal eine Reihe von Dateien vorbereiten, welche ich zum Testen verwenden kann.
Wann die erste Version bereit sein wird, ist noch ungewiss, weil ich erneut einen guten Teil des Nachmittags auswärts sein werde.


*****
Doch hier schon mal eine Vereinfachung ... Beim Speichern der Farbcodes mit ...

Code
set that_cell to value of mod_cell 

... gehen ja die führenden Nullen verloren. Und müssen umständlich wieder eingefügt werden:

Code
if that_cell < 10 then 
set that_cell to "0000" & value of mod_cell
else if that_cell < 100 then
set that_cell to "000" & value of mod_cell
else if that_cell < 1000 then
set that_cell to "00" & value of mod_cell
else if that_cell < 10000 then
set that_cell to "0" & value of mod_cell
end if

Letzteres kann vereinfacht werden. Angenommen, der Wert von 'that_cell' ist "23":

Code
set that_cell to "23" 
set that_cell to text -5 thru -1 of ("0000" & that_cell)

Das Ergebnis wird immer auf 5 Stellen getrimmt: "00023"

Es geht aber noch einfacher. :-) Mit 'string value' bleiben die führenden Nullen erhalten:

Code
set that_cell to string value of mod_cell 

--> "00023"

Gruss, Hans

Dateien umbenennen mit Hilfe einer Excel-Tabelle

tony_danza
Beiträge gesamt: 29

21. Mär 2018, 12:00
Bewertung:

gelesen: 4564

Beitrag als Lesezeichen
Hallo Hans,

vielen Dank für deine Erklärung.

Diesen Umweg gehe ich ja nur, weil ich mir nicht anders zu helfen weiss.

Manchmal ist es aber auch nur ein kleines Wort was den Unterschied macht. Man muss es aber wissen bzw. kennen.
Mir war es nicht bekannt :)

Aber danke für diesen Hinweis!

Okay Hans, dann wünsch ich dir mal einen schönen Nachmittag und bin gespannt von dir zu hören.

viele Grüße
tony

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

21. Mär 2018, 22:02
Bewertung:

gelesen: 4522

Beitrag als Lesezeichen
Hallo Tony,

heute ist wieder allerlei Unvorhergesehenes dazwischengekommen. Das Script ist noch nicht fertig.
Ich habe Dir einen Link zum Herunterladen der Betaversion 04 geschickt.

Nach dem Droppen der Dateien sollte ein Dialog die Farben zur Auswahl anbieten.
Einen der angezeigten Namen wählen und auf "OK" klicken. Ein Dialog meldet den gewählten Namen.
Würdest Du bitte prüfen, ob das bei Dir auch funktioniert.

Im Laufe des Donnerstags werde ich versuchen, diese erste Version fertigzustellen.

Gruss, Hans

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

24. Mär 2018, 09:56
Bewertung:

gelesen: 4447

Beitrag als Lesezeichen
Hallo Tony,

endlich ... ist die erste Version fertig.

Ich habe Dir per E-Mail den Link zum Herunterladen zugestellt.

Nun hoffe ich, dass das Droplet schon wie erwartet funktionieren wird.

Gruss, Hans

Dateien umbenennen mit Hilfe einer Excel-Tabelle

tony_danza
Beiträge gesamt: 29

24. Mär 2018, 12:43
Bewertung:

gelesen: 4192

Beitrag als Lesezeichen
Hallo Hans,

ich habe deine Mail gesehen und vielen Dank für diese Version!
Funktioniert bei mir reibungslos und schnell ;)

Wie ich bereits in der Mail geschrieben habe, gebe ich dir am Montag bescheid wie das Script mit Dataien auf dem Server umgeht.

Bis dahin ein schönes Wochenende!

viele Grüße
tony

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

24. Mär 2018, 15:55
Bewertung:

gelesen: 4179

Beitrag als Lesezeichen
Hallo Tony,

ich bedanke mich für Deine positive Rückmeldung. Super, dass es auf Anhieb funktioniert!

Ich werde morgen noch das Sortieren der Farbnamen einbauen. Und prüfen, ob sich Dateien, welche auf einem Server liegen, umbenennen lassen.

Gruss, Hans

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

25. Mär 2018, 10:51
Bewertung:

gelesen: 4126

Beitrag als Lesezeichen
Hallo Tony,

ich habe Dir per E-Mail den Link zum erweiterten Droplet zugestellt.

Nun werden die Farbnamen sortiert. Das besorgt der Handler 'quickSort()'.

Den Test mit dem Server habe ich gemacht. Der Server ist gut zwei Kilometer entfernt. Habe mich per VPN mit einem Laptop eingeloggt, ein paar Dateien in einen Testordner kopiert.

Dann die Dateien auf das Droplet gezogen. Ergebnis: alle wurden umbenannt. Keine Probleme.

Gruss, Hans

Dateien umbenennen mit Hilfe einer Excel-Tabelle

tony_danza
Beiträge gesamt: 29

25. Mär 2018, 13:19
Bewertung:

gelesen: 4114

Beitrag als Lesezeichen
Hallo Hans,

das Script funktioniert bestens :)

Sortierte Farbnamen macht es auf jeden Fall übersichtlicher und einfacher zum auswählen.

Ich bin wirklich gespannt wie sich das Script in der Praxis mit Dateien auf dem Server verhält. Mehr dazu dann morgen ;) Ich werde berichten!
Aber schon mal gut, dass das ohne Probleme bei dir funktioniert.

Danke für diese Modifizierung im Script.

Gruß
tony

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

25. Mär 2018, 21:06
Bewertung:

gelesen: 4100

Beitrag als Lesezeichen
Hallo Tony,

danke für Deine Bestätigung. Ich hoffe sehr, dass es bei Dir mit dem Server ebenfalls klappen wird.

Auf Deinen Wunsch ist das Droplet (samt Testdateien) bereit zum Veröffentlichen.
Aber ich warte noch Deinen Praxis-Bericht ab.

Gruss, Hans

Dateien umbenennen mit Hilfe einer Excel-Tabelle

tony_danza
Beiträge gesamt: 29

26. Mär 2018, 11:53
Bewertung:

gelesen: 4038

Beitrag als Lesezeichen
Hallo Hans,

das Script funktioniert wunderbar! Ohne Probleme und rasend schnell.

Alle Dateien werden auf dem Server umbenannt.

Ich denke es ist nun an der Zeit das Script hier zu veröffentlichen (samt Testdateien).

Vielen Dank Hans für deinen Einsatz. Das Script ist mehr als gelungen ;) Genau so habe ich mir das gewünscht.

viele Grüße
tony

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

26. Mär 2018, 13:38
Bewertung:

gelesen: 4023

Beitrag als Lesezeichen
Hallo Tony,

bitte sehr. Super, dass es jetzt auch mit Dateien auf dem Server klappt.

Dein Wunsch ist mein Befehl :-). Der Code ist am Schluss dieses Beitrages eingefügt.

Das angehängte Archiv "Testdateien.zip" enthält:
– den Ordner "Bilddateien";
– das gebrauchsfertige Droplet "DateienUmbenennen_02d.app";
– die Excel-Datei "Farbcodes.xlsx".

Es geht um Kleidungsstücke, deren Definition per Artikelnummer, Farbname und Farbcode.
Die 16 Test-Bilder enthalten je nur ein kleines, farbiges Quadrat (nicht die hübschen Damen der Originale ;-).
In der Excel-Datei ist der Inhalt der Spalten C bis E entfernt (Datenschutz). Zudem werden sie nicht benötigt.

Ausführung:
– Das Exceldokument öffnen;
– gleichfarbige Dateien auf das Droplet ziehen;
– im sich öffnenden Dialog einen Farbnamen wählen;
– mit "OK" bestätigen.

Hinweise:
Das Script macht eine Schleife durch die Dateien, prüft, ob die gewählte Farbe für die aktuelle Artikelnummer vorhanden ist.
Falls ja, holt es den zugehörigen Farbcode und ändert den Namen der Datei nach der vorgegebenen Namenskonvention.

Ist die Datei nicht im Excel-Dokument aufgeführt, wird ihr eine rote Etikette verpasst.

Und wenn die gewählte Farbe für die aktuelle Artikelnummer nicht vorhanden ist, wird eine blaue Etikette zugewiesen.

Die Nummer der ersten Datei ("TA1234_0 16.jpg") ist nicht im Excel-Dokument enthalten. Damit sie eingefärbt wird, muss sie mit mindestens einer zweiten Datei gedroppt werden.

Am sichersten ist, Dateien mit identischer Nummer zu wählen.

Denn: Wenn man "TB1897" und "TB1898" gleichzeitig droppt, kommt man nur mit "black" ungeschoren davon. Weil "grey" oder "olive" nicht für beide Artikelnummern erhältlich sind.

Code
(* 
DateienUmbenennen_02d.app
Dateien laut einem Excel-Dokument umbenennen.
© 25.03.2018 / Hans Haesler, Châtelard 52, CH-1018 Lausanne
*)

on open Dropped_Files
# Variablen als 'global' definieren
global artNumList
global indexList
global colNameList
global colCodeList

# die 'delimiters' definieren
set AppleScript's text item delimiters to "_"

# die Liste der Namen initialisieren
set nameList to {}

# eine Schleife durch die gedroppten Dateien
set nFiles to count of Dropped_Files
repeat with n from 1 to nFiles
# den Namen der aktuellen Datei der Variablen 'curName' zuweisen.
tell application "Finder" to set curName to name of (item n of Dropped_Files)
set tmpName to text item 1 of curName
if tmpName is not in nameList then
# den aktuellen Namen ans Ende der Liste anhängen
set end of nameList to tmpName
end if
end repeat

# die 'delimiters' definieren
set AppleScript's text item delimiters to ", "

tell application "Microsoft Excel"
tell active sheet

# den Index für die letzte benutzte Zelle der ersten Spalte holen
set numRows to first row index of (get end (last cell of column 1) direction toward the top)

# die Anzahl prüfen und warnen, falls notwendig
if numRows is 1 then
display dialog "Das Dokument scheint leer zu sein." buttons "OK" default button 1 with icon 0
error number -128
end if

# die erste Spalte auflisten
set artNumList to (value of range ("A1:A" & numRows))
set artNumList to (every text item of (artNumList as string))
# die zweite Spalte auflisten
set colCodeList to (string value of range ("B1:B" & numRows))
set colCodeList to (every text item of (colCodeList as string))
# die sechste Spalte auflisten
set colNameList to (value of range ("F1:F" & numRows))
set colNameList to (every text item of (colNameList as string))

end tell
end tell

# die 'delimiters' zurücksetzen
set AppleScript's text item delimiters to {""}

# die Anzahl Elemente zählen
set nItems to count items of artNumList

# die Indexliste initialisieren
set indexList to {}
# eine Schleife durch die Liste der Artikelnummern
repeat with n from 2 to nItems
# die aktuelle Artikelnummer
set curItem to item n of my artNumList
# wenn die Artikelnummer in der Liste der Namen ist ...
if curItem is in nameList then
# ... den aktuellen Index an die Liste anfügen
set end of indexList to n
end if
end repeat

# die Farbnamen-Liste initialisieren
set colList to {}
# eine Schleife durch die Indexliste
repeat with c from 1 to count of indexList
# der aktuelle Index
set curInd to item c of my indexList
# der entsprechende Farbname
set curCol to item curInd of my colNameList
# wenn dieser Name noch nicht in der Liste der Farben ist ...
if curCol is not in colList then
# ... die Liste damit ergänzen ...
set end of colList to curCol
end if
end repeat

# die Farbnamen zählen ...
set nColors to count colList
if nColors is greater than 1 then
# ... und den Handler aufrufen, welcher die Namen sortiert
quickSort(colList, 1, nColors)
end if

# den Dialog zum Wählen der Farbe anzeigen
set colorName to (choose from list colList without multiple selections allowed) as string
# falls Klick auf "Abbrechen": die Ausführung beenden
if colorName is "false" then error number -128

# die 'delimiters' definieren
set AppleScript's text item delimiters to "_"

# Variablen initialisieren
set noMatch to 0
set noCode to 0

# eine erneute Schleife durch die gedroppten Dateien
repeat with n from 1 to nFiles
set okay to false
set curFile to (item n of Dropped_Files)
tell application "Finder" to set curName to name of curFile
# der Name ohne Endung
set fullName to text 1 thru -5 of curName
# die Endung
set curSuf to text -4 thru -1 of curName
# der Stammname
set baseName to text item 1 of curName
# wenn dieser in der Liste der Artikelnummern ist ...
if baseName is in artNumList then
set sameName to false
set indList to {}
# ... eine Schleife durch die Artikelnummern-Liste
repeat with m from 2 to nItems
# die aktuelle Artikelnummer
set curItem to item m of my artNumList
# Übereinstimmung prüfen
if baseName is curItem then
set sameName to true
set end of indList to m
else
if sameName is true then exit repeat
end if
end repeat
set nInd to count of indList
repeat with c from 1 to nInd
set curInd to item c of indList
if item curInd of my colNameList is colorName then
# ... den Farbcode speichern
set curCode to item curInd of my colCodeList
set okay to true
exit repeat
end if
end repeat
if okay is true then
# den neuen Namen zusammensetzen
set newName to (fullName & "-" & curCode & "%" & colorName & curSuf) as string
# die Datei umbenennen
try
tell application "Finder" to set name of file curFile to newName
on error
set noCode to noCode + 1
try
tell application "Finder" to set label index of file curFile to 4
end try
end try
else
# kein Code gefunden: der Datei einen blauen Tag zuweisen
set noCode to noCode + 1
tell application "Finder" to set label index of file curFile to 4
end if
else
# Artikelnummer nicht im Exceldokument: der Datei einen roten Tag verpassen
set noMatch to noMatch + 1
tell application "Finder" to set label index of file curFile to 2
end if
end repeat

# die 'delimiters' zurücksetzen
set AppleScript's text item delimiters to {""}

# den Anwender informieren
set nProb to noCode + noMatch
if nProb is 0 then
display dialog "Fertig. Alle Dateien sind umbenannt." buttons "OK" default button 1 with icon 1 giving up after 2
else
if nProb is 1 then
display dialog "Achtung: Eine Datei ist nicht umbenannt." buttons "OK" default button 1 with icon 2
else
display dialog "Aufgepasst: " & nProb & " Dateien sind nicht umbenannt." buttons "OK" default button 1 with icon 2
end if
end if
end open

# der Handler zum Sortieren der Farbnamen
on quickSort(a, L, R)
script
property aList : a
end script
tell result
set ctr to L
set n to R
set aRef to item L of its aList
repeat while ctr < n
repeat while (aRef < item n of its aList) and (ctr < n)
set n to n - 1
end repeat
if n is not ctr then
set item ctr of its aList to item n of its aList
set ctr to ctr + 1
end if
repeat while (aRef > item ctr of its aList) and (ctr < n)
set ctr to ctr + 1
end repeat
if n is not ctr then
set item n of its aList to item ctr of its aList
set n to n - 1
end if
end repeat
set item n of its aList to aRef
if L < n then
quickSort(its aList, L, n - 1)
end if
if R > ctr then
quickSort(its aList, ctr + 1, R)
return its aList
end if
end tell
end quickSort

Gruss, Hans

Anhang:
Testdateien.zip (290 KB)

Dateien umbenennen mit Hilfe einer Excel-Tabelle

tony_danza
Beiträge gesamt: 29

26. Mär 2018, 14:52
Bewertung:

gelesen: 5673

Beitrag als Lesezeichen
Super,

vielen Dank!

Ich denke so können nun alle Mitleser nachvollziehen über was wir hier die ganze Zeit geredet haben.

Leider fehlt mir gerade die Zeit ein paar Fragen zum Script zu stellen, das werde ich aber machen sobald ich kann.

Manches ist mir nämlich noch nicht so ganz klar.

Trotzdem, bis hierhin ein riesen Dank noch mal Hans!
Dank deiner Hilfe kann ich mich meinem eigentlichen Job wieder widmen und muss nicht mehr so viel Zeit mit Dateien umbenennen verbringen ;)

viele Grüße
tony

Dateien umbenennen mit Hilfe einer Excel-Tabelle

tony_danza
Beiträge gesamt: 29

26. Mär 2018, 23:13
Bewertung:

gelesen: 5653

Beitrag als Lesezeichen
Hallo Hans,

zu aller erst, habe ich eine allgemeine Verständnisfrage.

Du verwendest wiederholt Befehle wie:
Code
repeat with n from 1 to nFiles 
repeat with n from 2 to nItems
repeat with c from 1 to count of indexList
...

wofür stehen denn die Buchstaben?
In meiner Vorstellung steht n für number, i für index, c für ???

Stimmt das irgendwie? Also haben die Buchstaben irgendeine Bedeutung? Und wenn ja, sind die Buchstaben abhängig vom Inhalt der Liste?

In einer Zeile steht repeat with n from 2. Dem kann ich irgendwie nicht folgen. Warum denn nicht from 1?

Dann hast du folgende Zeile platziert:
Code
# die Anzahl Elemente zählen  
set nItems to count items of artNumList


Ist es denn notwendig die Anzahl der Elemente zu zählen? Oder dient das nur dazu, sich die Anzahl anzeigen zu lassen wenn man möchte?

Code
# Variablen initialisieren  
set noMatch to 0
set noCode to 0

Was genau bedeuten denn diese Zeilen?

Das findet ja weiter unten im Script noch Verwendung, allerdings werde ich nicht schlau daraus. Könntest du mir das noch bitte erklären?
Ich verstehe in diesen Zeilen
Code
on error  
set noCode to noCode + 1

eigentlich nur: set noCode to 0 + 1

Wenn ich das mit noCode und noMatch mal verstanden habe, dann werde ich auch schlau aus den nProb Zeilen.

Beim Handler hörts komplett auf. Ich nehme das einfach mal so hin, dass diese Zeilen die Liste sortieren. Das musst du mir auch nicht erklären. Irgendwann werde ich das schon verstehen. Man lernt nie aus ;)

Wäre aber super wenn du mir ein paar Antworten auf meine Fragen geben könntest.

Ich danke dir schon mal und vielen Dank noch mal für deine tolle Version des Scripts! Ich war begeistert zu sehen wie es unter Realbedingung läuft. Schnell und zuverlässig.

viele Grüße
tony

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

27. Mär 2018, 09:17
Bewertung:

gelesen: 5637

Beitrag als Lesezeichen
Hallo Tony,

*****
das n in 'repeat with n from 1 to nFiles' ist die Zählervariable.

Die Bedeutung von n kann ein Kürzel für number sein. Bei i wäre es iteration (= lat. "iterare" = "wiederholen").

Das i sollte im Forum vermieden werden, weil [i] der Code zum Kursivstellen ist. Jetzt scheint es repariert zu sein, aber eine Zeitlang war im geposteten Script das [i] verschwunden und sämtliche folgende Zeichen waren kursiv.

Der Variablen-Name kann aber auch aus mehreren Zeichen bestehen: 'repeat with tony from 1 to nFiles' :-)

Die Ein-Zeichen-Benennung stammt aus der Ur-Zeit, als ein Script nicht mehr als 32'000 Zeichen umfassen durfte. Das lernte einen, sparsam zu sein ... Bei ein paar Scripts musste ich auf sämtliches Kommentieren verzichten.

*****
Zitat In einer Zeile steht repeat with n from 2.

Das Script beginnt mit Reihe zwei, weil in der ersten Reihe Worte wie "Artikelnummer", "Farbcode" usw. stehen.

*****
Zitat Ist es denn notwendig die Anzahl der Elemente zu zählen?

Als ich mit dem Entwickeln von AppleScripts begann, wurde einem empfohlen, die Anzahl Elemente vorher, ausserhalb der Schleife zu zählen. Damit dieser Wert nicht ständig, bei jedem Umgang geholt werden muss. Ich konnte damals keine Bremswirkung feststellen und habe den Rat nicht befolgt.

Aber bei einem JavaScript wird die Ausführung beschleunigt. Deshalb übernahm ich dieses Vorgehen auch für AppleScript. Schon nur, dass die Startzeile der Schleife "sauberer" aussieht.

Beim vorliegenden Droplet wird 'nFiles' bei der erneuten Schleife durch die gedroppten Dateien nochmals verwendet.

*****
Code
# Variablen initialisieren 
set noMatch to 0
set noCode to 0

Diese Zeilen machen genau das, was der Kommentar darüber sagt. Damit der Wert einer Variablen im Script inkrementiert werden kann, muss ihr vorher ein Wert zugewiesen werden.

Deaktiviere mal diese zwei Zeilen (# davorsetzen oder --). Dann kommt bei der Ausführung prompt eine Fehlermeldung.

Zitat set noCode to 0 + 1

So ist es. Aber wenn die Null so eingesetzt wird, ist der Wert am Schluss nicht grösser als eins. Auch wenn z.B. vier Dateien nicht umbenannt wurden.

*****
Zitat Beim Handler hörts komplett auf. Ich nehme das einfach mal so hin, dass diese Zeilen die Liste sortieren.

Im Oktober 2004 hatte Martin Fischer eine Lösung von mir so kommentiert:

Zitat Wow!
Den QuickSort-Handler hast Du aber nicht nur für die PDF-Vereinigung aus dem Ärmel gezogen ...
Da wird mir ganz schwindelig, wenn ich den versuche nachzuvollziehen.
Klasse!

Meine Antwort damals:

Zitat Die QuickSort-Routine ist nicht meine Erfindung. Dies ist übrigens die Turbo-Version. Es gibt eine
langsamere. Die schnelle hat den Vorteil, dass sie wirklich schnell ist. Aber in gewissen Fällen
habe ich damit Probleme gehabt. Das Resultat war leer. Ich muss mal versuchen, dies nachzustellen.

Bei der Turbo-Version ist zu Beginn des Handlers ein Script-Objekt definiert. Dessen Einsatz sorgt für viel mehr Geschwindigkeit.

*****
Zitat Ich danke dir schon mal und vielen Dank noch mal für deine tolle Version des Scripts! Ich war begeistert zu sehen wie es unter Realbedingung läuft. Schnell und zuverlässig.

Bitte sehr. Ich hoffe, dass es sich weiterhin bewähren wird. Doch wie immer gilt: Einsatz auf eigene Gefahr! Am besten immer vorher mindestens ein Backup der Dateien anlegen.

Gruss, Hans

Dateien umbenennen mit Hilfe einer Excel-Tabelle

tony_danza
Beiträge gesamt: 29

27. Mär 2018, 11:42
Bewertung:

gelesen: 5624

Beitrag als Lesezeichen
Hallo Hans,

dank deiner Erklärungen wird mir nun so einiges klar.

Zitat Die Bedeutung von n kann ein Kürzel für number sein. Bei i wäre es iteration (= lat. "iterare" = "wiederholen").


Mir war nicht bewusst, dass ich irgendeine Zählervariable verwenden kann, ich dachte die Buchstaben hätten eine Bedeutung, abhängig vom Inhalt.

----
Jetzt machts auch klick bei 'repeat with n from 2'. An die Informationen in der ersten Zeile hatte ich nicht gedacht.


Ich hoffe ich kann daraus lernen und meine zukünftigen Scripts einfacher bzw. schlauer gestalten.

Auf jeden Fall ist AppleScript ein Helferlein den man nicht außer acht lassen sollte. AS kann in jedem Bereich zum Einsatz kommen und ich freue mich auf weitere Automatismen um meine Prozesse zu optimieren.

Vielen Dank für deine schnelle und kompetente Unterstützung.

gruß
tony

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

27. Mär 2018, 13:22
Bewertung:

gelesen: 5616

Beitrag als Lesezeichen
Hallo Tony,

bitte sehr.

Nun, für eine "normale" repeat-Schleife braucht es drei Dinge:
– Zählervariable;
– Startwert;
– Stopwert.

Code
repeat with n from 1 to 3 
display dialog n
end repeat

Der Dialog zeigt den Wert von 'n' an.

Eine Schleife kann man auch rückwärts laufen lassen. Das ist notwendig, wenn ein Inhalt verändert wird.

Code
repeat with n from 3 to 1 by -1 
display dialog n
end repeat

Der Zusatz 'by -1' ist zwingend.

Falls Du Dich näher mit AppleScript befassen willst, dann empfiehlt sich ein gezieltes Studium.
Mit einem Buch. Oder einem Kursus.

Für beide findest Du genug Stoff bei Peter Fischer (alias Snow): http://www.fischer-bayern.de/phpBB2/index.php

Rechts oben sind acht Links. Der vierte ist "AppleScript-Bücher".
Rechts Mitte: Ein Link für das ebook "AppleScript für absolute Starter"
Rechts unten findest Du den Workshop (Themen "Dialoge", "Variablen" usw).

Happy learning! :-)

Gruss, Hans

Dateien umbenennen mit Hilfe einer Excel-Tabelle

tony_danza
Beiträge gesamt: 29

27. Mär 2018, 15:17
Bewertung:

gelesen: 5604

Beitrag als Lesezeichen
Hallo Hans,

dass eine repeat-Schleife rückwärts laufen kann ist mir neu. Aber vielen Dank für den Tipp! Früher oder später werde ich bestimmt mal darauf zurückgreifen müssen.

Auf der Seite die du verlinkt hast war ich auch schon einige male und das hat mir sehr geholfen.

Bücher zu AppleScript habe ich mir noch nicht gekauft, das wäre aber nicht verkehrt. Bisher habe ich versucht aus Forenbeiträgen zu lernen und aus dem eBook.

Da ich aber nicht aufhören möchte AppleScript zu lernen, sind deine Tipps zu den Büchern bestimmt nicht verkehrt.

Danke dir und viele Grüße
tony

Dateien umbenennen mit Hilfe einer Excel-Tabelle

Hans Haesler
  
Beiträge gesamt: 5758

27. Mär 2018, 16:18
Bewertung:

gelesen: 5595

Beitrag als Lesezeichen
Hallo Tony,

bitte sehr.

Der Zusatz by kann auch in einer vorwärtslaufenden Schleife eingesetzt werden.

Nur ungerade Werte anzeigen:

Code
repeat with n from 1 to 5 by 2 
display dialog n
end repeat

Nur Objekte mit geraden Werten behandeln:

Code
repeat with n from 2 to 6 by 2 
display dialog n
end repeat

Es gibt noch andere Arten von Schleifen (z.B. with x in aList oder eine Konstruktion mit while). Doch diese wirst Du selber finden.

Gruss, Hans