Forenindex » Programmierung/Entwicklung » AppleScript » Variablen Teil aus einem Dateinamen löschen

Variablen Teil aus einem Dateinamen löschen

schallwelt
Beiträge gesamt: 12

24. Jan 2012, 18:41
Bewertung:

gelesen: 7906

Beitrag als Lesezeichen
Hallo zusammen,

ich habe die Aufgabe aus einem Dateinamen immer eine Variable an Ziffern zu löschen:

DE69C11001_OSE_TD_Drahtkorb_1280x850.pdf
soll werden zu
DE69C11001_OSE_TD_Drahtkorb


DE69C11001_OSE_TD_Infoklapper_800x50.pdf
soll werden zu
DE69C11001_OSE_TD_Infoklapper.pdf


Das Problem ist, dass ich nicht einfach z.B. sagen kann:
(text -10 thru -1 of myItemName)
da ja immer verschiedene Größen vorkommen können.


Kann ich irgendwie von hinten den letzen "_" ansprechen
und alles ab da, bis auf die Dateiendung löschen?


Hoffe, dass irgendjemand verstanden hat, was ich meine :-)
Gruß Daniel

Variablen Teil aus einem Dateinamen löschen

Hans Haesler
  
Beiträge gesamt: 5818

24. Jan 2012, 19:48
Bewertung:

gelesen: 7888

Beitrag als Lesezeichen
Hallo Daniel,

es gibt mehr als eine Lösung. Man könnte auch die Satimage.osax einsetzen.
Versuchen wir es aber mit reinem AppleScript.

Code
set fileName to "DE69C11001_OSE_TD_Drahtkorb_1280x850.pdf" 

set nameList to every item of fileName
set lastPos to offset of "_" in ((reverse of nameList) as string)
set newName to text 1 thru -(lastPos + 1) of fileName & text -4 thru -1 of fileName

Die Zeichen des Namens werden als einzelne Elemente in eine Liste gegeben.
Die dritte Zeile muss man rückwärts lesen: Die Reihenfolge der Liste wird mit reverse umgekehrt und in eine Textkette verwandelt. Und mit offset of wird die Position des ersten (= letzten) Underscore-Zeichens festgestellt.

In der letzten Zeile wird der neue Name zusammengesetzt:
text 1 = Text vom ersten Zeichen
thru = bis
-(lastPos + 1) = ist schwierig zu verstehen.
In diesem Beispiel hat lastPos den Wert 13. Plus 1 = 14. Und das Minuszeichen vor der Klammer bedeutet: das vierzehnte Zeichen von hinten gezählt.

Eine andere Lösung beruht auf den AppleScript's text item delimiters.

Code
set fileName to "DE69C11001_OSE_TD_Drahtkorb_1280x850.pdf" 

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

Der Underscore wird als Trenner bestimmt. Das Ergebnis von text items of fileName ist
{"DE69C11001", "OSE", "TD", "Drahtkorb", "1280x850.pdf"}
Davon nimmt man jene vom ersten bis zum zweitletzten und setzt sie in die Variable tmpString als Textkette.
Den neuen Namen zusammensetzen: An tmpName die Zeichen vom viertletzten bis zum letzten des Originalnamens anfügen.

Gruss, Hans

Variablen Teil aus einem Dateinamen löschen

TMA
Beiträge gesamt: 384

25. Jan 2012, 10:57
Bewertung:

gelesen: 7861

Beitrag als Lesezeichen
Hallo,
kennt man sich ein wenig mit regulären Ausdrücken aus und man hat die Satimage.osax (hat Hans schon erwähnt) installiert, geht es dann so:

Code
set fileName to "DE69C11001_OSE_TD_Drahtkorb_1280x850.pdf" 

set newName to change "^(.*)_[^_]*(\\.pdf)$" in fileName into "\\1\\2" with regexp


Gruß
TMA

Variablen Teil aus einem Dateinamen löschen

schallwelt
Beiträge gesamt: 12

25. Jan 2012, 12:57
Bewertung:

gelesen: 7838

Beitrag als Lesezeichen
Hallo Hans,

vielen vielen Dank! Ich habe es mit deinem Hinweise hinbekommen.

Habe aber das ganze noch etwas abgewandelt, sodass es mit
jedem beliebigen Namen von INDD-Dokumenten passt:

Code
 
set myName to name of active document
if (text -5 thru -1 of myName) is ".indd" then
set myName to text 1 thru -6 of myName
end if

set fileName to myName

set nameList to every item of fileName
set lastPos to offset of "_" in ((reverse of nameList) as string)
set myOrdnerName to text 1 thru -(lastPos + 1) of fileName


So wird aus dem Dateinamen:

DE69C11001_OSE_TD_Drahtkorb_1280x850.indd

ein Ordner

DE69C11001_OSE_TD_Drahtkorb

in dem ich dann alles automatisch verpacken kann.


Vielen Dank!
Gruß Daniel

Variablen Teil aus einem Dateinamen löschen

Hans Haesler
  
Beiträge gesamt: 5818

25. Jan 2012, 13:08
Bewertung:

gelesen: 7828

Beitrag als Lesezeichen
Hallo Daniel,

bitteschön.

Ach so... da ist auch noch ein Ordnername im Spiel. Ich dachte mir, dass Du im ersten Beispiel die Endung nicht getippt hattest.

Gut, dass Du meine etwas knappen Erklärungen begriffen hast. :-)

Gruss, Hans