tekst verwijderen tot en met laatste slash

Status
Niet open voor verdere reacties.

keeske

Gebruiker
Lid geworden
28 jan 2010
Berichten
6
Beste mensen, ik heb het volgende probleem:

Ik heb voor mijn muziekcollectie een groot aantal afspeellijsten gemaakt met Winamp, zodat nummers in een bepaalde volgorde worden afgespeeld. Winamp slaat deze afspeellijsten als tekstbestanden (extensie .M3U)op, waarin hij op iedere regel naar een mp3-bestand verwijst, inclusief de padverwijzing. Als ik nu in een mp3-speler, die dergelijke afspeellijsten niet ondersteunt, toch de bestanden in dezelfde volgorde wil laten afspelen, kan ik dat alleen maar doen door de nummers te hernoemen, voorafgegaan door een volgnummer, zodat de bestandsnaam automatisch de volgorde van afspelen aangeeft. Ik gebruik hiervoor het door Winamp aangemaakte tekstbestand als basis voor een batchfile waarmee ik de files kan hernoemen. Echter daarvoor wil ik wel de padverwijzingen eerst uit het tekstbestand halen, want ik kopieer vooraf de bestanden en zet ze in een andere directory. Het verwijderen van die padverwijzingen lukt me tot nu toe niet in m’n code.

Het gaat er dus om dat op iedere tekstregel alle tekst aan het begin tot en met de laatste “\” verwijderd wordt.
Regels kunnen er dus uitzien als bijvoorbeeld:

D:\Temp\KanWeg\mp3#19\Duke-_So_In_Love_With_You_2000_Accapella.mp3

