Pregunta

Pregunta bastante simple de un programador Ruby por primera vez.

¿Cómo recorres una losa de texto en Ruby? Cada vez que se encuentra una nueva línea, quiero reiniciar el bucle interno.

def parse(input)
    ...
end
¿Fue útil?

Solución

Cadena # each_line

str.each_line do |line|
    #do something with line
end

Otros consejos

Lo que dijo Iraimbilanja.

O podría dividir la cadena en nuevas líneas:

str.split(/\r?\n|\r/).each { |line| … }

Tenga en cuenta que each_line mantiene los caracteres de avance de línea, mientras que split los come.

Tenga en cuenta que la expresión regular que utilicé aquí se encargará de los tres formatos de final de línea. String # each_line separa las líneas por el argumento opcional sep_string , que por defecto es $ / , que por defecto es " \ n " simplemente.

Por último, si desea realizar un análisis de cadenas más complejo, consulte la clase StringScanner incorporada.

También puedes hacerlo con cualquier patrón:

str.scan(/\w+/) do |w|
  #do something
end
str.each_line.chomp do |line|
  # do something with a clean line without line feed characters
end

Creo que esto debería ocuparse de las nuevas líneas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top