Avatar billede chduelund Nybegynder
24. oktober 2011 - 16:38 Der er 8 kommentarer og
1 løsning

Problem med lower-case action i Mp3tag

Hej,

Har et problem med en action som jeg leger med i Mp3tag.
Jeg vil gerne have en action der laver alle ord på 2 bogstaver og under, om til lowercase - med undtagelse af de første ord.
Et eksempel kunne være:

In Flames - Walk With Me In Hell

Efter at have kørt den pågældende action skulle tag'et gerne ende ud med at se sådan ud:

In Flames - Walk With me in Hell

-Altså bliver ordene "me" og "in" til lowercase, men ikke "In Flames", da det er første ord.


Jeg har ved hjælp af følgende script næsten fået det til at fungere, men der er en fejl:

\s(a|an|or|in|on|of|to|at|we|my)

-Fejlen viser sig ved at ord der starter med de ovenstående ord, også bliver ændret.
Fx. ændres "Together" til "together".

Er der nogen der har en løsning til hvordan jeg løser problemet, så er jeg meget taknemmelig.
Avatar billede johny Nybegynder
25. oktober 2011 - 08:00 #1
Hvis du vil lave det på den måde du gør pt. bliver du nød til at liste ALLE 1-2 ords ord på ALLE de sprog du har tænkt dig at understøtte, og ja, det kan blive en hel del. :)

Nu kender jeg ikke lige Mp3tag, så jeg ved ikke hvor meget af RegEx der er understøttet, men jeg går ud fra at følgende vil kunne bruges:

\s(\w{1,2})(?:\s|$)

Forklaring:
\s: En hvilken som helst whitespace karakter.
(\w{1,2}): En hvilken som helst kombination af tal og bogstaver på 1 eller 2 karakterer.
(?:\s|$): Entent en whitespace karakter eller slutning på titlen.

Der er dog en ting mere du bør overveje, og det er tegn. Hvad hvis du f.eks. har to ord adskilt af et '\' tegn? Der vil ovenstående ikke matche hverken ordet før eller efter. Eller hvis du har en sang der ender på punktum?

Men jeg håber det fik dig tættere på det du skulle bruge. :)
Avatar billede chduelund Nybegynder
25. oktober 2011 - 10:55 #2
Har lige forsøgt mig med det script du foreslog og det virkede egentlig rigtig godt. Dog oplevede jeg at nogle ord ikke blev ændret, på trods af at de hverken havde punktum eller andre tegn foran, eller efter sig.

Fx. blev sangen "Deep In My Heart" lavet om til "Deep in My Heart" og det samme i lignende sange. -Noget tyder på at den ikke vil ændre to ord efter hinanden.
Avatar billede johny Nybegynder
25. oktober 2011 - 11:39 #3
Erstatter du alle matches? Har du prøve med andre sange hvor det lykkes dig at erstatte mere end ét ord?
Avatar billede chduelund Nybegynder
25. oktober 2011 - 11:46 #4
Jeg erstatter alle mathes, ja. Jeg har set sange hvor det er lykkedes, men det har udelukkende været sange hvor matches var delt af ord på mere end 1-2 bogstaver.

Fx. "Hold it Against me".
Avatar billede johny Nybegynder
25. oktober 2011 - 13:40 #5
Ah ja, der skal selvfølgelig en rettelse til for at kunne klare dem efter hinanden, da de ellers skal overlappe for at give det rigtige resultat:
((?:\s\w{1,2})*\s\w{1,2})(?:\s|$)

Jeg formoder du bare laver en "ToLower" på match, right?
Avatar billede chduelund Nybegynder
25. oktober 2011 - 14:38 #6
Super, vil forsøge mig med rettelsen og rammer den plet, er du dagens mand i skysovs!

Jo, bruger kommandoen:
$lower($0)
Avatar billede chduelund Nybegynder
25. oktober 2011 - 14:41 #7
... og det virker! :)

Er det evt. muligt at få den til at gøre det ved ord med tegn før og efter, eller bliver det for teknisk?
Tænker på ord der står i parantes og lignende, nok det du nævner i din første kommentar. :)
Avatar billede johny Nybegynder
26. oktober 2011 - 10:00 #8
Jeps, det er ikke det store problem.

Du skal bare sætte alle "\s" i en firkantet parantes og tilføje alle de andre tegn du også gerne vil understøtte, som f.eks. sådan her:
[\s,()]
Avatar billede chduelund Nybegynder
26. oktober 2011 - 11:57 #9
Super, tusind tak for din hjælp!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester