2012-05-31 8 views
7

Ha pasado mucho tiempo desde que utilicé el rubí para cosas como esta pero, olvido cómo abrir un archivo, buscar una cadena e imprimir lo que encuentra Ruby. Aquí es lo que tengo:Ruby encuentra la cadena en el archivo y imprime el resultado

#!/usr/bin/env ruby 
f = File.new("file.txt") 
text = f.read 
if text =~ /string/ then 
puts test 
end 

quiero para determinar cuál es la "raíz del documento" (rutas) es en config/routes.rb

Si imprimo la cadena, se imprime el archivo.

Me siento tonto porque no recuerdo lo que es esto, pero necesito saberlo.

Con suerte, puede hacer que imprima esto:

# Route is: 
blah blah blah blah 
+1

¿No le gustaría iterar sobre cada línea en lugar de sobre el archivo completo? En cualquier caso, una simple búsqueda web proporcionará una gran cantidad de ejemplos para esto. –

Respuesta

1

Dentro text usted tiene todo el archivo como una cadena, puede partido contra ella usando un .match con expresión regular o como Dave Newton sugirió que sólo puede iterar sobre cada línea y verificar. Algo como:

f.each_line { |line| 
    if line =~ /string/ then 
    puts line 
    end 
} 
8
File.open 'file.txt' do |file| 
    file.find { |line| line =~ /regexp/ } 
end 

que devolverá la primera línea que coincide con la expresión regular. Si desea todas las líneas coincidentes, cambie find a find_all.

También es más eficiente. Se repite sobre las líneas de a una por vez, sin cargar todo el archivo en la memoria.

Además, el método grep se puede utilizar:

File.foreach('file.txt').grep /regexp/ 
2

La forma más sencilla de obtener la raíz es hacer:

rake routes | grep root 

Si desea hacerlo en Ruby, me gustaría ir con:

File.open("config/routes.rb") do |f| 
    f.each_line do |line| 
    if line =~ /root/ 
     puts "Found root: #{line}" 
    end 
    end 
end 
+1

Gracias por señalar el OP a 'rutas de rastrillo'. Mi única sugerencia sería que uno debería usar fgrep o 'grep --fixed-strings' si uno no intenta hacer coincidir una expresión regular. –

+0

+1 para 'rutas de rake '. –

Cuestiones relacionadas