¿Es posible extraer una línea particular de un archivo sabiendo su número de línea? Por ejemplo, simplemente obtenga el contenido de la línea N
como una cadena del archivo "text.txt"?Cómo obtener una línea particular de un archivo
Respuesta
probar una de estas dos soluciones:
file = File.open "file.txt"
#1 solution would eat a lot of RAM
p [*file][n-1]
#2 solution would not
n.times{ file.gets }
p $_
file.close
Se podría conseguirlo por el índice de readlines
.
line = IO.readlines("file.txt")[42]
Utilice solo esto si se trata de un archivo pequeño.
Esta es la respuesta correcta –
Esta es solo la respuesta correcta si el archivo es pequeño, menos de un par de MB. De lo contrario, obligará a Ruby a cargar todo el archivo a la vez, lo que, en el caso de un archivo grande, es más lento que utilizar una solución basada en 'foreach' o' gets'.Ver http://stackoverflow.com/questions/25189262/why-is-slurping-a-file-bad que contiene puntos de referencia. –
¡Me sorprendí al saber que toma tanto como un par de MB! –
def get_line_from_file(path, line)
result = nil
File.open(path, "r") do |f|
while line > 0
line -= 1
result = f.gets
end
end
return result
end
get_line_from_file("/tmp/foo.txt", 20)
Ésta es una buena solución porque:
- Usted no usa
File.read
, por lo tanto usted no lee el archivo en la memoria. Si lo hace, podría convertirse en un problema si el archivo es de 20 MB de grande y lee con la suficiente frecuencia para que GC no se mantenga al día. - Solo lee desde el archivo hasta la línea que desea. Si su archivo tiene 1000 líneas, obtener la línea 20 solo leerá las 20 primeras líneas en Ruby.
Puede reemplazar gets
con readline
si desea elevar un error (EOFError
) en lugar de volver a cero cuando pasa un fuera de los límites de línea.
linenumber=5
open("file").each_with_index{|line,ind|
if ind+1==linenumber
save=line
# break or exit if needed.
end
}
o
linenumber=5
f=open("file")
while line=f.gets
if $. == linenumber # $. is line number
print "#{f.lineno} #{line}" # another way
# break # break or exit if needed
end
end
f.close
Si lo que desea es obtener la línea y no hace nada más, se puede utilizar este un trazador de líneas
ruby -ne '(print $_ and exit) if $.==5' file
Agradable. Es entonces cuando las $ variables globales se vuelven útiles. – Nakilon
Esto sigue leyendo el archivo cuando la línea ya está encontrada. – steenslag
No importa. Si el número de línea es la última 2da línea, por ejemplo, tiene que leer hasta esa línea también ... – ghostdog74
archivo tiene un buen método lineno
.
def get_line(filename, lineno)
File.open(filename,'r') do |f|
f.gets until f.lineno == lineno - 1
f.gets
end
end
Realmente no necesita lineno(). Puede reemplazar la línea 'hasta' con '(lineno-1) .times {f.gets}'. –
Si desea un trazador de líneas y no se preocupan por el gasto de memoria (líneas suponiendo que se numeran del 1)
lineN = IO.readlines('text.txt')[n-1]
o
lineN = f.readlines[n-1]
si ya han abierto el archivo .
lo contrario, sería mejor hacerlo de esta manera:
lineN = File.open('text.txt') do |f|
(n-1).times { f.gets } # skip lines preceeding line N
f.gets # read line N contents
end
- 1. Obtener una línea en un archivo enorme con PHP
- 2. cómo reemplazar una línea particular en un archivo de texto usando php?
- 3. ¿Cómo saltar a una línea particular en un gran archivo de texto?
- 4. ¿Cómo deshabilitar una regla de estilo de control particular para una línea de código en particular?
- 5. ¿Cómo deshabilitar una regla de estilo de control particular para una línea de código particular?
- 6. ver una línea particular de un archivo denotado por un número
- 7. Cómo obtener lectura de archivo línea por línea
- 8. cómo hacer que git no cambie los finales de línea para un archivo en particular?
- 9. Cómo obtener el número máximo de una longitud particular
- 10. ¿Cómo obtener una línea aleatoria de un archivo de texto en Java?
- 11. C++ sobrescribir datos en un archivo en una posición particular
- 12. ¿Cómo obtener una línea específica de una cadena en C#?
- 13. reemplazar una línea con múltiples líneas en un archivo
- 14. Leer una línea en particular en el archivo txt en Java
- 15. ¿Cómo leo una línea aleatoria de un archivo en Python?
- 16. Eliminar la última línea de un archivo
- 17. obtener todos los elementos de un formulario particular
- 18. Lea un archivo línea por línea
- 19. ¿Cómo obtener una variable CMake desde la línea de comando?
- 20. ¿Cómo obtener la primera línea de un archivo en un script bash?
- 21. C++ - Obtener el valor de una dirección de memoria particular
- 22. Android: ¿Cómo escribir nueva línea en un archivo CSV?
- 23. ¿Cómo obtener un puntero ARCHIVO desde un descriptor de archivo?
- 24. ¿Cómo obtener una instancia de archivo de un dibujable?
- 25. ¿Cómo especificar una implementación particular de JAXB?
- 26. En vim, ¿cómo escribir una línea parcial en un archivo?
- 27. cómo recorro una línea desde un archivo csv en powershell
- 28. Tamaño máximo de archivo dada una estructura de inodo particular?
- 29. ¿Cómo puedo determinar que un archivo en particular es en realidad un archivo MP3?
- 30. Haskell: insertando cada línea de un archivo en una lista
es la solución # 2 Puesta en línea n + 1? –
@ Mark Thomas, en el # 1 también. Supuse indexar desde 0. – Nakilon
Gracias por '[* File.open ('...')]', no sabía que 'to_a' para la instancia de archivo me puede dar sus líneas – tig