A função Random em ASP (Rnd) gera números aleatórios, bem como o método Math.Random faz o mesmo em javascript. No entanto, para fins de auditoria, é preciso explicitar qual o algoritmo que existe por trás do cálculo dos números aleatórios obtidos.
Para esta finalidade, temos um método totalmente transparente, desde a semente de número aleatório utilizada, expressa no código abaixo:
<style>
SPAN.vm { color:red; }
</style>
<%
NO_MAX = 80
QtNoGerar = 12
'* Declarações de variáveis
Dim RaizNumeroAleatorio
Dim DtHoje, Agora
Dim Dia, Mes, Ano, Hora, Minuto, Segundo
Dim sNUMERO_ALEATORIO,NUMERO_ALEATORIO
Dim intNoAleat
Dim Arranjo()
ReDim Arranjo(QtNoGerar)
'* Obtenção parâmetros raiz
DtHoje = Date()
Agora = Time()
'* Obtenção fragmentos de parâmetros
Ano = year(DtHoje):Mes = Month(DtHoje):Dia = Day(DtHoje)
Hora = Hour(Agora):Minuto = Minute(Agora):Segundo = Second(Agora)
'* Concatena parâmetros de data e hora
if Application("PSpca_RandomDec") = "" then
RaizNumeroAleatorio = CDbl(Segundo&Dia&Mes&Ano&Hora&Minuto)
RaizNumeroAleatorio = RaizNumeroAleatorio + 3.141592653589
else
RaizNumeroAleatorio = CDbl(Application("PSpca_RandomDec"))
end if
Response.write("Raiz Inicial: "&RaizNumeroAleatorio)
%>
<table border=1 cellspacing=0>
<th>Indice<th>Pré-Expoente<th>Matriz<th>Matriz<sup>8</sup><br>(Parte fracionária)<th>Número Sorteado<th>STATUS
<%
j = 0
Do while j < QtNoGerar
'* 1 - Exibe a Raiz do número aleatório modificada
Response.write("<tr><td align=right>"&CStr(j)&"<td align=right>"&RaizNumeroAleatorio)
intNoAleat = CDbl(FormatNumber(CStr(RaizNumeroAleatorio),0))
'* 2 - RETIRA A PARTE FRACIONÁRIA
NUMERO_ALEATORIO = RaizNumeroAleatorio - intNoAleat
'* 3 - SOMA UM PARA QUE O NUMERO PRODUZIDO NÃO REDUZA CADA VEZ MAIS A MANTISSA (tendendo ao valor zero)
NUMERO_ALEATORIO = NUMERO_ALEATORIO + 1
'* 4 - Exibe o número aleatório produzido
Response.write("<td align=right>"&NUMERO_ALEATORIO)
'* 5 - Eleva a matriz ao expoente 8
NUMERO_ALEATORIO = NUMERO_ALEATORIO ^ 8
'* 6 - PARTE INTEIRA
intSorteio = CDbl(FormatNumber(CStr(NUMERO_ALEATORIO),0))
'* 7 - Devido a erros de arredondamento, a subtração pode ficar ligeiramente negativa, portanto é retirado o sinal
Sorteio = Abs(NUMERO_ALEATORIO - intSorteio)
'* 8 - Exibe o número sorteado (parte fracionária)
Response.write("<td align=right>"&Sorteio)
'* 9 - Multiplica a mantissa pelo número limite de Sorteio, e soma 1, para evitar que o número sorteado seja 0 (zero)
sSorteio = FormatNumber(CStr(Sorteio * NO_MAX)+1,0)
'* 10 - Exibe o número Sorteado em formato inteiro
Response.write("<td align=right>" & sSorteio & "")
'* 11 - Guarda a mantissa como próxima raiz de número aleatório
RaizNumeroAleatorio = Sorteio 'NUMERO_ALEATORIO
JaExiste = (0=1)
'* 12 - Checa se o número sorteado já foi gerado anteriormente
for i = 1 to j
if sSorteio = Arranjo(i) then
JaExiste = (0=0)
i = QtNoGerar
end if
next
if JaExiste then
JaExiste = "<span class=Vm>JaExiste</span>"
else
j = j + 1
Arranjo(j) = sSorteio
JaExiste = ""
end if
'* 13 - Exibe o Status do número gerado (Se ja existe ou não)
Response.write("<td align=right>"&JaExiste)
loop
%>
</table>
<%
Application("PSpca_RandomDec") = CStr(RaizNumeroAleatorio)
%>
Os números são gerados até que alcancem o número de números pedidos, SEM QUE NENHUM SE REPITA.
Programação com Scripts para Web
Blog da Rede Blogazine
Conteúdos com Pesquisa e Revisão
sexta-feira, 19 de outubro de 2012
Verificação de digitação em campo Data - Javascript
Formulário de entrada da data em HTML
O tratamento dos dados do formulário se dá em dois pontos.
Os caracteres digitados, um a um, são tratados pelo evento "onKeyUp" do campo de INPUT "Dt". A função que faz este tratamento é "data_onChange()".
Quando o formulário estiver pronto, e o operador pressionar o botão de "submit" (se o formulário contiver um) ou a tecla ENTER, o evento "onSubmit" vai ser acionado. Este evento é tratado pela função "form_onSubmit()".
A função form_onSubmit de tratamento do evento onSubmit
* 1 * - Colocação do zero à esquerda de números, quando estes forem menores que 10 (vale para dias e meses);
* 2 * - Arranjo com o número máximo de dias de cada mês. Fevereiro é declarado como 29;
* 3 * - Máscara final de data: 3 grupos de números separados por barra ("/");
* 4 * - Construção final da data, inclusive com a inversão mês e dia, característica dos formatos internacionais.
A função data_onChange de tratamento do evento onKeyUp
* 5 * - Máscara que admite letras (maiúsculas e minúsculas);
* 6 * - Previne a digitação de caracteres estranhos no início da data (operador pode esbarrar numa tecla);
* 7 * - Previne a digitação de caracteres estranhos no meio da data (pelo mesmo motivo);
* 8 * - Define as três máscaras válidas enquanto se digita uma data. A verificação deve ir da mais completa até a mais incompleta, senão qualquer coisa é aceita.
Ao final destas rotinas, feche a tag SCRIPT. O formulário deve vir ABAIXO das scripts.
O tratamento dos dados do formulário se dá em dois pontos.
Os caracteres digitados, um a um, são tratados pelo evento "onKeyUp" do campo de INPUT "Dt". A função que faz este tratamento é "data_onChange()".
Quando o formulário estiver pronto, e o operador pressionar o botão de "submit" (se o formulário contiver um) ou a tecla ENTER, o evento "onSubmit" vai ser acionado. Este evento é tratado pela função "form_onSubmit()".
A função form_onSubmit de tratamento do evento onSubmit
* 1 * - Colocação do zero à esquerda de números, quando estes forem menores que 10 (vale para dias e meses);
* 2 * - Arranjo com o número máximo de dias de cada mês. Fevereiro é declarado como 29;
* 3 * - Máscara final de data: 3 grupos de números separados por barra ("/");
* 4 * - Construção final da data, inclusive com a inversão mês e dia, característica dos formatos internacionais.
A função data_onChange de tratamento do evento onKeyUp
* 5 * - Máscara que admite letras (maiúsculas e minúsculas);
* 6 * - Previne a digitação de caracteres estranhos no início da data (operador pode esbarrar numa tecla);
* 7 * - Previne a digitação de caracteres estranhos no meio da data (pelo mesmo motivo);
* 8 * - Define as três máscaras válidas enquanto se digita uma data. A verificação deve ir da mais completa até a mais incompleta, senão qualquer coisa é aceita.
Ao final destas rotinas, feche a tag SCRIPT. O formulário deve vir ABAIXO das scripts.
quinta-feira, 18 de outubro de 2012
Os eventos da Tag "A" - Abordagem jQuery (Events)
Listagem da Script HTML
A abordagem para explicar estes eventos serão feitas sob o ponto de vista da Biblioteca jQuery, pois ela possui um modelo muito eficiente para lidar com eventos.
Ao executarmos a script, temos a tela:
Passe o mouse sobre os números à esquerda da tela, e clique em um deles (por exemplo o 3):
Ao passar o mouse (mouseover), é mostrada a posição Y do eventos abaixo dos números.
Ao clicar em 3 (ou qualquer número da esquerda), aparece o display do comando alert do javascript.
Posteriormente ...
É mostrada a posição Y do click (mousedown) e o conteúdo do atributo rel (Reg3).
Em jQuery, o click é suprido pelo evento mousedown.
quinta-feira, 27 de setembro de 2012
Expressões Regulares em Javascript (Regular Expressions)
Apostila muito interessante sobre situações comuns de utilização de Linguagens Web em que é preciso fazer testes em Javascript para atender às boas e melhores práticas de programação.
Os exemplos se referem às situações práticas enfrentadas por empresas de desenvolvimento de produtos para Web.
Ela é completamente freeware, pois esta é a nossa intenção: a difusão do conhecimento, principal finalidade da rede de Blogs Blogazine.
Esta é a versão 6.
Baixar a Apostila
Os exemplos se referem às situações práticas enfrentadas por empresas de desenvolvimento de produtos para Web.
Ela é completamente freeware, pois esta é a nossa intenção: a difusão do conhecimento, principal finalidade da rede de Blogs Blogazine.
Esta é a versão 6.
Baixar a Apostila
quarta-feira, 26 de setembro de 2012
Javascript e expressões regulares na introdução de datas
A entrada de datas também é algo bem problemático, e alguns desenvolvedores tentaram solucionar apresentando o calendário logo que o campo INPUT correspondente recebe o foco. No entanto, em se tratando de datas muito passadas, a pessoa tem que voltar anos e meses neste calendário (data de admissão, data de nascimento, data de adesão e etc). Neste caso, é preciso digitar a data.
Por esta razão, construímos uma função javascript para checagem da data campo a campo:
function nome_onChange(o){
var str = o.value;
var ori = str;
// Teste de caracteres estranhos
var RegExp = /[\d|\-|\+](\.|\,|\;|\:|\'|\"|\!|\@|\#|\$|\%|\¨|\&|\*|\(|\)|\_|\-|\+|\=|\s|\{|\}|\`|\´|\^|\~|\[|\])/;
var ar = str.match(RegExp);
if( ar != null ) {
// caracter detectado
str = str.replace(ar[1],'/');
o.value = str;
}
var RegExp = /^(\d{1,2})\/(\d{1,2})\/(\d{1,4})|(\d{1,2})\/(\d{1,2})|(\d{1,2})$/;
var ar = ori.match(RegExp);
if( ar != null ) {
// caracter detectado
window.status = ar[1]+"-"+ar[2]+"-"+ar[3]+"-"+ar[4]+"-"+ar[5]+"-"+ar[6];
// Só dia
if( ar[6] != "" ){
if( parseInt(ar[6]) > 31 ){ alert("Dia inválido");}
} else {
// Dia e mês
if( ar[4] != "" ){
if( parseInt(ar[4]) > 31 ){ alert("Dia inválido"); }
if( parseInt(ar[5]) > 12 ){ alert("Mês inválido"); }
} else {
// Dia, mês e ano
if( ar[1] != "" ){
if( parseInt(ar[1]) > 31 ){ alert("Dia inválido"); }
if( parseInt(ar[2]) > 12 ){ alert("Mês inválido"); }
if( parseInt(ar[3]) > 2999 ){ alert("Ano inválido"); }
}
} // do if( ar[4] ...
} // do if( parseInt(ar[6]) ...
} // do if( ar != ...
}
E no HTML colocamos o código de INPUT:
<input name="Data" id="Data" type="text" size="10" onKeyUp="nome_onChange(this);">
segunda-feira, 24 de setembro de 2012
Javascript e expressões regulares na introdução de números
Uma das situações que pegam em um INPUT de números decimais em formulários HTML é a questão da entrada de números com parte decimal.
Em nosso caso vamos evitar que o usuário digite um número com separadores de milhar, e substituir o ponto decimal "." por vírgula, para evitar problemas posteriores com o formato internacional comumente aceito.
Formulário de INPUT
O formulário contém um campo de Input com um evento para processamento das teclas APÓS serem liberadas após pressionadas:
A cada tecla liberada, é chamada a função javascript nome_onChange:
Em nosso caso vamos evitar que o usuário digite um número com separadores de milhar, e substituir o ponto decimal "." por vírgula, para evitar problemas posteriores com o formato internacional comumente aceito.
Formulário de INPUT
O formulário contém um campo de Input com um evento para processamento das teclas APÓS serem liberadas após pressionadas:
<form
name="frm" method="post"
action="prg.asp">
<input
name="nome" id="nome"
type="text" size=10
onKeyUp="nome_onChange(this);">
<input
type="submit" value="OK">
</form>
A cada tecla liberada, é chamada a função javascript nome_onChange:
function
nome_onChange(o){
var
str = o.value;
window.status = str;
//
Teste de ponto
var
RegExp = /(\.)/;
var
ar = str.match(RegExp);
if( ar != null ) {
if( ar[1] == "."
) {
// Ponto decimal
detectado
str =
str.replace(/\./g,',');
o.value = str
}
}
//
Teste de vírgula
var
RegExp = /\,[\d]{1,}(\,)/;
var
ar = str.match(RegExp);
if( ar != null ) {
if( ar[1] == ","
) {
// Vírgula
detectada
str =
str.replace(/\,$/g,'');
o.value = str
}
}
//
Teste de caracteres estranhos
var
RegExp =
/[\d|\-|\+][\'|\"|\!|\@|\#|\$|\%|\¨|\&|\*|\(|\)|\_|\-|\+|\=|\s|\{|\}|\`|\´|\^|\~|\[|\]]/;
var
ar = str.match(RegExp);
if( ar != null ) {
// caracter detectado
str =
str.replace(/.$/g,'');
o.value = str
}
}
Esta função checa, a cada tecla liberada se foi digitada uma vírgula "," ou ponto "." decimal, fazendo a troca no momento devido.
quarta-feira, 22 de agosto de 2012
Expressões regulares e replace em ASP
Em ASP o uso de expressões regulares é bem diferente e confuso em relação ao metódico e coerente Javascript.
A seguir, um exemplo de Replace de caracteres acentuados muito útil:
<%
Dim RegEx
Set RegEx = New RegExp
RegEx.Global = True
RegEx.IgnoreCase = True
'Set Resp = RegEx.Execute("olás")
Texto = "olás lilás e olés e olós"
'* Inicio funcional
carac = "á,Á,é,É,í,Í"
codigo = "á,Á,é,É,í,Í"
arrCar = split(carac,",")
arrCod = split(codigo,",")
i = 0
For Each x in arrCar
Response.write(x&","&i)
RegEx.Pattern = arrCar(i)
Texto = RegEx.replace(Texto, arrCod(i))
i = i + 1
Next
'* Fim funcional
Response.Write "<textarea cols=80 rows=5>"&Texto&"</textarea>"
%>
A seguir, um exemplo de Replace de caracteres acentuados muito útil:
<%
Dim RegEx
Set RegEx = New RegExp
RegEx.Global = True
RegEx.IgnoreCase = True
'Set Resp = RegEx.Execute("olás")
Texto = "olás lilás e olés e olós"
'* Inicio funcional
carac = "á,Á,é,É,í,Í"
codigo = "á,Á,é,É,í,Í"
arrCar = split(carac,",")
arrCod = split(codigo,",")
i = 0
For Each x in arrCar
Response.write(x&","&i)
RegEx.Pattern = arrCar(i)
Texto = RegEx.replace(Texto, arrCod(i))
i = i + 1
Next
'* Fim funcional
Response.Write "<textarea cols=80 rows=5>"&Texto&"</textarea>"
%>
Assinar:
Postagens (Atom)








