Avatar billede yonzie Nybegynder
16. januar 2005 - 23:18 Der er 6 kommentarer og
1 løsning

Klippe data ud af streng

Jeg skal have klippet dele af følgende tekststreng (og en masse der ligner) ud:
"Track 23 - A-13 'Rizumu nomi'.mp3"
Jeg skal bruge track nummeret (23) og track navnet (A-13 'Rizumu nomi').
Track nummer kan være alt fra 01 til 99
Track navnet kan bestå af følgende tegn: a-z, A-Z, 0-9 og *",.:;'-_/!?()[]&~^
Hvis det kan lade sig gøre ville det være fedt hvis _ samtidig kunne laves om til mellemrum.
Scriptet er i perl.
Avatar billede yellow Nybegynder
17. januar 2005 - 09:02 #1
$tracks = qq{
  Track 23 - A-13 'Rizumu nomi'.mp3
  Track 26 - A-14 'Rizumu nomi'.mp3
  Track 27 - A-15 'Rizumu nomi'.mp3
  Track 28 - A-16 'Rizumu nomi'.mp3
  Track 29 - A-17 'Rizumu nomi'.mp3
  Track 20 - A-18 'Rizumu nomi'.mp3
  Track 12 - A-19 'Rizumu nomi'.mp3
};

%hash = $tracks =~ /Track (\d+) - ([^\s]+)/g;
print map { "$_ -> $hash{$_}\n" } keys %hash;

Hvad er det for en underscore _ du vil have lavet om?
Avatar billede yonzie Nybegynder
17. januar 2005 - 12:57 #2
Den tager kun track nummer og "A-??" og gemmer i %hash, den tager ikke det mellem plingerne ('). Det er vigtigt at det også kommer med og er i en variabel.

En gang til:
Jeg har nogle (lovlige) musik numre med underlige tegn i:
Track 12 - II Air [Orhestral Suite No. 3 in D Major, BWV.106].mp3
Track 23 - A-13 'Rizumu nomi'.mp3
Track 32 - B-4 Guitarr Piano (Sabishiku).mp3
07-silent_wonderland_~rem_sleep_.mp3

Ud af dem skal jeg have track nummeret og track titlen i en variabel.
Basically: Søg gennem teksten til der findes et tal. output det i en variabel. Hop til efter dash (-), hvis der er mellemrum efter dash, spring det over, klip alt indtil
".mp3" og output i en variabel.
s/variabel/array/g

Bonuspoint (20) gives for at konvertere underscores som i filnavn 4 til mellemrum.
Avatar billede yellow Nybegynder
17. januar 2005 - 13:36 #3
Hov, havde læst det som du kun ville have A-?? med:
Den her gør det godt nok af 2 omgange - kan muligvis få grejet _ replace med ind i den første...

$tracks = qq{
Track 12 - II Air [Orhestral Suite No. 3 in D Major, BWV.106].mp3
Track 23 - A-13 'Rizumu_nomi'.mp3
Track 32 - B-4 Guitarr_Piano (Sabishiku).mp3
Track 07 - silent_wonderland_~rem_sleep_.mp3
};

%hash = $tracks =~ /Track (\d+) - ([^\n]+)\n/g;#<-- smid track# og navn ind i hash
#map { s/_/ /g } values %hash;#<--erstat _ med space i values;
print map { "$_ -> $hash{$_}\n" } keys %hash;#<--udskriv alle værdier
Avatar billede yellow Nybegynder
17. januar 2005 - 13:37 #4
eh, hov... anden nederste linie skal selvfølgelig ikke være udkommenteret. fjern # i starten.
Avatar billede yonzie Nybegynder
17. januar 2005 - 14:01 #5
Top Dollar!
Virker lækkert. Ingen grund til at gøre den mere effektiv, hastighed er ikke vigtig, og så kan jeg bedre fatte hvad der sker ;-)
Smid et svar.
Avatar billede yellow Nybegynder
17. januar 2005 - 14:04 #6
svar.

Og kom forresten til at tænke på: Er dine tracknumre unikke?
Lige nu smider den jo værdierne ind i en hash med tracknummer som key. Dvs hvis du har flere numre med samme tracknummer går der ged i den.

Alternativt kan du smide resultaterne i et array eller noget i stedet for.
Avatar billede yonzie Nybegynder
17. januar 2005 - 14:28 #7
Ja, det er de, så ingen problemer der.
Tak for hjælpen ^_^
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