Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB.NET 0276: Erweiterbarer Playlistparser

 von 

Hinweis zum Tippvorschlag  

Dieser Vorschlag wurde noch nicht auf Sinn und Inhalt überprüft und die Zip-Datei wurde noch nicht auf schädlichen Inhalt hin untersucht.
Bitte haben Sie ein wenig Geduld, bis die Freigabe erfolgt.

Über den Tipp  

Dieser Tippvorschlag ist noch unbewertet.

Der Vorschlag ist in den folgenden Kategorien zu finden:

  • Algorithmen
  • Dateien und Laufwerke
  • Multimedia

Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
Playlist,Wiedergabeliste,Spielliste,Parser,Leser,erweiterbar,m3u,m3uext,#m3uext,MP3

Der Vorschlag wurde erstellt am: 05.06.2008 02:51.
Die letzte Aktualisierung erfolgte am 05.06.2008 02:51.

Zurück zur Übersicht

Beschreibung  

Dieser Code zeigt, wie man mit einfachen Mitteln eine Wiedergabeliste einlesen kann.

Schwierigkeitsgrad

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

Download:

Download des Beispielprojektes [9,60 KB]

' Dieser Source stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!
'
' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird.
' In den Zip-Dateien ist er jedoch zu finden.

' --------- Anfang Projektgruppe PlaylistTester.sln  ---------
' -------- Anfang Projektdatei PlaylistTester.vbproj  --------
' ------------------- Anfang Datei test.vb -------------------
Option Strict On

Imports System.IO
Imports System.Runtime.InteropServices
Imports PlaylistTester.PlayListFormats

Module test

    Sub Main(ByVal Args() As String)

        Dim p As PlaylistFormat
        Dim fn As String

        Console.WriteLine("PlaylistTester - Prints a Playlist on screen" & ControlChars.NewLine)

        Try

            fn = Args(0)

        Catch

            Console.WriteLine("Usage: PlaylistTester <playlist>")

            Exit Sub

        End Try

        Dim ext As String = (New FileInfo(fn)).Extension.ToLower

        If ext = ".m3u" Then
            p = New M3UFormat

        Else

            Console.WriteLine("Unknown format! Note: The format is recognized by file extension!")

            Exit Sub

        End If

        p.ParseFile(fn)

        Console.WriteLine(AdjustTabs("Format:", 3) & p.ToString)
        Console.WriteLine(AdjustTabs("Number of Items:", 3) & p.List.Count & ControlChars.NewLine)

        For Each n In p.List
            Console.WriteLine("New Item {")
            Console.WriteLine(ControlChars.Tab & AdjustTabs("File:") & n.FileName)

            Try

                For Each f In n.Fields

                    If f.Name = "Duration" Then

                        Console.WriteLine(ControlChars.Tab & AdjustTabs(f.Name & ":") & _
                            TimeSpan.FromSeconds(CDbl(f.Value)).ToString)

                    Else

                        Console.WriteLine(ControlChars.Tab & AdjustTabs(f.Name & ":") & _
                            CType(f.Value, String))

                    End If

                Next

            Catch

            End Try

            Console.WriteLine("}" & ControlChars.NewLine)
        Next

    End Sub

    Function AdjustTabs(ByVal Phrase As String, Optional ByVal Min As UShort = 2) As String

        Return Phrase & StrDup(Min - Phrase.Length \ 8, ControlChars.Tab)

    End Function

End Module

Namespace PlayListFormats

    Class PlaylistFormat

        Private mFormat As String
        Private mExtension As String

        <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> Public Structure _
            PlaylistItemField

            Dim Name As String
            Dim Value As Object

        End Structure

        <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> Public Structure PlaylistItem

            Dim FileName As String
            Dim Fields As List(Of PlaylistItemField)

        End Structure

        Public mList As List(Of PlaylistItem)

        ReadOnly Property Format() As String
            Get
                Return mFormat

            End Get

        End Property

        ReadOnly Property Extension() As String
            Get
                Return mExtension

            End Get

        End Property

        Property List() As List(Of PlaylistItem)
            Get
                Return mList

            End Get

            Set(ByVal value As List(Of PlaylistItem))
                mList = value

            End Set

        End Property

        Public Overridable Sub ParseFile(ByVal FileName As String)

            ' Overridable Declaration for the Function in a Reader
        End Sub

        Public Overridable Sub WriteFile(ByVal FileName As String)

            ' Overridable Declaration for the Function in a Reader
        End Sub

    End Class

    Class M3UFormat

        Inherits PlaylistFormat

        Private mFormat As String = "M3U"
        Private mExtension As String = ".m3u"
        Private mIsExtended As Boolean

        Public Overrides Sub ParseFile(ByVal FileName As String)

            MyBase.ParseFile(FileName)

            Dim d As String = "", nI As PlaylistItem, e() As String, nF As PlaylistItemField

            Dim p As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(FileName)

            Dim memLst As New List(Of PlaylistItem)

            ' Get first line looking for #EXTM3U
            d = p.ReadLine()

            If d.StartsWith("#EXTM3U") = False Then
                nI = New PlaylistItem
                nI.FileName = d
                memLst.Add(nI)

            Else

                mIsExtended = True
                mFormat = "M3UEXT"
            End If

            Do
                nI = New PlaylistItem
                nI.Fields = New List(Of PlaylistItemField)

                If mIsExtended Then
                    d = p.ReadLine

                    If d.StartsWith("#EXTINF:") Then
                        e = d.Split(":"c)
                        e = e(1).Split(","c)

                        nF = New PlaylistItemField
                        nF.Name = "Duration"
                        nF.Value = CDbl(Val(e(0)))
                        nI.Fields.Add(nF)

                        nF = New PlaylistItemField
                        nF.Name = "Title"
                        nF.Value = e(1)
                        nI.Fields.Add(nF)
                    End If
                End If

                nI.FileName = p.ReadLine()
                memLst.Add(nI)
            Loop Until p.EndOfStream

            mList = memLst

            ' memLst.Clear()
        End Sub

        Public Overrides Function ToString() As String

            Return mFormat

        End Function

    End Class
End Namespace

' -------------------- Ende Datei test.vb --------------------
' --------- Ende Projektdatei PlaylistTester.vbproj  ---------
' ---------- Ende Projektgruppe PlaylistTester.sln  ----------

	

Diskussion  

Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Folgende Diskussionen existieren bereits

Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.