Avatar billede supermichael Nybegynder
14. februar 2006 - 03:20 Der er 13 kommentarer og
1 løsning

Fjern ugyldige tegn fra filnavn

Hej

Jeg har skrevet et script til linux, som nedkoder mp3'ers kvalitet til 192 kbps(Sony Ericsson w800i understytter ikke 320 kbps).

Scriptet placere så outputfilen i mappen:

$sti = $artist/$album/$track_xx. $song.mp3

Filens navn findes ud fra id3-tagget. Derfor kan der tit være et tegn der ikke er tilladt i et filnavn.

Linux har ikke problemer med ?-tegnet i filnavne, men telefonen acceptere det ikke.

Jeg mangler en funktion til at fjerne "ulovlige" tegn fra fil-stien.

Kan nogen hjælpe ?
Avatar billede mfalck Praktikant
14. februar 2006 - 08:08 #1
det lyder som et job for et regulært udtryk:

jeg har ikke lige en perl-oversætter ved hånden så der bør tages alle mulige forbehold :-)

$sti =~ s/\?//g

skulle fjerne ? fra strengen
Avatar billede mfalck Praktikant
14. februar 2006 - 08:10 #2
hvis der er andre tegn kan de sættes ind ved "s/\?" men altså inden næste skråstreg (/).
Avatar billede erikjacobsen Ekspert
14. februar 2006 - 09:29 #3
Eller gøre det modsatte - skrive dem du vil have tilbage, fx:

$sti =~ s/[^a-zA-Z0-9 -]//g
Avatar billede supermichael Nybegynder
15. februar 2006 - 11:54 #4
Ok tak.. Dem der vil have point må lige poste et svar :-)
Avatar billede mfalck Praktikant
15. februar 2006 - 12:23 #5
ok - kom det til at virke ?
Avatar billede supermichael Nybegynder
15. februar 2006 - 12:39 #6
Det Lidte mig på rette vej

Her er det jeg har lavet

$modified_filename =~ s/(:|\?|\#|;|\*)//g;
$modified_filename =~ tr/(æ|ø|å|Æ|Ø|Å)/(ae|oe|aa|AE|OE|AA)/;
Avatar billede mfalck Praktikant
15. februar 2006 - 12:42 #7
bemærk at paranteser har en speciel betydning så hvis du mener tegnet '(' eller ')' så skal der en backslash foran.
Avatar billede supermichael Nybegynder
15. februar 2006 - 12:46 #8
Jeg ved det.. Er det ellers lavet ok.. Eller er det skrevet på en dum måde?
Jeg er lidt ny omkring perl.
Avatar billede mfalck Praktikant
15. februar 2006 - 12:52 #9
jeg er ikke helt sikker på om denne linje virker som forventet:
$modified_filename =~ tr/(æ|ø|å|Æ|Ø|Å)/(ae|oe|aa|AE|OE|AA)/;

har du prøvet den ?
Avatar billede supermichael Nybegynder
15. februar 2006 - 13:00 #10
Ja den ser ud til at virke. Jeg har testet den.

Linien "Dette er en tæst løgner, der skål: teste ;test#*?"
bliver til "Dette er en taest laegner, der skaal teste test"
efter de to funktioner (eller hvad de nu kaldes)
Avatar billede mfalck Praktikant
15. februar 2006 - 13:05 #11
ok .. så ser det jo fint ud.
Avatar billede supermichael Nybegynder
15. februar 2006 - 13:08 #12
Tak for hjælpen
Avatar billede supermichael Nybegynder
15. februar 2006 - 13:24 #13
Nevermind.. tr/(æ|ø|å|Æ|Ø|Å)/(ae|oe|aa|AE|OE|AA)/; virker IKKE som den skal.. Bemærk: løgner bliver til laegner!

Pyt.. Jeg fjerner dem bare
Avatar billede mfalck Praktikant
15. februar 2006 - 13:27 #14
ok - mit gæt ville også være at de skal i hver sin match ... det forklarer dog ikke hvorfor å bliver til aa.
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