m3u文件转pls文件(go语言实现)

rongyongfeikai2 · · 1939 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

m3u是一种文件格式,类似于下:

#EXTINF:,CCTV 1
mms://live.cctv.com/cctv_live1
#EXTINF:,CCTV 2
mms://live.cctv.com/live12

比如第一行是#EXTINF:,CCTV 1,那么用逗号隔开的第2个字符串就是文件名称;而第二行则是文件路径

对应的pls文件如下:

[playlist]
NumberOfEntries=116
File1=mms://live.cctv.com/cctv_live1
Title1=CCTV 1
File2=mms://live.cctv.com/live12
Title2=CCTV 2

它会指明总共有多少个个文件,文件名和文件路径(以key=val这种形式展示)

下面就是利用程序将m3u文件转为pls文件的代码:

package main

import (
    "fmt"
    "os"
    "strings"
)

type Node struct{
    File string
    Title string
}

func readFile(filepath string,MAXSIZE int) string{
    file,err := os.Open(filepath)
    if err != nil{
        fmt.Println(err)
        return ""
    }

    var buffer = make([] byte,MAXSIZE)
    cur,err := file.Read(buffer)
    if err != nil{
        fmt.Println(err)
        return ""
    }

    var content string = string(buffer[0:cur])
    file.Close()

    return content
}

func writeFile(filepath string,content string){
    file,err := os.Create(filepath)
    if err != nil{
        fmt.Println(err)
        return
    }
    
    _,err = file.WriteString(content)
    file.Close()

    if err != nil{
        fmt.Println(err)
    }
}

func transM3u2Pls(filepath string,MAXSIZE int){
    var dstpath string = "./result.pls"
    var content string = readFile(filepath,MAXSIZE)
    l := make([]Node,1000)
    var cur Node

    var index int = 0

    for _,line := range strings.Split(content,"\n"){
        if index % 2 == 0{
            lines := strings.Split(line,",")
            cur.Title = lines[1]
        }else{
            cur.File = line
            l[index/2] = cur
        }
        index++
    }

    var newcontent = "[playlist]\n"
    newcontent += fmt.Sprintf("NumberOfEntries=%d\n",(index/2))

    for i:=0;i<index/2;i++{
        newcontent += fmt.Sprintf("File%d=%s\n",i+1,l[i].File)
        newcontent += fmt.Sprintf("Title%d=%s\n",i+1,l[i].Title)
    }

    writeFile(dstpath,newcontent)
    fmt.Println("done!")
}

func main(){
    if len(os.Args) > 1{
        filepath := os.Args[1]
        const MAXSIZE int = 10240

        if strings.HasSuffix(filepath,"m3u"){
            transM3u2Pls(filepath,MAXSIZE)
        }else{
            fmt.Println("file format not suffort(Not .m3u).")
        }
    }else{
        fmt.Println("Usage:./test1 [filepath]")
    }
}




有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:rongyongfeikai2

查看原文:m3u文件转pls文件(go语言实现)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1939 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传