444 votes

Lire fichier ligne par ligne en fois

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 ?

798voto

St3fan Points 16196

1.1 allez la manière la plus simple de le faire est avec un `` , qui fait partie de la `` paquet. Voici un exemple simple qui lit des lignes d’un fichier :

C’est le moyen le plus propre pour lire d’un `` ligne par ligne.

170voto

Atom Points 8739

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.

60voto

Malcolm Points 450

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!

12voto

lzap Points 5049

Vous pouvez également utiliser ReadString avec \n comme séparateur :

6voto

kroisse Points 86

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X