Je ne parviens pas à trouver ' fichier. ReadLine' fonction dans go ! Je peux comprendre comment écrire rapidement un, mais je me demandais si j’oublie quelque chose ici. Comment on pour lire un fichier ligne par ligne ?
Réponses
Trop de publicités?Il y a de la fonction ReadLine dans le paquet bufio
.
Veuillez noter que si la ligne ne rentre pas dans la mémoire tampon de lecture, la fonction retournera un incomplètes ligne. Si vous voulez toujours de lire une ligne entière dans votre programme par un seul appel à une fonction, vous aurez besoin d'encapsuler l' ReadLine
fonction dans votre propre fonction qui demande ReadLine
dans une boucle for.
bufio.ReadString('\n')
n'est pas totalement équivalent à ReadLine
car ReadString
est incapable de gérer le cas lors de la dernière ligne d'un fichier ne se termine pas avec le caractère de saut de ligne.
EDIT: Comme d'go1.1, la idiomatiques solution est d'utiliser bufio.Scanner
J'ai écrit un moyen facile de lire chaque ligne d'un fichier. Le Readln(*bufio.Lecteur), la fonction retourne une ligne (sans \n) de la sous-jacentes bufio.Lecteur de struct.
// Readln returns a single line (without the ending \n)
// from the input buffered reader.
// An error is returned iff there is an error with the
// buffered reader.
func Readln(r *bufio.Reader) (string, error) {
var (isPrefix bool = true
err error = nil
line, ln []byte
)
for isPrefix && err == nil {
line, isPrefix, err = r.ReadLine()
ln = append(ln, line...)
}
return string(ln),err
}
Vous pouvez utiliser Readln de lire chaque ligne d'un fichier. Le code suivant lit chaque ligne d'un fichier et de sorties de chaque ligne sur la sortie standard stdout.
f, err := os.Open(fi)
if err != nil {
fmt.Printf("error opening file: %v\n",err)
os.Exit(1)
}
r := bufio.NewReader(f)
s, e := Readln(r)
for e == nil {
fmt.Println(s)
s,e = Readln(r)
}
Cheers!
bufio. Reader.ReadLine() fonctionne bien. Mais si vous voulez lire chaque ligne par une chaîne, essayez d’utiliser ReadString('\n'). Il n’a pas besoin de réinventer la roue.