Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: bigtio en 09 de Febrero 2014, 07:21
-
Buenas, estoy tratando de hacer una pequeña aplicación en lenguaje Ruby, esta aplicación lee un archivo txt y genera otro de salida, las dos cosas ya las hace perfectamente, el detalle viene a que dentro de las funciones de la aplicación es comparar si una variable String contiene otra como Substring.
Por ejemplo, la aplicación tiene que validar que la cadena "Prueba" este dentro de la cadena wRtPruebajnm, el problema es que no encuentro como hacerlo, ya intente con la instrucción include?, pero esta solo me funciona cuando comparo la variable directamente con algún string,
Este es mi código:
# Abre y lee un fichero
# Se usa un bloque: el fichero se cierra
# automáticamente al acabar el bloque.
linea1 = ''
linea2 = ''
linea3 = ''
auxiliar = ''
auxiliar2 = ''
auxiliar3 = ''
puts "Leyendo Archivo..."
f = File.open('Archivo1.txt')
entero = 0
a = f.readlines
#Recorrer archivo y asignar variables
#Limpiar linea3
linea1 = a[1]
linea2 = a[2]
linea3 = a[3]
for i in(0..linea3.length)
if(linea3[i,1] != auxiliar2)
auxiliar3 = auxiliar3 + linea3[i,1]
auxiliar2 = linea3[i,1]
end
end
linea3 = auxiliar3
puts linea1
puts linea2
puts linea3
# Crea un nuevo fichero, y escribe
File.open('Salida1.txt', 'w') do |f2|
if linea3.include? linea1
f2.puts "SI"
else
f2.puts "NO"
end
if linea3.include? linea2
f2.puts "SI"
else
f2.puts "NO"
end
end
puts "Archivo de salida generado"
El problema esta en esta linea:
if linea3.include? linea1
Asumiendo que linea3 = wRtPruebajnm y linea1 = Prueba la instrucción me regresa falso, mientras que la siguiente instrucción me regresa verdadero:
if linea3.include? "Prueba"
Hay algún modo de utilizar algo similar al Contains() de C# en Ruby, una ayuda porfavor, tengo bastantes horas quebrandome la cabeza con esto.
-
Prueba con lo siguiente:
a) Definir los strings usando comillas dobles en lugar de comillas simples, es decir:
en vez de linea1 = '' usar linea1 = ""
b) Comprobar el contenido de linea1 por si acaso no contiene exactamente lo que esperas. Me ha ocurrido en algunas ocasiones que al buscar o comparar strings me dice que "no están" o "no son iguales" cuando aparentemente sí están o sí son iguales. Después de muchas pruebas he comprobado que la cadena que buscaba no era lo que yo pensaba debido a espacios en blanco. Me explico con un ejemplo. Supongamos que la cadena 1 es "wRtPruebajnm" y la cadena 2 es "Prueba ". Aparentemente la cadena 2 está dentro de la cadena 1, pero lo cierto es que la cadena 2 no contiene sólo la palabra Prueba como yo pensaba, sino que contiene Prueba seguido de un espacio en blanco (difícil de detectar a simple vista). Entonces al buscar "Prueba " me dice que no está y al buscar "Prueba" me dice que sí está. Para comprobar si existen espacios en blanco hay métodos para recortar espacios, o más simple, imprime de forma seguida varias veces la cadena. Si no hay espacios en pantalla te debe mostrar "PruebaPruebaPruebaPrueba..." mientras que si existen espacios te mostrará "Prueba Prueba Prueba Prueba..."
c) Otra posibilidad de fuentes de error son caracteres ocultos, especialmente al final de la cadena. Para comprobar exactamente habría que extraer carácter a carácter, es posible que te encuentres un carácter no visible al final de la cadena o algo así.
A ver si hay suerte!