回答

收藏

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

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

我认为在字符串数组中读取(和写入)文本文件的能力是一个相当普遍的要求。当它开始使用一种无需访问数据库的语言时,它也非常有用。Golang里有吗?
! i2 Y+ M+ O9 J例如
) r8 H5 j. D9 H
    func ReadLines(sFileName string,iMinLines int) ([]string,bool) {
    8 ]3 r7 n7 Z* A8 t( H8 D6 [

, g0 K* ]3 j! i
    func WriteLines(saBuff[]string,sFilename string) (bool) { + B  h( x" N# ~. `
我宁愿用现有的而不是重复的。  Q3 {0 {2 c0 B$ c0 n# P
                                                                - O" ^. }+ B; B- ^
    解决方案:                                                               
' |, e7 z% J6 [/ j8 E                                                                从 Go1.1 版本开始了,有一个bufio.Scanner API 可以很容易地从文件中读取。考虑以上示例,使用 Scanner 重写:* K: E  t# m: T- ^  `
[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]
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则