Ich kann nicht finden file.ReadLine
Funktion in Go.
Wie kann man eine Datei Zeile für Zeile lesen?
Ich kann nicht finden file.ReadLine
Funktion in Go.
Wie kann man eine Datei Zeile für Zeile lesen?
Sie können ReadString auch mit \n als Trennzeichen:
f, err := os.Open(filename)
if err != nil {
fmt.Println("error opening file ", err)
os.Exit(1)
}
defer f.Close()
r := bufio.NewReader(f)
for {
path, err := r.ReadString(10) // 0x0A separator = newline
if err == io.EOF {
// do something here
break
} else if err != nil {
return err // if you return error
}
}
Eine andere Methode ist die Verwendung der io/ioutil
y strings
Bibliotheken, um die gesamten Bytes der Datei zu lesen, sie in eine Zeichenkette umzuwandeln und sie mit einem " \n
" (Zeilenumbruch) als Begrenzungszeichen, zum Beispiel:
import (
"io/ioutil"
"strings"
)
func main() {
bytesRead, _ := ioutil.ReadFile("something.txt")
file_content := string(bytesRead)
lines := strings.Split(file_content, "\n")
}
Technisch gesehen lesen Sie die Datei nicht Zeile für Zeile, aber Sie können mit dieser Technik jede Zeile analysieren. Diese Methode ist für kleinere Dateien geeignet. Wenn Sie versuchen, eine große Datei zu analysieren, verwenden Sie eine der Techniken, die Zeile für Zeile lesen.
bufio.Reader.ReadLine() funktioniert gut. Wenn Sie aber jede Zeile als Zeichenkette lesen wollen, versuchen Sie es mit ReadString(' \n ') . Sie muss das Rad nicht neu erfinden.
// strip '\n' or read until EOF, return error if read error
func readline(reader io.Reader) (line []byte, err error) {
line = make([]byte, 0, 100)
for {
b := make([]byte, 1)
n, er := reader.Read(b)
if n > 0 {
c := b[0]
if c == '\n' { // end of line
break
}
line = append(line, c)
}
if er != nil {
err = er
return
}
}
return
}
Im unten stehenden Code lese ich die Interessen aus der CLI, bis der Benutzer die Eingabetaste drückt, und ich verwende Readline:
interests := make([]string, 1)
r := bufio.NewReader(os.Stdin)
for true {
fmt.Print("Give me an interest:")
t, _, _ := r.ReadLine()
interests = append(interests, string(t))
if len(t) == 0 {
break;
}
}
fmt.Println(interests)
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.
9 Stimmen
Ab Go1.1 ist bufio.Scanner die beste Möglichkeit, dies zu tun.