(Solucionado) [RUBY] Mostrar caracter unicode

Iniciado por Eleкtro, 20 Febrero 2012, 07:21 AM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

Estoy intentando hacer una pantalla de ayuda en un script

El problema es que me da errores al intentar mostrar estos caracteres:

¿    ´    '    –

# -*- coding: UTF-8 -*-

def help()
print "\n Opciones: \n\n"
print ' -?          (Elimina el caracter "¿")' + "\n"
print ' -comilla    (Reemplaza "´" por "'")' + "\n"
print ' -ft         (Reemplaza " ft " por " feat. ")' + "\n"
print ' -ft.        (Reemplaza " ft. " por " feat. ")' + "\n"
print ' -guion      (Reemplaza "–" por "-")' + "\n"
Process.exit
end

help()



He intentado mostrar el guión así, pero nada... :

Código (ruby) [Seleccionar]
print ' -guion      (Reemplaza "\u2013" por "-")' + "\n"





Y una pregunta de paso...

Como puedo hacer esto correctamente?

Código (dos) [Seleccionar]
if (ARGV[0])==""
help()
end


La intención es que reconozca si el argumento está vació.

EDITO:
Vale lo segundo ya lo he conseguido:

Código (ruby) [Seleccionar]
if (ARGV[0])==()
help()
end








RyogiShiki

#1
El problema del primer script está en esta linea:

Código (ruby) [Seleccionar]
print ' -comilla    (Reemplaza "´" por "'")' + "\n"

En donde debes escapar la comilla simple para que se encierre bien dentro de los pares de comillas, así:

Código (ruby) [Seleccionar]
print ' -comilla    (Reemplaza "´" por "\'")' + "\n"

Ahora para mostrar caracteres de tipo unicode debes usar comillas dobles y escapar el resto de comillas dobles de la siguiente forma:

Código (ruby) [Seleccionar]
# -*- coding: UTF-8 -*-

def help()
print "\n Opciones: \n\n"
print ' -?          (Elimina el caracter "¿")' + "\n"
print ' -comilla    (Reemplaza "´" por "\'")' + "\n"
print ' -ft         (Reemplaza " ft " por " feat. ")' + "\n"
print ' -ft.        (Reemplaza " ft. " por " feat. ")' + "\n"
print " -guion      (Reemplaza \"\u2013\" por \"-\")" + "\n"
end


Ahora desde que ARGV es un array puedes comprobar si está vacío de la siguiente manera:

Código (ruby) [Seleccionar]
ARGV.empty?

Lo que devuelve true o false dependiendo si tiene elementos o no.

--EDIT--
Puedes usar puts (put string) envés de print y esté adicionará el salto de linea al final sin necesidad de especificarlo con "\n"

Saludos


Eleкtro

#2
Gracias por tu ayuda pero probé el code que me has dado y no me funcionó, daba error en la linea de "-comilla" xD

Pero por suerte he encontrado la lista de los caracteres unicode y gracias a tu ejemplo lo he conseguido:

Código (ruby) [Seleccionar]

def help()
print "\n Opciones: \n\n"
print "  -c --comilla        (Reemplaza \"\u00B4\" por \"\u0027\")" + "\n"
print '  -f --featuring      (Reemplaza " ft " por " feat. ")' + "\n"
print '                      (Reemplaza " ft. " por " feat. ")' + "\n"
print "  -g --guion          (Reemplaza \"\u2013\" por \"-\")" + "\n"
print "  -i --interrogante   (Elimina \"\u00BF\")" + "\n"
Process.exit
end


Lo malo de esto... Es que me dijiste que para usar el script que reemplaza el guion,Debo usar el código de páginas "chcp 1252"
Si activo la página, La ayuda se muestra mal:



Ya no se como lograr hacerlo correctamente, DIOSSS

PD: Como odio el tema de los chars    >:( >:( >:(


EDITO:

SOLUCIONADO ^^

Código (ruby) [Seleccionar]
system('chcp 850 >NUL')

Código (ruby) [Seleccionar]
def help()
system('chcp 850 >NUL')
print "\n Opciones: \n\n"
print "  -c --comilla        Reemplaza \[\u00B4\] por \[\u0027\]\n\n"
print "  -f --featuring      Reemplaza [ ft ]  por [ feat. ]\n"
print "                      Reemplaza [ ft. ] por [ feat. ]\n\n"
print "  -g --guion          Reemplaza \[\u2013\] por \[-\]\n\n"
print "  -i --interrogante   Elimina \[\u00BF\]\n"
Process.exit
end


Cita de: RyogiShiki en 20 Febrero 2012, 07:47 AM
--EDIT--
Puedes usar puts (put string) envés de print y esté adicionará el salto de linea al final sin necesidad de especificarlo con "\n"

Estoy aprendiendo python y la verdad que la syntaxis de ruby es casi igual xD, Prefiero acostumbrarme a usar Print por el momento.










Eleкtro

Cita de: RyogiShiki en 20 Febrero 2012, 07:47 AMdesde que ARGV es un array puedes comprobar si está vacío de la siguiente manera:
Código (ruby) [Seleccionar]
ARGV.empty?
Lo que devuelve true o false dependiendo si tiene elementos o no.

Uf, No encuentro la manera de utilizar eso...

Código (ruby) [Seleccionar]
If (ARGV[0].empty?)=="True"
print "True"
end


Código (ruby) [Seleccionar]
ARGV.empty?
If True then
print "True"
else
print "false"
end


Creo que si me recomendases un manual de ruby (en español) dejaría de molestarte ._.   La verdad es que no encuentro casi ejemplos de nada, sobre Ruby. Todo lo estoy haciendo basandome en que se parece a python, y viendo ejemplos de ruby de Doddy xD








RyogiShiki

#4
la manera de usarlo en el condicional, como devuelve true o false es la siguiente:

Código (ruby) [Seleccionar]

if (ARGV.empty?) then
   print "ARGV Vacio"
end


Como no se ha pasado ningun elemento como argumento entonces ARGV[0] que es el primer elemento del array no existe, por eso el método empty? se aplica al array como tal y no a un elemento de este

Existe buena documentación en la página de Ruby: http://www.ruby-lang.org/es/documentation/

En cuanto a lo del material, revisa este hilo: http://foro.elhacker.net/scripting/introducing_ruby_lo_que_debes_saber_sobre_ruby-t321085.0.html

Saludos
Saludos