golang 按行读文件 readline file_put_contents

* readline.go

package main

import (
	"fmt"
	"os"
	"bufio"
	"io"
	"io/ioutil"
	"encoding/json"
	"strings"
)

func fileForEachLine(path string, callback func(string)) {
	var f *os.File
	var err error
	var rd *bufio.Reader
	var line string
	
	f, err = os.Open(path)
	if err != nil {
		panic(err)
	}
	defer f.Close()

	rd = bufio.NewReader(f)
	for ;; {
		line, err = rd.ReadString('\n')
		if err != nil || io.EOF == err {
			break
		}
		callback(line)
	}
}

func file_get_contents(filePath string) ([]byte, error) {
	f, err := os.Open(filePath)
	if err != nil {
		return []byte{}, err
	}
	var ba []byte
	ba, err = ioutil.ReadAll(f)
	return ba, err
}

func file_put_contents(filePath string, content string) error {
	return ioutil.WriteFile(filePath, []byte(content), 0644)
}


type EClassUser struct {
	ID   OID `json:"_id"`
	Name string `json:"name"`
}

type OID struct {
	OId string `json:"$oid"`
}

func main() {
//	var outfile *os.File
	var err error
	var ecu EClassUser
	var userlist []string

	fileForEachLine("./students.json", func(line string) {
		line = strings.TrimRight(line, "\r\n ")
//		fmt.Println(line)
		
		err = json.Unmarshal([]byte(line), &ecu)
		if err != nil {
			fmt.Println(err.Error())
			return
		}
		userlist = append(userlist, ecu.Name)
	});

	// outfile, err = os.OpenFile("./out.txt", os.O_CREATE, 0777)
	// if err != nil {
	// 	fmt.Printf("Open output file failed: %s\n", err.Error())
	// 	return
	// }
	// defer outfile.Close()

	// for _, v := range userlist {
	// 	fmt.Println(v)
	// 	outfile.WriteString(v + "\n")
	// }
	file_put_contents("out.txt", strings.Join(userlist, "\r\n"))
}

* students.json

输入文件

{"_id":{"$oid":"58cb3e2f35a5bc02c6a29c9c"},"name":"jeyDZZZX601"}
{"_id":{"$oid":"58cb3e2f35a5bc02c6a29c9d"},"name":"jeyDZZZX602"}
{"_id":{"$oid":"58cb3e2f35a5bc02c6a29c9e"},"name":"jeyDZZZX603"}
{"_id":{"$oid":"58cb3e2f35a5bc02c6a29c9f"},"name":"jeyDZZZX604"}
{"_id":{"$oid":"58cb3e2f35a5bc02c6a29ca0"},"name":"jeyDZZZX605"}
{"_id":{"$oid":"58cb3e2f35a5bc02c6a29ca1"},"name":"jeyDZZZX606"}
{"_id":{"$oid":"58cb3e2f35a5bc02c6a29ca2"},"name":"jeyDZZZX607"}
{"_id":{"$oid":"58cb3e2f35a5bc02c6a29ca3"},"name":"jeyDZZZX608"}
{"_id":{"$oid":"58cb3e2f35a5bc02c6a29ca4"},"name":"jeyDZZZX609"}
{"_id":{"$oid":"58cb3e2f35a5bc02c6a29ca5"},"name":"jeyDZZZX610"}
{"_id":{"$oid":"58cb3e2f35a5bc02c6a29ca6"},"name":"jeyDZZZX611"}
{"_id":{"$oid":"58cb3e2f35a5bc02c6a29ca7"},"name":"jeyDZZZX612"}
{"_id":{"$oid":"58cb3e2f35a5bc02c6a29ca8"},"name":"jeyDZZZX613"}

*run:

go run readline.go

 

out.txt

jeyDZZZX601
jeyDZZZX602
jeyDZZZX603
jeyDZZZX604
jeyDZZZX605
jeyDZZZX606
jeyDZZZX607
jeyDZZZX608
jeyDZZZX609
jeyDZZZX610
jeyDZZZX611
jeyDZZZX612
jeyDZZZX613

go语言代码片段

https://ashitani.jp/golangtips/tips_slice.html

 

 

你可能感兴趣的:(golang)