回答

收藏

将文本文件读入字符串数组(并写入)

技术问答 技术问答 273 人阅读 | 0 人回复 | 2023-09-12

我认为在字符串数组中读取(和写入)文本文件的能力是一个相当普遍的要求。当它开始使用一种无需访问数据库的语言时,它也非常有用。Golang里有吗?2 b6 d: ^( ^* H1 Y3 j! J% c6 X5 D
例如
6 X. I9 t6 j( _
    func ReadLines(sFileName string,iMinLines int) ([]string,bool) {
    % t( j9 Q9 z% A% t$ z
+ U; Q* }/ t, L; u& r& Y
    func WriteLines(saBuff[]string,sFilename string) (bool) {
    8 |4 h/ P/ O' Z1 K+ j  ?
我宁愿用现有的而不是重复的。7 a! ?$ o( Q8 X2 G1 X
                                                                + J* c5 h5 f# ~  B
    解决方案:                                                               
' `: C: [- v) T% h8 m                                                                从 Go1.1 版本开始了,有一个bufio.Scanner API 可以很容易地从文件中读取。考虑以上示例,使用 Scanner 重写:: D2 U- ~; k; L8 U
[code]package mainimport  "bufio"    "fmt"    "log"    "os")// readLines reads a whole file into memory// and returns a slice of its lines.func readLines(path string) ([]string,error)    file,err := os.Open(path)    if err != nil        return nil,err   }    defer file.Close()    var lines []string    scanner := bufio.NewScanner(file)    for scanner.Scan()        lines = append(lines,scanner.Text()return lines,scanner.Err()}// writeLines writes the lines to the given file.func writeLines(lines []string,path string) error {    file,err := os.Create(path)    if err != nil {        return err   }    defer file.Close()    w := bufio.NewWriter(file)    for _,line := range lines {        fmt.Fprintln(w,line)   }    return w.Flush()}func main() {    lines,err := readLines("foo.in.txt")    if err != nil {        log.Fatalf("readLines: %s",err)   }    for i,line := range lines              fmt.Println(i,line)   }    if err := writeLines(lines,"foo.out.txt"); err != nil              log.Fatalf("writeLines: %s",err)  code]
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则