Fallo con el orden de numeros!

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
Charlie19
Aprendiz de Mago
Mensajes: 30
Registrado: 12 Ene 2010, 22:59

Fallo con el orden de numeros!

Mensaje por Charlie19 »

Hola,
Miren tengo un problema ya que estoy intentando hacer una aplicacion para que me ordene unas cantidades, ej.
Pongo en la imput 1 (AA) y en la 2 (aa)...Despues de hacerme las funciones me quedaria esto.
Un MsgBox ----> AaAaAaAa Oks hasta aqui bien, pero busco la manera de que al poner en la Input 1 (aA) y en la 2 (AA) Me salga esto:
MsgBox ---> AaAAAaAA pero envez de esto me sale esto aAAAaAAA . Nose si les quedo claro pero con el code lo veran

Código: Seleccionar todo

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 205, 100, 192, 124)
$Input1 = GUICtrlCreateInput("", 24, 16, 57, 21)
$Input2 = GUICtrlCreateInput("", 112, 16, 57, 21)
$Button1 = GUICtrlCreateButton("Calcula", 56, 40, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			$datos1 = GUICtrlRead($Input1)
			$datos2 = GUICtrlRead($Input2)
			$val = StringLen($datos1) + StringLen($datos2)
			If $val > 0 Then
				If $val = 4 Then
					_2()
				ElseIf $val = 8 Then
					MsgBox(1, "aa", "4")
				ElseIf $val = 2 Then
					MsgBox(1, "aa", "1")
				Else
					MsgBox(1, "aa", "error")
				EndIf
			Else
				Exit
			EndIf

	EndSwitch
WEnd

Func _2()
		$1 = StringMid($datos1,1,1)
	If StringIsUpper($1) = True Then
		$1M = $1
MsgBox(1, "aa", "si")
	Else
		$1m = $1
MsgBox(1, "aa", "no")
	EndIF
	$2 = StringMid($datos1,2,1)
	If StringIsUpper($2) = True Then
		$2M = $2
	Else
		$2m = $2
	EndIF
	$3 = StringMid($datos2,1,1)
	If StringIsUpper($3) = True Then
		$3M = $3
	Else
		$3m = $3
	EndIF
	$4 = StringMid($datos2,2,1)
	If StringIsUpper($4) = True Then
		$4M = $4
	Else
		$4m = $4
	EndIF
	$res1 = String($1M & $3M & $1m & $3m)
	$res2 = String($1M & $4M & $1m & $4m)
	$res3 = String($2M & $3M & $2m & $3m)
	$res4 = String($2M & $4M & $2m & $4m)
	MsgBox(1, "", $res1 & $res2 & $res3 & $res4)
EndFunc
Entonces la cosa eske me ordene los caracteres dependiendo si hay mayuscula o no !! Pero no se me ocurre mas formas de provar, y no entiendo pork asi no esta bien!
PD:

Código: Seleccionar todo

If StringIsUpper($1) = True Then
		$1M = $1
MsgBox(1, "aa", "si")
	Else
		$1m = $1
MsgBox(1, "aa", "no")
	EndIF

Tiene esas MsgBox's ya que queria comprovar si reconocia la funcion...y si que lo hace =S sino prueben !!

GRACIAS
Sin error no hay esfuerzo, sin esfuerzo no se programa!
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Fallo con el orden de numeros!

Mensaje por Chefito »

Mmmmm....no entiendo muy bien que quieres hacer :smt017 . Explicate mejor y pon más ejemplos.

Un ordenador no entiende de letras (ni mayúsculas, ni minúsculas, ni ningún otro tipo de caracter). El ordenador entiende de números. Y siempre te va ha decir que una minúscula es mayor que una mayúscula porque compara sus códigos ascii's, y en la tabla de código ascii van antes las mayúsculas que las minúsculas. Busca en la ayuda de autoit esto para ver la tabla ascii: ASCII Character.
El código ascii de la "a" es 97, y el de la "A" es 65. Esto significa que a (97) > A (65). Con esto te digo que lo tienes que hacer al revés. Sabiendo que las mayúsculas van antes que las minúsculas, decir en la condición que lo contrario....poniendo en vez de mayor, menor y en vez de menor, mayor. Si te lias mucho poniendolo así, puedes dejarlo normal y añadirle al resultado de la condición un NOT para que te salga lo contrario.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Fallo con el orden de numeros!

Mensaje por Ximorro »

Bueno AutoIt es un poco especial con las comparaciones entre cadenas.
El operador de igualdad, "=", no tiene en cuenta mayúsculas, así "A" = "a" es True, para distinguirlas hay otro operador, "==", que sí mira mayúsculas, "A" == "a" es False.

¿Y los demás operadores? Pues no lo sé pero hagamos unas pruebas, voy ejecutando en AutoIt y os pongo el resultado.
"a" < "b": True, vale, los "menor", "mayor" y compañía están definidos para cadenas. Veamos qué pasa si mezclamos mayúsculas.
"A" < "b": True, vale ¿será por la mayúscula o por orden alfabético?, las ponemos al revés
"a" < "B": ¡TRUE!, esto significa que estos operadores NO tienen en cuenta mayúsculas o minúsculas, sólo orden alfabético.

Entonces "a" < "A y "A" < "a" deben ser falsos, pues son iguales (de hecho "A" = "a" es True), veamos:
"a" < "A: False
"A" < "a": False


Efectivamente, en las comparaciones AutoIT NO tiene en cuenta mayúsculas o minúsculas. Y a diferencia con "=" aquí no hay un operador que sí distinga, tipo "<<", así que para hacer comparación estricta, poniendo antes las mayúsculas, habrá que analizar los códigos ASCII carácter a carácter...

Por cierto, también está la función StringCompare, a la que le puedes decir si quieres caso sensitivo o no, y mira qué curioso el ejemplo en la ayuda ORIGINAL EN INGLÉS:
$result = StringCompare("MELÓN", "melón")
MsgBox(0, "StringCompare Result (mode 0):", $result)


Vaya, probablemente están comparando cadenas en castellano ;-)

Atención, como digo en otro post, ojo con mezclar números y strings de caracteres, porque por ejemplo "10" < "4" es TRUE porque "1" es menor que "4", da igual que haya más cifras, está comparando como si fueran letras. Numéricamente será correcto 10 < 4 sí es False.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Fallo con el orden de numeros!

Mensaje por Chefito »

Jejejeje......pues mira, eso no lo sabía :smt005 . Creía que se comportaba como otros lenguajes que comparaban los caracteres según su orden en la tabla ascii. Incluso creía que en las cadenas de más de un caracter se sumaban sus números ascii y luego se comparaban este resultado. Estaba equivocado.
Ximorro tiene razón :smt002 .
Por curiosidad me he ido a la ayuda para ver que pone sobre estos operadores y he visto esto, en este caso para >, pero la última parte se aplica a todos los operadores de este estilo por igual (taducido por google):
Comprueba si el primer valor es mayor que el segundo. Las cadenas se comparan lexicográficamente incluso si el contenido de la cadena a pasar es numérico.
En definitva: Ximorro 1 - chefito 0 :smt005 :smt005 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Fallo con el orden de numeros!

Mensaje por Ximorro »

No hombre, es el AutoIt que te ha metido un gol ;-)

Pues la ayuda sigue siendo incompleta, a menos que lexicográficamente implique "caso insensitivo", cosa que no veo tan clara, yo lo habría hecho explícito, tal como hacen con el operador "=".
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Responder