568 Stimmen

Lesen einer Datei Zeile für Zeile in Go

Ich kann nicht finden file.ReadLine Funktion in Go.

Wie kann man eine Datei Zeile für Zeile lesen?

9 Stimmen

Ab Go1.1 ist bufio.Scanner die beste Möglichkeit, dies zu tun.

2voto

0DAYanc Punkte 337
import (
     "bufio"
     "os"
)

var (
    reader = bufio.NewReader(os.Stdin)
)

func ReadFromStdin() string{
    result, _ := reader.ReadString('\n')
    witl := result[:len(result)-1]
    return witl
}

Hier ist ein Beispiel mit der Funktion ReadFromStdin() es ist wie fmt.Scan(&name) aber es nimmt alle Zeichenketten mit Leerzeichen wie: "Hallo mein Name ist ..."

var name string = ReadFromStdin()

println(name)

1voto

Die Scan*-Funktionen sind hier von großem Nutzen. Hier ist eine leicht modifizierte Version von Beispiel für einen Wortscanner aus den Go-Lang-Dokumenten, um Zeilen aus einer Datei zu scannen.

package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
)

func main() {
    // An artificial input source.
    const input = "Now is the winter of our discontent,\nMade glorious summer by this sun of York.\n"
    scanner := bufio.NewScanner(strings.NewReader(input))
    // Set the split function for the scanning operation.
    scanner.Split(bufio.ScanLines)
    // Count the lines.
    count := 0
    for scanner.Scan() {
        fmt.Println(scanner.Text())
        count++
    }
    if err := scanner.Err(); err != nil {
        fmt.Fprintln(os.Stderr, "reading input:", err)
    }
    fmt.Printf("%d\n", count)
}

-2voto

Arun Punkte 157

In der neuen Version von Go 1.16 können wir das Paket embed verwenden, um den Inhalt der Datei wie unten gezeigt zu lesen.

package main

import _"embed"

func main() {
    //go:embed "hello.txt"
    var s string
    print(s)

    //go:embed "hello.txt"
    var b []byte
    print(string(b))

    //go:embed hello.txt
    var f embed.FS
    data, _ := f.ReadFile("hello.txt")
    print(string(data))
}

Weitere Einzelheiten finden Sie unter https://tip.golang.org/pkg/embed/ Und https://golangtutorial.dev/tips/embed-files-in-go/

9 Stimmen

Dieses Beispiel ist eine gute Demonstration der embed Paket, aber ich glaube nicht, dass Ihre Antwort auf die Kernstück der Frage. OP möchte eine Datei einlesen Zeile für Zeile . Trotzdem haben Sie ihm eine sehr gute und idiomatische Möglichkeit geboten, eine ganze Datei einzulesen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X