¿Cuál es la forma idiomática de hacer una línea de lectura en Cadena en Go? las funciones en bruto proporcionadas en la biblioteca estándar parecen realmente de bajo nivel, devuelven matrices de bytes. ¿Hay alguna forma más fácil de obtener una cadena de una función de lectura?ir readline -> string
Respuesta
Estos son algunos ejemplos que usan bufio.ReadLine y bufio.ReadString.
package main
import (
"bufio"
"fmt"
"os"
)
func ReadLine(filename string) {
f, err := os.Open(filename)
if err != nil {
fmt.Println(err)
return
}
defer f.Close()
r := bufio.NewReaderSize(f, 4*1024)
line, isPrefix, err := r.ReadLine()
for err == nil && !isPrefix {
s := string(line)
fmt.Println(s)
line, isPrefix, err = r.ReadLine()
}
if isPrefix {
fmt.Println("buffer size to small")
return
}
if err != io.EOF {
fmt.Println(err)
return
}
}
func ReadString(filename string) {
f, err := os.Open(filename)
if err != nil {
fmt.Println(err)
return
}
defer f.Close()
r := bufio.NewReader(f)
line, err := r.ReadString('\n')
for err == nil {
fmt.Print(line)
line, err = r.ReadString('\n')
}
if err != io.EOF {
fmt.Println(err)
return
}
}
func main() {
filename := `testfile`
ReadLine(filename)
ReadString(filename)
}
Gracias, estaba esperando un más construido en forma de hacer esto. Me sorprende que esta funcionalidad no esté incorporada. – jz87
Si está viendo esto hoy, querrá usar io.EOF en lugar de os.EOF. – oleks
... y 'errors.New (...)' en lugar de 'os.NewError (...)' y 'NewReaderSize()' solo devuelve un argumento. – topskip
Escribí una forma de leer fácilmente cada línea de un archivo. La función Readln (* bufio.Reader) devuelve una línea (sans \ n) de la estructura subyacente bufio.Reader.
// 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
}
Puede leer Readln para leer cada línea de un archivo. El siguiente código lee cada línea en un archivo y genera cada línea en stdout.
f, err := os.Open(fi)
if err != nil {
fmt.Println("error opening file= ",err)
os.Exit(1)
}
r := bufio.NewReader(f)
s, e := Readln(r)
for e == nil {
fmt.Println(s)
s,e = Readln(r)
}
¡Salud!
esto es genial, pero usar append es muy malo. si cambia esa línea para copiar (ln, línea), la función se ejecutará unas 20 veces más rápido. Esto era imprescindible para mí ya que estoy analizando archivos que son muchos GB. – mschuett
@mschuett ¿puedes compartir el código modificado con copia? –
- 1. Ir StartsWith (str string)
- 2. IDictionary <string, string> versus Dictionary <string, string>
- 3. JAXB para unmarshall <string> foobar</string>
- 4. JSON básica> pregunta struct (usando 'ir')
- 5. StringDictionary vs Dictionary <string, string>
- 6. Map <String, String> JSON en
- 7. casting ArrayList <String> a String []
- 8. JPA Map <String, String> mapping
- 9. Haga nuestra propia lista <string, string, string>
- 10. Uso FlurryAgent.onEvent (String EVENTID, mapa <String, String> Parámetros)
- 11. Cómo convertir Map <String, String> a Map <Long, String> usando guava
- 12. ¿Por qué no puedo crear un diccionario <string, dictionary <string, string >>?
- 13. Cómo convertir Dictionary <string, object> a Dictionary <string, string> en C#
- 14. LINQ - Lista de giros en <string> Dictionary <string, string>
- 15. C# Convert List <string> a Dictionary <string, string>
- 16. No se puede convertir un HashMap <String, String> en una interfaz que extiende Map <String, String>
- 17. sockets: BufferedReader readLine (bloques)
- 18. Hibernate, Lista <String>
- 19. ¿<String> hace algo?
- 20. Comparar Lista <String[]>
- 21. ¿Cómo puedo convertir String [] para arrayList <String>
- 22. ¿Están C++ std :: map <string, string> ordenados?
- 23. Generar mapa <String, String> de POJO
- 24. Una función de tipo Haskell: IO String-> String
- 25. Cómo convertir clases en Dictionary <string, string>?
- 26. ordenar una lista de Mapa <String, String>
- 27. C función readline
- 28. usando readline() para completar
- 29. DataInputStream obsoleto readLine() método
- 30. Java BufferedReader readline blocking?
posible duplicado de [lectura de archivo línea por línea en ir] (http://stackoverflow.com/questions/8757389/reading-file-line-by-line-in-go) – Malcolm