(of zie bijgesloten "afspeellijst.txt".

De "hernoemcode" die ik reeds geschreven heb is:

Code:
Sub HernoemMp3Bestand()
 
    Dim Mp3bestand     As String  ' Variabele die de huidige naam van het mp3-bestand gaat bevatten:
    Dim VoorloopNul    As String  ' Variabele die voorloopnullen aan de nieuwe naam van het mp3-bestand gaat toevoegen:
    Dim Teller         As Integer ' Teller die steeds met 1 wordt opgehoogd om de bestanden oplopend te nummeren in dezelfde volgorde als waarin ze in het tekstbestand staan:
    
    freeFileNumber = FreeFile ' Zorg dat een filepositie gereserveerd wordt voor het aan te maken batchbestand
    Teller = 1 ' Zet de Teller alvast op 1
    
    Open "hernoemen.bat" For Output As freeFileNumber ' Maak bestand "hernoemen.bat" aan om straks in batch alle mp3-bestanden in één keer te renamen:
    Range("A1").Select ' Ga naar de eerste cel (A1) in het werkblad
    
 Do
 
    If Teller < 10 Then      ' bestandsnamen tot en met "9-..." twee voorloopnullen geven:
        VoorloopNul = "00"
    ElseIf Teller < 100 Then ' bestandsnamen tot en met "99-..." één voorloopnul geven:
        VoorloopNul = "0"
    Else                     ' bestandsnamen vanaf "100-..." hebben geen voorloopnul meer nodig:
        VoorloopNul = ""
    End If
    
    Mp3bestand = ActiveCell.Value ' Haal de huidige naam van het mp3-bestand op uit de active cel
    
    Print #freeFileNumber, "ren """ & Mp3bestand & """ " & """" & VoorloopNul & Teller & "-" & Mp3bestand & """" ' Zet de rename-opdracht voor het mp3-bestand in het batchfile
    
    Teller = Teller + 1 ' Hoog de teller met 1 op
    
    ActiveCell.Offset(1, 0).Select ' Ga naar de volgende cel onder de actieve cel
    
 Loop Until IsEmpty(ActiveCell) ' Stop met vullen van het batchbestand als er een lege regel aangetroffen wordt
    
    Close freeFileNumber ' Sluit het batchbestand
    
    Shell ("cmd.exe /k hernoemen.bat") ' Start het batchbestand
    
End Sub

Of zie bijgesloten "HernoemMp3Bestand.txt".

Alvast dank voor jullie beantwoording,

Kees
 

Bijlagen

Zo kan het ook:
Code:
Sub HernoemMp3Bestand()
' in Excel
   sq=sheets(1).columns(1).specialcells(2)

'  of uit het tekstbestand
  Open "afspeellijst.txt" fot Input As #1
    sq=filter(split(input(LOF(1),#1),vbcrlf),"\")
  close #1

  for j =1 to ubound(sq)
    sq(j)=format(j,"000") & dir(sq(j))
  next

  Open "hernoemd.txt" For Output As #1
    Print join(sq,vbCrLf)
  Close #1    
End Sub
 
Laatst bewerkt:
Dank snb voor je reactie. Bij het uitvoeren van je code krijg ik echter de foutmelding: "Compileerfout: De methode is ongeldig zonder geschikt object"


Vriendelijke groet,

Kees
 
Draai deze code in Excel (zoals ook in jouw code)
Zorg dat de bestandsnamen in kolom A van het werkblad staan.
Op welke regel - F8 - krijg je de foutmelding ?

vorige code uitgebreid.
 
Laatst bewerkt:
Beste SNB,

Dank voor je hernieuwde poging. Ik krijg een foutmelding op de regel "Print Join(sq, vbCrLf)". Wederom hetzelfde: "Compileerfout: De methode is ongeldig zonder geschikt object".


Ik hoop dat we hier uitkomen.

Vriendelijke groet,

Kees
 
Er ontbrak nog wat:

Code:
Sub HernoemMp3Bestand()
' in Excel
   sq=sheets(1).columns(1).specialcells(2)

'  of uit het tekstbestand
  Open "afspeellijst.txt" fot Input As #1
    sq=filter(split(input(LOF(1),#1),vbcrlf),"\")
  close #1

  for j =1 to ubound(sq)
    sq(j)=format(j,"000") & dir(sq(j))
  next

  Open "hernoemd.txt" For Output As #1
    Print [COLOR="Red"]#1[/COLOR], join(sq,vbCrLf)
  Close #1    
End Sub
 
Wederom dank SNB, echter bij deze ge-update code krijg ik de melding:

"Fout 9 tijdens uitvoering: Het subscript valt buiten het bereik"

op regel:

"sq(j) = Format(j, "000") & Dir(sq(j))"

Ter info: ik sta in cel A1 als ik de macro start, in de eerste regel van de in Excel ingeladen afspeellijst dus.


Bij voorbaat dank voor je reactie SNB, en vriendelijke groet,

Kees
 
Laatst bewerkt:
Gebruik geen code die je niet begrijpt:

Code:
Sub HernoemMp3Bestand()
   sq=sheets(1).columns(1).specialcells(2)

  for j =1 to ubound(sq)
    sq(j)=format(j,"000") & Right(sq(j), InStrRev(sq(j), "\") - 2)
  next

  Open "hernoemd.txt" For Output As #1
    Print #1, join(sq,vbCrLf)
  Close #1    
End Sub
 
Ik kom hier inderdaad niet uit nee, maar ik ben dan ook geen senior...

Heb het inmiddels kunnen oplossen met de volgende code:

Code:
Sub HernoemMp3Bestand()
 
    Dim Celwaarde      As String  ' Variabele die de celwaarde bevat (inclusief padverwijzing:
    Dim Laatsteslash   As Integer ' Variabele die de laatste positie van de slash in de celwaarde bevat
    Dim Mp3bestand     As String  ' Variabele die de huidige naam van het mp3-bestand gaat bevatten (dus met padverwijzing gestript):
    Dim VoorloopNul    As String  ' Variabele die voorloopnullen aan de nieuwe naam van het mp3-bestand gaat toevoegen:
    Dim Teller         As Integer ' Teller die steeds met 1 wordt opgehoogd om de bestanden oplopend te nummeren in dezelfde volgorde als waarin ze in het tekstbestand staan:
    
    freeFileNumber = FreeFile ' Zorg dat een filepositie gereserveerd wordt voor het aan te maken batchbestand
    Teller = 1 ' Zet de Teller alvast op 1
    
    Open "hernoemen.bat" For Output As freeFileNumber ' Maak bestand "hernoemen.bat" aan om straks in batch alle mp3-bestanden in één keer te renamen:
    Range("A1").Select ' Ga naar de eerste cel (A1) in het werkblad
    
 Do
 
    If Teller < 10 Then      ' bestandsnamen tot en met "9-..." twee voorloopnullen geven:
        VoorloopNul = "00"
    ElseIf Teller < 100 Then ' bestandsnamen tot en met "99-..." één voorloopnul geven:
        VoorloopNul = "0"
    Else                     ' bestandsnamen vanaf "100-..." hebben geen voorloopnul meer nodig:
        VoorloopNul = ""
    End If
    
    Celwaarde = ActiveCell.Value  ' Haal de huidige celwaarde op uit de active cel
    Laatsteslash = InStrRev(Celwaarde, "\")  'zoek naar positie van laatste "\" in de celwaarde
    Mp3bestand = Right(Celwaarde, Len(Celwaarde) - Laatsteslash) ' Strip de padverwijzing uit de celwaarde
    
    Print #freeFileNumber, "ren """ & Mp3bestand & """ " & """" & VoorloopNul & Teller & "-" & Mp3bestand & """" ' Zet de rename-opdracht voor het mp3-bestand in het batchfile
    
    Teller = Teller + 1 ' Hoog de teller met 1 op
    
    ActiveCell.Offset(1, 0).Select ' Ga naar de volgende cel onder de actieve cel
    
 Loop Until IsEmpty(ActiveCell) ' Stop met vullen van het batchbestand als er een lege regel aangetroffen wordt
    
    Close freeFileNumber ' Sluit het batchbestand
    
    Shell ("cmd.exe /k hernoemen.bat") ' Start het batchbestand
    
End Sub
 
Overigens is het het mooist als uit de door Winamp gegenereerde afspeellijst ook de regels die hij zelf aanmaakt ter eigen gebruik verwijderd worden. Deze worden allemaal gekenmerkt door "#EXT". Ik heb daar ook een macrootje voor gemaakt, die het overigens wel doet, maar afsluit met de foutmelding: "Fout 91 tijdens uitvoering: Objectvariabele of lokvariabele With is niet ingesteld". Als iemand hier nog iets op weet...

Ik gebruik de volgende eenvoudige code:


Code:
Sub VerwijderenRegelsUitM3U()
'
' VerwijderenRegelsUitM3U
' Macro om de #EXT-regels uit een playlist te halen
' en vervolgens de files te kunnen renamen via een batchfile

'
Do

    Cells.Find(What:="#EXT").Activate
    
    Selection.Rows.Delete

Loop Until IsEmpty(ActiveCell)

End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan