    Curso de scripvox - aula3 (Por Fabiano Ferreira)

    Nesta aula, vamos ver comandos para trabalhar com variáveis e
funções modificadoras do comando seja.

    A partir de agora nossos scripts vão ficar mais interessantes,
fazendo um pouco mais do que gravar valores em variáveis e exibí-los na
tela.

    Muita atenção, galera.
Nós vamos começar a 'apertar os sintos' e depois da aula 4, nós vamos
voar alto.
Então... se há dúvidas nas aulas 1 e 2, a hora é agora.
Releiam, tirem dúvidas na lista, por que senão, poderão se perder mais
adiante.
    Então é isso, vamos começar!

Concatenação

Concatenar, é o mesmo que unir, juntar.
Podemos, no scripvox, utilizar o comando concatena para unir duas ou
mais variáveis, como se pode observar no código abaixo:

Seja a "1"
seja b "2"
Seja c "3"

Concatena a b
Concatena a c

Escreve a

Abra seu editor de textos.
Copie o código acima, salvando com o nome de
exemplo3.cmd

Vamos analisar este script:

Linha 1: atribuímos o valor 1 para a variável a.
Linha 2: atribuimos o valor 2 para a variável b.
Linha 3: atribuímos o valor 3 para a variável c.
Obs: podemos omitir as aspas, quando atribuimos valores numéricos a uma
variável. Portanto,
seja a "1" e
seja a 1, dá no mesmo.

Vamos em frente.
Atenção para esta parte do código:

Linha 4: unimos o valor da variável a com o valor da variável b. O que
aconteceu então? O valor da variável b, foi colocado a direita do valor
da variável a, modificando seu valor inicial que era 1.
Então, quanto vale a variável a até agora? Bem, se a era 1, e b é 2, e
se o valor de b foi colocado na variável a, a direita do seu valor
inicial, a variável a passou a valer 12.

Linha 5: Unimos o valor da variável a ao valor da variável c, colocando
o valor de c a direita do valor de a, modificando o valor de a
novamente.
E agora, a vale quanto? Bem, se a vale 12, e adicionamos o valor de c
que é 3, a direita do valor de a, logo a passa a valer 123.

Linha 6: Exibimos o valor da variável a.
Então, nosso script mostra o valor 123 na tela.

Comando lê:

Como estamos vendo desde o início deste curso, o comando lê, serve para
receber uma informação do usuário e guardar em uma variável.
Podemos usá-lo sem o acento circunflexo no 'ê', ou seja, lê e le, é a
mesma coisa no scripvox.
A sintaxe é:
le nomedavariavel

Podemos, opcionalmente, utilizar os parâmetros: mudo, senha e edita.     O
primeiro faz com que a informação passada para a variável não seja
ecoada.     O segundo serve para que a informação não seja nem escrita
nem ecoada.
O último faz com que possamos editar o valor da variável com as setas.
    Adicionando o modificador & (e comercial) após o nome da
variável, indicamos ao interpretador que a variável irá receber apenas
um caracter, ou seja, ao digitarmos o valor para ser armazenado na
variável, não precisamos de apertar a tecla enter depois.

    Exemplo:

*Código de exemplo de uso do comando Lê;
*Por Fabiano Ferreira;
*Em julho de 2011;

Escreve "    Este é um código de exemplo do comando Lê."
*a linha abaixo gera uma linha em branco na hora da execussão:
Escreve ""
Escreve "Informe seu nome:"
Le n
Escreve "Agora, informe uma senha:"
Le senha s
Escreve "Agora, escreva algo somente para ser exibido na tela:"
Le mudo a
Escreve "Agora, escreva uma frase qualquer:"
Le f
Escreve "Agora, veja com as setas esquerda e direita a frase que você escreveu, tecle esc para sair da edição:"
Le edita f
Escreve "Então, gostou, sim ou não?"
Le r &
Escreve "Nós vamos fazer scripts bem mais interessantes que esse, aguarde!"
Escreve "Obrigado."
Escreve "Fim."
Termina mudo

Copiem esse código para um arquivo, salvando-o com o nome de comando-lê.cmd
e executem com o scripvox.

Copiando valores de uma variável para outra

A linha de comando de cópia de valores de uma variável para outra tem a
seguinte forma:
Copia, um espaço, nome da variável que vai receber o valor, um espaço,
nome da variável de onde o valor se encontra, um espaço, caracter
inicial, um espaço e caracter final.
Tomemos como exemplo uma variável a que tem como valor a palavra
"camaleão".
Então podemos dizer que temos uma variável guardando 8 letras: 'c', 'a',
'm', 'a', 'l', 'e', 'ã', 'o'.
Agora queremos copiar parte destas letras para uma variável, que
chamaremos de b.     Queremos copiar do caracter 5 até o 8.     Logo, a
solução em scripvox seria:
copia b a 5 8
Agora a variável b tem como valor a palavra "leão".

Vamos a um pequeno exemplo:
*Exemplo de cópia de valores entre variáveis;
*Por fabiano Ferreira;
*Em julho de 2011;

Seja c "Curso de scriptvox"

Copia c c 10 18
Escreve c
Termina mudo

O código exibirá a palavra scriptvox.
Neste exemplo, vemos que é possível sobrescrever o valor de uma
variável, copiando uma parte dela para ela mesmo.
A linha 'copia c c 10 18' copia para a variável c o valor de c, do
caracter 10 até o 18, ou seja, ele apaga o valor de c, só deixando da
posição 10 até a 18.

Funções modificadoras do comando seja:

*    Função tamanho

Para obtermos o tamanho de uma variável, utilizamos a função tamanho.
Sua forma geral é a seguinte:
seja x tamanho y.
Onde x é a variável que guarda o número correspondente ao tamanho de y.
No caso do exemplo dado no tópico anterior, (camaleão) ao escrever a linha de
código:
seja t tamanho a, t receberia o valor 8, correspondente ao tamanho de a.
Agora, poderíamos modificar a linha de código que escrevemos no tópico
anterior que era:
copia b a 5 8
para:
copia b a 5 t, já que, t vale tamanho de a.

Heis um exemplo de obtenção de tamanho de variável:

*Informa o tamanho de uma string digitada pelo usuário;
*Por Fabiano Ferreira;
*Em julho de 2011;

Escreve "Digite uma frase ou palavra e eu direi seu tamanho:"
le p
Seja t tamanho p

Escreve "O tamanho da string "p" é "t"."

Termina mudo

    O exemplo acima permite que o usuário entre com uma frase ou palavra
e informa seu tamanho.
Atenção: espaços são contados como caracteres, portanto, "curso de
scriptvox" e "cursodescriptvox" tem tamanhos diferentes.

*    Função maiusc

Para converter uma string armazenada em uma variável toda para
maiúscula, utilizamos a função maiusc.
Acompanhe o exemplo abaixo:

*Convertendo para maiusculas;
*Por Fabiano Ferreira;
*Em julho de 2011;

Seja f "fabiano ferreira"
seja f maiusc f
Escreve f
Termina mudo

O exemplo acima escreve fabiano ferreira em maiúsculas.

Agora veja esse outro exemplo, quase igual ao anterior:

*Convertendo para maiusculas;
*Por Fabiano Ferreira;
*Em julho de 2011;

Seja f "fabiano ferreira"
seja g maiusc f
Escreve g
Termina mudo

Qual a diferença do segundo exemplo para o primeiro?

No primeiro exemplo, ao converter o valor da variável para maiúsculas,
perdemos o valor original, e no segundo não, pois guardamos o valor
convertido em uma outra variável.
    Tudo vai depender do que se deseja fazer.
Se o valor em minúscula não vai ser utilizado no programa, não há
problema perdê-lo, mas, se ainda precisarmos dele, temos de preservá-lo.

Então, como saber quando estou destruindo o valor inicial da minha
variável?
Simples. Basta entendermos a função maiusc assim:
Quando escrevemos 'Seja l maiusc l', estamos dizendo ao interpretador
'seja l o valor em maiúsculo de l', ou seja, seja l o valor em maiúsculo
dele mesmo.
E quando escrevemos 'Seja m maiusc l', estamos dizendo 'seja m o valor
em maiúsculo de l', preservando assim o valor inicial de l.
    Essa dica vale não só para a função maiusc, mas para qualquer
modificação no valor da minha variável.
Se não posso perder o valor inicial, uso sempre outra variável para
armazenar o novo valor.

*Função trim

A função trim serve para remover todos os espaços em branco, no início e
no fim de uma string.
Vamos a um exemplo:

*exemplo de utilização da função trim;
*Por Fabiano Ferreira;
*Em julho de 2011;

Seja c "    Curso de scripvox.    "
seja c trim c
escreve c

No exemplo acima, a string curso de scripvox será escrita sem os espaços
iniciais e finais.
Atenção: o efeito desse comando é visual, nada será diferenciado quando
falado pelo sintetizador.
Assim é também para a função maiusc.

*Função pos
    Esta função calcula um subconjunto de carateres dentro de um
conjunto de carateres guardados em uma variável.
    Tenham calma, é mais fácil do que imaginam.
Vou contar um pequeno segredo pra vocês: eu levei quase um ano pra
entender o que significava isso.
Vejam a explicação do manual oficial do scripvox para a função pos:
"        POS [subcadeia]   calcula a posição de uma subcadeia na
variável"
E só isso!
Talvez vocês perguntem: "Como é que você fez pra entender isso então?"
    Resposta: executando o código que vem de exemplo no manual e
'tentando pegar no ar', o por que daquele resultado.
Vejam o exemplo do manual oficial:

seja a "Antonio"
seja p POS "nio" a
escreve p
Será escrito 5

É, será escrito 5, mas alguém entendeu por que 5?
Gente, pode parecer ridículo, mas eu demorei muito pra entender o por
que do 5.
Eu sabia muito pouco de programação nessa época.
Então o jeito era testar os códigos e pedir ajuda.
Quando não tinha ajuda, tinha que tentar adivinhar.

