El último
Este es un pelín más avanzado pero dado el resultado más complejo sorprende que se pueda hacer en 5 líneas.
¿Queréis saber qué día de la semana nacísteis? Este programa es un calendario perpetuo, esto es un programa que le pasas una fecha y te dice qué día de la semana fue, es, o será.
En realidad esta versión no es "perpetua", funciona para nuestro actual calendario gregoriano, y eso es desde el 15 de octubre de 1582.
(Por si no lo sabíais cuando se ajustó el calendario, del jueves 4 de octubre se pasó al viernes
15 de octubre. Los días desde el 5 al 14 de octubre de 1582
¡no existen en nuestro calendario!)
El programita, luego lo explico y mejoro:
Código: Seleccionar todo
#Include <Date.au3>
$fechaStr = InputBox("Calendario perpetuo", "Entra fecha (día/mes/año):", "", "", 250, 130)
$fechaPartes = StringSplit($fechaStr, "/")
$numDia = _DateToDayOfWeek($fechaPartes[3], $fechaPartes[2], $fechaPartes[1])
MsgBox(64, "Calendario perpetuo", "Día de la semana: " & _DateDayOfWeek($numDia))
#Include <Date.au3> le dice a AutoIt que cargue una extensión que tiene para trabajar con fechas. AutoIt viene con muchas extensiones que no carga por defecto para ahorrar memoria, con esto del #include le decimos que las cargue sólo cuando las necesitamos.
El InputBox ya está explicado en el comentario anterior
Lógicamente para hacerlo simple no se comprueban errores en la entrada, así que hay que introducirla bien. Esto es la fecha en números en formato día/mes/año, por ejemplo hoy es 5/11/2009. No hace falta poner ceros de relleno, pero sí el año con todos los dígitos, si ponemos 1/1/10 no sabe si se trata de 2010 ó 1910...
StringSplit separa la cadena que le pasas por la letra o símbolo que le indicas y te lo da en partes que puedes acceder por un número. Así parto la fecha por el separador "/" y me da tres partes en la variable $fechaPartes (eso se llama vector o matriz, en inglés array). Para acceder a una parte concreta se pone el número entre corchetes. Como por ejemplo el año es la tercera parte, pues lo extraemos con $fechaPartes[3].
(Para ser exactos hay una parte (o elemento) número 0 (cero), que contiene el número de partes que vienen después)
Eso lo usamos en la siguiente función (_DateToDayOfWeek = fecha a día de la semana) que nos da el número del día de la semana para una fecha, que hay que pasarla con año, mes y día por separado.
Ese número se lo pasamos a la función _DateDayOfWeek (=fecha día de la semana, ojo que se parece a la anterior pero no es lo mismo), que nos da en texto el día de la semana, cosa que imprimimos con MsgBox.
El problema es que AutoIT estos textos los tiene almacenados en inglés. ¿Qué pasa si lo queremos en castellano? Pues lo tenemos que hacer nosotros...
Pero sólo es una línea más. Como _DateToDayOfWeek me da el número del día de la semana (eso sí, el 1 corresponde con domingo, el 2 al lunes...) pues me creo un vector de esos que he comentado antes con los días de la semana, y si tengo un 2, pues cogeré el segundo elemento, que corresponderá al lunes. Para eso uso la función StringSplit, aprovechando que ya la he usado, el nuevo programa quedaría:
Código: Seleccionar todo
#Include <Date.au3>
$fechaStr = InputBox("Calendario perpetuo", "Entra fecha (día/mes/año):", "", "", 250, 130)
$fechaPartes = StringSplit($fechaStr, "/")
$numDia = _DateToDayOfWeek($fechaPartes[3], $fechaPartes[2], $fechaPartes[1])
$dias = StringSplit("Domingo,Lunes,Martes,Miércoles,Jueves,Viernes,Sábado", ",")
MsgBox(64, "Calendario perpetuo", "Día de la semana: " & $dias[$numDia])
Como $numDia tiene el valor numérico del día de la semana, si $dias[2] me da el segundo elemento de $dias, de la misma manera $dias[$numDia] me dará el elemento correspondiente a lo que valga $numDia, que es el que corresponde a nuestra fecha.
Ale, a disfrutarlo también.
Espero no haberme pasado un poco. Si queréis se puede montar un post con un menú y ordenar las entradas por dificultad (totalmente novato, iniciado, medio), tipo el menú que han hecho aquí:
http://www.autoitscript.com/forum/index ... ntry133769
Lo he puesto aquí porque creo que poder hacer un calendario perpetuo en cinco líneas muestra la potencia de AutoIT. Sólo se usan 3 funciones, a parte de la de pedir la fecha y mostrar el resultado. ¡Eso no es na!