Estaba tratando de usar el siguiente código para leer líneas de un archivo. Pero al leer un archivo , todo el contenido está en una línea:
line_num=0
File.open('xxx.txt').each do |line|
print "#{line_num += 1} #{line}"
end
Pero este archivo imprime cada línea por separado.
Tengo que usar stdin, como ruby my_prog.rb < file.txt
, donde no puedo asumir cuál es el carácter de final de línea que usa el archivo. ¿Cómo puedo manejarlo?
ruby
line-endings
dibujar
fuente
fuente
line_num = 0
, podría usareach.each_with_index
o posiblementeeach.with_index
.read
.line.chomp
para manejar los finales de línea (cortesía de @SreenivasanAC )Respuestas:
Creo que mi respuesta cubre sus nuevas preocupaciones sobre el manejo de cualquier tipo de finales de línea, ya que ambos
"\r\n"
y"\r"
se convierten en estándar de Linux"\n"
antes de analizar las líneas.Para admitir el
"\r"
carácter EOL junto con el normal"\n"
, y"\r\n"
desde Windows, esto es lo que haría:Por supuesto, esto podría ser una mala idea en archivos muy grandes, ya que significa cargar todo el archivo en la memoria.
fuente
/\r?\n/
que cubrirá tanto \ r \ n como \ n sin combinar líneas vacías como lo haría el comentario de PodRuby tiene un método para esto:
http://ruby-doc.org/core-1.9.3/IO.html#method-c-readlines
fuente
with_index
esto también?File.readlines(filename).each_with_index { |line, i| puts "#{i}: #{line}" }
Esto ejecutará el bloque dado para cada línea en el archivo sin arrastrar todo el archivo a la memoria. Ver: IO :: foreach .
fuente
Su primer archivo tiene finales de línea Mac Classic (eso es en
"\r"
lugar de lo habitual"\n"
). Ábrelo conpara especificar las terminaciones de línea.
fuente
Se debe a las líneas finales en cada línea. Use el método chomp en ruby para eliminar la línea final '\ n' o 'r' al final.
fuente
Soy parcial con el siguiente enfoque para los archivos que tienen encabezados:
Esto le permite procesar una línea de encabezado (o líneas) diferente a las líneas de contenido.
fuente
¿qué tal se pone ?
fuente
No olvide que si le preocupa leer un archivo que podría tener grandes líneas que podrían saturar su RAM durante el tiempo de ejecución, siempre puede leer el archivo por partes. Consulte " Por qué es malo sorber un archivo ".
fuente