Autor Tema: Comparación de objetos string, leer archivo txt en Ruby.  (Leído 6480 veces)

bigtio

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Comparación de objetos string, leer archivo txt en Ruby.
« 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:

Código: [Seleccionar]
# 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.
« Última modificación: 15 de Septiembre 2014, 14:00 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Comparación de objetos string en Ruby.
« Respuesta #1 en: 09 de Febrero 2014, 11:17 »
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!

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".