Bem... vocês querem é saber o por que do 5 e o que é essa tal de função
pos, e esse negócio de subconjunto, não é mesmo?
Pois bem, vou deixar de enroleixan e matar a curiosidade de
vocês.

Vamos analisar aquele exemplo do manual:
seja a "Antonio"
*Aqui nada de novidade, apenas atribuimos a string Antonio a variável a;
seja p POS "nio" a
*Aqui está o uso da função pos, onde atribuímos o valor de um subconjunto da variável a à variável p.

escreve p
*Aqui também nada de novo, escrevemos o conteúdo da variável p na tela.

"Pocha, Fabiano, continuo sem entender por que 5!"
Certo.
Veja só:
No exemplo, a variável a tem como valor a string Antonio, certo?
Ok.
Quantas letras tem Antonio?
Tem 7 letras, né isso?
Ok.

Agora eu pergunto: se eu ler Antonio, do caracter 5 até o 7, que palavra
eu formo:
Nio... ummmm. exatamente o subconjunto que o código de exemplo calcula!
E nio, dentro de Antonio, começa na posição 5, pois é onde está a letra
'n' do pedacinho final de Antonio.

"Nossa, que legal! agora eu entendi!"
Entendeu mesmo?
Então vamos ver:
Se ao envés de calcular a posição do subconjunto 'nio' em Antonio, eu
calculasse 'an', que valor eu encontraria?
Encontraria 1.
Se fosse 'ton'? encontraria 3.
Se fosse 'Ant', encontraria 1.
Se fosse 'nto', acharia 2.

Ficou claro agora?
Se sim, ok, se não, basta escrever para o grupo que tentaremos ajudar.

*Função rand

Esta função gera um número aleatório entre 0 e n-1, por exemplo:
Seja r rand 100, geraria um valor aleatório entre 0 e 99.

Seja r rand 11, gera um valor aleatório entre 0 e 10.

Seja p rand 2012, gera um valor aleatório entre 0 e 2011.

Esta função, geralmente, é usada em conjunto com o comando randomiza.
Caso o comando randomiza não seja utilizado, os valores gerados serão sempre os mesmos
 toda vez que executarmos o programa.

Vejamos um exemplo de código:

*Exemplo do uso da função rand;
*Por Fabiano Ferreira;
*Em julho de 2012;

Randomiza
seja r rand 1001

Escreve "Seu número da sorte é"r
Termina mudo.

O exemplo acima exibe um valor randômico entre 0 e 1000.

*Função data

Esta função obtem a data no formato dd/mm/aaaa

Exemplo:

*Exemplo de obtenção de data;
*Por Fabiano Ferreira;
*Em julho de 2011;

Seja d data

Escreve "Data de Hoje: "d
Termina mudo.

O exemplo acima exibe a data, conforme ela está no sistema windows.

*Função hora

Esta função obtem a hora no formato hora:minuto:segundo.
Exemplo:

*Exemplo de script para obter a hora do sistema;
*Por Fabiano Ferreira;
*Em julho de 2011;

Seja h hora

Escreve "Olha a hora! "h
Termina mudo

O exemplo acima exibe a hora, conforme esteja ajustada no sistema
windows.

*Função dia

Esta função obtem o dia da semana (segunda, terça, etc...)

Exemplo

*Exemplo de script que obtem o dia da semana;
*Por Fabiano Ferreira;
*Em julho de 2011;

Seja d dia

Escreve "Hoje é "d". Não esqueça de seu compromisso."
Termina mudo

O exemplo acima exibe o dia da semana.

*Função tempo

Esta função obtem o tempo, em centésimos, desde que o programa começou a
ser executado.

Vejamos um exemplo:

*Exemplo do uso da função tempo;
*Por Fabiano Ferreira;
*Em julho de 2011;

Escreve "Aperte qualquer tecla para fechar este programa:"
le x &
seja t tempo
Escreve "Tempo de execussão: "t
Escreve "tchau."
Termina mudo

O exemplo acima mostra o tempo em centésimos que o programa está sendo
executado.

    Assim terminamos a nossa aula 3.
O exercício dessa semana será estudar tudo que vimos até aqui e
produzir scripts, tentando aproveitar o máximo do que foi dado até esta
aula.
    Sintam-se livres para escrever os programas que a imaginação deixar
produzir.

E atenção!
Quem quiser mandar códigos afim de mostrar o quanto está progredindo, ou
para tirar dúvidas, essa semana deve fazer no próprio grupo.
programando-em-scripvox@googlegroups.com

Todos estão autorizados a comentar, corrigir, sugerir, acrescentar e
ajudar, claro, tudo com muita ordem e com muito respeito.
Nada de menosprezar o trabalho do outro, nem de querer se achar o
melhor.

E ó, quero ver movimento!
Todo mundo botando a cachola pra funcionar, escrevendo códigos e
compartilhando conosco!
Valendo até o dia 31/07.
Após esse dia, voltamos ao nosso ritmo normal.

Bons estudos!
