【Go学习】 逐行读写文件

来源:互联网 发布:企业彩铃录音软件 编辑:程序博客网 时间:2024/04/26 15:30

简单的翻看了一下Go的io/ioutil居然没又逐行读取的接口,在网上找到一份代码,发现其还比较使用,打算撸个例子试试看,网上的逐行读取的接口如下:

func ReadLine(fileName string, handler func(string)) error {      f, err := os.Open(fileName)      if err != nil {          return err      }      buf := bufio.NewReader(f)      for {          line, err := buf.ReadString('\n')          line = strings.TrimSpace(line)          handler(line)          if err != nil {              if err == io.EOF {                  return nil              }              return err          }      }      return nil  }  

自己做了一个简单的读取文件,写文件的例子:

 package mainimport (    "bufio"    "fmt"    "io"    "os"    "strings")func ReadLine(w *bufio.Writer,fileName string, handler func(*bufio.Writer,string)) error {    f, err := os.Open(fileName)    if err != nil {        return err    }    buf := bufio.NewReader(f)    for {        line, err := buf.ReadString('\n')        line = strings.TrimSpace(line)        if len(line) != 0 {            handler(w,line)        }         if err != nil {            if err == io.EOF {                return nil            }            return err        }    }    return nil}func parseLineString(w *bufio.Writer,line string) {    splits := strings.SplitN(line," ",3)    //fmt.Println("len(splits) = ",len(splits))    if len(splits) != 3 {        fmt.Println("Error file Format!")        return    }    /*    for index,split := range splits {        fmt.Printf("index = %d split = %s \n",index,split)    }    fmt.Println("______________________________")    */    saveResultToFile(w,splits)}func saveResultToFile(w *bufio.Writer,splits []string) {    str := "<tr>" +     "<td><font color=\"" + splits[1] + "\">" + splits[0] + "</font></td>" +     "<td><font color=\"" + splits[1] + "\">" + splits[1] + "</font></td>" +     "<td bgcolor=" + splits[1]  + ">" + splits[2] + "</td>" +  "</tr>" + "\n";    //fmt.Println(str)     _,err := w.WriteString(str)    check(err)    w.Flush()}func check(e error){    if e != nil {        panic(e)    }}func main() {    f, err := os.Create("result.txt")    check(err)    defer f.Close()    w := bufio.NewWriter(f)    err = ReadLine(w,"test.txt", parseLineString)    check(err)}

test.txt文件如下:

AliceBlue #F0F8FF rgb(240, 248, 255)AntiqueWhite #FAEBD7 rgb(250, 235, 215)Aqua #00FFFF rgb(0, 255, 255)Aquamarine #7FFFD4 rgb(127, 255, 212)Azure #F0FFFF rgb(240, 255, 255)

运行后结果文件的内容如下:

<tr><td><font color="#F0F8FF">AliceBlue</font></td><td><font color="#F0F8FF">#F0F8FF</font></td><td bgcolor=#F0F8FF>rgb(240, 248, 255)</td></tr><tr><td><font color="#FAEBD7">AntiqueWhite</font></td><td><font color="#FAEBD7">#FAEBD7</font></td><td bgcolor=#FAEBD7>rgb(250, 235, 215)</td></tr><tr><td><font color="#00FFFF">Aqua</font></td><td><font color="#00FFFF">#00FFFF</font></td><td bgcolor=#00FFFF>rgb(0, 255, 255)</td></tr><tr><td><font color="#7FFFD4">Aquamarine</font></td><td><font color="#7FFFD4">#7FFFD4</font></td><td bgcolor=#7FFFD4>rgb(127, 255, 212)</td></tr><tr><td><font color="#F0FFFF">Azure</font></td><td><font color="#F0FFFF">#F0FFFF</font></td><td bgcolor=#F0FFFF>rgb(240, 255, 255)</td></tr>

其实这个是用来我上一篇文章转载别人博客—-CSDN-markdown编辑器语法——字体、字号与颜色,背景色的时候用到,因为copy过去的颜色名列表不能直接用,所以刚好用Go写一个简单的小例子试试。

原创粉丝点击