簡單的翻看了一下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 main
import (
"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寫一個簡單的小例子試試。