La capacité de lire (et d'écrire) un fichier texte dans et hors d'un tableau de chaînes est, à mon avis, une exigence assez courante. Il est également très utile lorsque vous démarrez avec une langue en supprimant la nécessité d'accéder initialement à une base de données. En existe-t-il un à Golang?
par exemple
func ReadLines(sFileName string, iMinLines int) ([]string, bool) {
et
func WriteLines(saBuff[]string, sFilename string) (bool) {
Je préférerais utiliser un existant plutôt que le dupliquer.
Réponses:
Depuis la version Go1.1, il existe une API bufio.Scanner qui peut facilement lire les lignes d'un fichier. Prenons l'exemple suivant ci-dessus, réécrit avec Scanner:
la source
Si le fichier n'est pas trop volumineux, cela peut être fait avec les fonctions
ioutil.ReadFile
etstrings.Split
comme ceci:Vous pouvez lire la documentation sur les packages ioutil et strings .
la source
"io/ioutil"
\r
. Vous pouvez donc ajouter un\r
élément à chaque élément.Impossible de mettre à jour la première réponse.
Quoi qu'il en soit, après la sortie de Go1, il y a eu des changements majeurs, j'ai donc mis à jour comme indiqué ci-dessous:
la source
Vous pouvez utiliser os.File (qui implémente l' interface io.Reader ) avec le package bufio pour cela. Cependant, ces packages sont construits avec une utilisation fixe de la mémoire à l'esprit (quelle que soit la taille du fichier) et sont assez rapides.
Malheureusement, cela rend la lecture du fichier entier dans la mémoire un peu plus compliquée. Vous pouvez utiliser un bytes.Buffer pour joindre les parties de la ligne si elles dépassent la limite de ligne. Quoi qu'il en soit, je vous recommande d'essayer d'utiliser le lecteur de ligne directement dans votre projet (surtout si vous ne savez pas quelle est la taille du fichier texte!). Mais si le fichier est petit, l'exemple suivant peut vous suffire:
Une autre alternative pourrait être d'utiliser io.ioutil.ReadAll pour lire le fichier complet à la fois et faire le découpage par ligne par la suite. Je ne vous donne pas d'exemple explicite sur la façon de réécrire les lignes dans le fichier, mais c'est essentiellement un
os.Create()
suivi d'une boucle similaire à celle de l'exemple (voirmain()
).la source
gob.Encode()
pour cela. Le résultat est un fichier binaire au lieu d'un fichier texte séparé par une nouvelle ligne. Ce fichier peut contenir tout type de données, peut être analysé efficacement, le fichier résultant sera plus petit et vous n'aurez pas à gérer ces nouvelles lignes et l'allocation dynamique. C'est donc probablement mieux adapté pour vous si vous souhaitez simplement conserver quelque chose pour une utilisation ultérieure avec Go.ou
la source