Disc- u. Tracknummer aus Dateiname

Hallo zusammen,

ich habe mir Aktion zusammengestellt um aus den Dateiname die Disk- u. Tracknummer zu holen. Und zwar sehen die Dateien z.B. wie folgt aus:

1.23. Test
02. Test
3-34 Test
005 Test
043. Test
100. Test
205 Test
Test

Dabei werden dann alle Zahlen bis Einhundert als Track angesehen und über Einhundert wird die erste Stelle als Discnummer und die letzten zwei Stellen als Tracknummer angesehen. Dabei werden auch Trennzeichen zwischen Disc- u. Tracknummer berücksichtigt.

Meine bisherige Aktion sieht dazu wie folgt aus:

[#0]
T=5
F=TEMPTRACK
1=$if($isdigit($left(%_filename%,1)),$left(%_filename%,4),)

[#1]
T=5
F=TEMPTRACK
1=$replace(%temptrack%,-,,.,, ,,_,)

[#2]
T=5
F=TRACK
1=$if($less(%temptrack%,101),%temptrack%,$mid(%temptrack%,2,2))

[#3]
T=5
F=DISCNUMBER
1=$if($grtr(%temptrack%,100),$left(%temptrack%,1),)

[#4]
T=9
F=TEMPTRACK

Da ich ein freund von kompakteren Codes bin, würde ich gerne wissen, ob es noch möglich ist, diesen etwas zu verkleinern mit gleichen Ergebnis.

Liebe Grüße
Jens

Also mindestens für die Zahlen, die kein Trennzeichen haben kannst du die Discnumber und die tracknumber mit jeweils einer einfachen Division erhalten:

$div(%temptrck%,100) liefert die Ganzzahl (also bei 234 die "2") und

$mod(%temptrack%,100) liefert den Rest (also bei 234 "34").

Damit entfällt die Abfrage mit ifgrtr und so.
Wenn du nun noch die Trennzeichen in temptrack wegwirfst vielleicht mit Aktion
"Ersetzen mit Regulärem Ausdruck"
^(\d+).(\d*)
Ersetzen mit
$1$2

Dann wären das nur noch 3 Schritte.

Mein Vorschlag ... ist nicht kompakter ... ... weil Einzelschritte besser nachvollzogen werden können. 1. How to get Discnumber and Tracknumber from Filename? Tracknumber and Discnumber are coded in the leading group of digits. Tracknumber has max. 2 digits from 1 to 99. Discnumber has max. 2 digits from 1 to 99. If Discnumber is prepended, then Tracknumber must have two digits. Possible number formats: DDTT, DTT, TT, T. Testfiles: 1.23 Test.mp3 02. Test.mp3 3-34 Test.mp3 005 Test.mp3 043. Test.mp3 100. Test.mp3 205 Test.mp3 Test.mp3 2. Get filename, check for leading digit, remove trailing text. TMP_TRACK <== $if($isdigit($left(%_filename%,1)),$regexp(%_filename%,'^(.+?)[ ._-].*$','$1'),) 1.23 02. 3-34 005 043. 100. 205 3. Remove non digit characters. TMP_TRACK <== $replace(%TMP_TRACK%,'.',,'_',,'-',,' ',) 123 02 334 005 043 100 205 4. Justify right. TMP_TRACK <== $right('0000'%TMP_TRACK%,4) 0123 0002 0334 0005 0043 0100 0205 5. Get Discnumber DISCNUMBER <== $trimLeft($div(%TMP_TRACK%,100),'0') 6. Get Tracknumber TRACK <== $trimLeft($mod(%TMP_TRACK%,100),'0') 7. Remove temporary track field. TMP_TRACK <== $char(0) Result: 1 23
 <!--coloro:#000000--><span style="color:#000000"><!--/coloro-->2<!--colorc--></span><!--/colorc--> 
3 34
 <!--coloro:#000000--><span style="color:#000000"><!--/coloro-->5<!--colorc--></span><!--/colorc--> 
<!--coloro:#000000--><span style="color:#000000"><!--/coloro-->43<!--colorc--></span><!--/colorc--> 
1 2 5 Ready.

DD.20150305.2215.CET

Hi DetlevD,

super, ich hätte nie gedacht, dass du noch antwortest. Bisher hatte ich tatsächlich immer noch Probleme mit meiner Lösung.

Vielen Lieben Dank. Du bist immer eine große Hilfe. Auch schon damals beim Remix in eckige Klammern setzen.