Creo que la capacidad de leer (y escribir) un archivo de texto dentro y fuera de una matriz de cadenas es un requisito bastante común. También es bastante útil cuando se comienza con un idioma, eliminando la necesidad de acceder inicialmente a una base de datos. ¿Existe uno en Golang?
p.ej
func ReadLines(sFileName string, iMinLines int) ([]string, bool) {
y
func WriteLines(saBuff[]string, sFilename string) (bool) {
Preferiría usar uno existente en lugar de duplicarlo.
Respuestas:
A partir de la versión Go1.1, existe una API bufio.Scanner que puede leer fácilmente las líneas de un archivo. Considere el siguiente ejemplo de arriba, reescrito con Scanner:
fuente
Si el archivo no es demasiado grande, esto se puede hacer con las funciones
ioutil.ReadFile
ystrings.Split
así:Puede leer la documentación sobre paquetes ioutil y strings .
fuente
"io/ioutil"
\r
. Por lo tanto, es posible que tenga\r
anexado a cada elemento.No se puede actualizar la primera respuesta.
De todos modos, después del lanzamiento de Go1, hay algunos cambios importantes, por lo que actualicé como se muestra a continuación:
fuente
Puede usar os.File (que implementa la interfaz io.Reader ) con el paquete bufio para eso. Sin embargo, esos paquetes se crean teniendo en cuenta el uso de memoria fijo (sin importar qué tan grande sea el archivo) y son bastante rápidos.
Desafortunadamente, esto hace que leer todo el archivo en la memoria sea un poco más complicado. Puede usar bytes.Buffer para unir las partes de la línea si exceden el límite de la línea. De todos modos, te recomiendo que pruebes a usar el lector de líneas directamente en tu proyecto (¡especialmente si no sabes qué tan grande es el archivo de texto!). Pero si el archivo es pequeño, el siguiente ejemplo puede ser suficiente para ti:
Otra alternativa podría ser usar io.ioutil.ReadAll para leer el archivo completo de una vez y luego hacer el corte por línea. No le doy un ejemplo explícito de cómo volver a escribir las líneas en el archivo, pero es básicamente un
os.Create()
ciclo seguido de un bucle similar al del ejemplo (vermain()
).fuente
gob.Encode()
para eso. El resultado es un archivo binario en lugar de un archivo de texto separado por saltos de línea. Este archivo puede contener todo tipo de datos, se puede analizar de manera eficiente, el archivo resultante será más pequeño y no tendrá que lidiar con esas nuevas líneas y asignación dinámica. Por lo tanto, probablemente sea más adecuado para usted si solo desea conservar algo para su uso posterior con Go.o
fuente