clipper - curso basico

Upload: turbonetlink

Post on 13-Jul-2015

689 views

Category:

Documents


14 download

TRANSCRIPT

Curso de ClipperComandos BsicosAutor: Paulo Csar Toledo ([email protected]) Direitos reservados site Clipper On Line Contedo: O que Clipper? Escrevendo o arquivo fonte do programa Compilando e Linkeditando o programa Executando o programa Entrada de dados Estrutura de controle de repetio e condio Criando um menu de opes Criando arquivo de dados Gravando em arquivo de dados Pesquisando registros no arquivo de dados Alterando registros no arquivo de dados Excluindo registros no arquivo de dados Criando relatrios Chamando arquivo fonte externo Funes e smbolos usados com picture Tabela de cores e atributos Operadores Nomes de campos e variveis de memria Opes de compilao Opes de linkedio Comandos e funes usadas neste curso

O que Clipper? Clipper uma moderna e eficiente linguagem de programao, baseada na linguagem xBASE, permite o encadeamento ordenado e lgico de seus comandos possibilitando rapidamente a definio de programas com alto grau de complexidade e sofisticao. Ao longo dos anos, a linguagem Clipper, tornou-se to popular a ponto de fazer do Brasil a sua maior base instalada. Ao lado do Cobol, Clipper uma das linguagens mais difundidas e estudadas em todos os tempos. Inmeras empresas comearam sua informatizao utilizando programas escritos em Clipper, criando um mercado de trabalho muito promissor para os profissionais e desenvolvedores de aplicativos. Os sistemas escritos em Clipper so fceis de desenvolver e manter, e ainda so largamente utilizados seja por empresas ou pelos desenvolvedores de aplicativos. Voltar

Escrevendo o arquivo fonte do programa Inicialmente iremos criar um arquivo onde colocaremos os comandos do Clipper para que mais tarde seja compilado e linkeditado. Este arquivo que armazena esses comandos chamado de arquivo fonte. Para escrever o arquivo teremos que usar um editor de textos, ns usaremos o EDIT do DOS, por ser um editor simples e fcil de usar. Teremos que definir um nome para o

arquivo fonte, este nome pode ter at 8 caracteres e obrigatoriamente a extenso .PRG. Para o nome do arquivo sero aceitos somente letras, nmeros e "_". Deve comear com letra e no pode conter espao em branco. O Clipper por ser uma linguagem feita para DOS, teremos que trabalhar no prompt do MSDOS, para isto voc deve selecionar o boto Iniciar, Programas e depois Prompt do MS-DOS. Vamos criar uma pasta onde iremos gravar os arquivos que sero criados, para isto digite os seguintes comandos: CD\ MD AGENDA CD\AGENDA Agora vamos criar o arquivo fonte do nosso programa, digite: EDIT exerc1.prg O editor aberto. Como primeiro exemplo vamos fazer duas telas com molduras no vdeo, digite os comandos abaixo: CLEAR BORDA = CHR(218) + CHR(196) + CHR(191) + CHR(179) + ; CHR(217) + CHR(196) + CHR(192) + CHR(179) + CHR(176) @ 1,1,24,79 BOX BORDA @ 4,4 CLEAR TO 21,76 @ 4,4 TO 21,76 DOUBLE INKEY(0) CLEAR RETURN Agora temos que gravar (Salvar) o arquivo, pressione as teclas ALT+A, selecione a opo SALVAR e tecle Enter. Pronto j est salvo o arquivo, podemos sair do EDIT, pressione ALT+A novamente e selecione a opo SAIR. Comandos utilizados: Na sintaxe dos comandos descritos abaixo usaremos a seguinte notao sinttica: [ ] - Indica as partes opcionais de um comando < > - Indica as partes obrigatrias de um comando CLEAR Apaga a tela e coloca o cursor na posiao inicial (linha 0 e coluna 0) CLS o mesmo que CLEAR. @ 1,1,24,79 BOX BORDA Desenha uma caixa na tela, da linha 1 coluna 1 at a linha 24 coluna 79. Sintaxe @ , , , BOX Argumentos , , , e definem as coordenadas da caixa. @...BOX desenha uma caixa usando valores de linha de 0 at 24, e coluna de 0 at 79. um string de oito caracteres de borda e um de preenchimento. @ 4,4 CLEAR TO 21,76 Limpa uma regiao retangular da tela, da linha 4 coluna 4 at a linha 21 coluna 76.

Sintaxe @ , [CLEAR [TO , ]] Argumentos e define as coordenadas do canto superior esquerdo. e define as coordenadas do canto inferior direito a ser limpo. @ 4,4 TO 21,76 DOUBLE Desenha uma caixa em linha dupla, da linha 4 coluna 4 at a linha 21 coluna 76. Sintaxe @ , TO , [DOUBLE] Argumentos , , , e definem as coordenadas da caixa. DOUBLE desenha a caixa em linha dupla. Se no for especificado, a caixa desenhada em linha simples. INKEY(0) Espera uma tecla ser pressionada. Sintaxe INKEY([]) --> nCodInkey Argumentos especifica a quantidade de segundos que INKEY() deve esperar por uma tecla. O valor pode ser especificado em incrementos do tamanho de at um dcimo de segundo. Se for especificado zero, o programa pra at que uma tecla seja pressionada. Retorno INKEY() retorna um valor numrico inteiro de -39 at 386, que identifica a tecla pressionada. Caso no seja pressionada tecla nenhuma, INKEY() retorna zero. RETURN Encerra o programa, funo ou procedure. Voltar

Compilando e Linkeditando o programa Agora que j criamos o arquivo fonte temos que compilar o arquivo, este processo vai criar um outro arquivo com o mesmo nome do arquivo fonte, s que com a extenso .OBJ. Este ns chamamos de arquivo objeto. Quando compilamos um arquivo (.prg) o compilador verifica se no h erros no arquivo, se for encontrado algum erro, o compilador apresenta o nome do arquivo e entre parnteses a linha do arquivo onde est o erro, para que possamos corrigir a linha de comando. Comando para compilar o arquivo fonte:

CLIPPER Exemplo: CLIPPER exerc1 Vamos agora criar o arquivo executvel, digite o comando abaixo: RTLINK FI Exemplo: RTLINK FI exerc1 O linkeditor vai criar um outro arquivo, agora com a extenso .EXE (executvel). Voltar

Executando o programa Vamos agora executar o programa, para isto devemos digitar o nome do arquivo executvel, que acabamos de criar, na linha de comando do DOS. Exemplo: EXERC1 Observe que vai ser apresentado duas caixas com molduras no vdeo e se for pressionada alguma tecla o programa finalizado. Voltar

Entrada de dados Para que possamos entrar com dados em um programa teremos que armazenar informaes em memria atravs de constantes que chamamos de variveis. Os conceitos de varivel no Clipper e na matemtica coincidem. No Clipper existem basicamente quatro tipos de variveis: a) variveis numricas; b) variveis alfanumrica (string); c) variveis lgicas; d) variveis data A varivel numrica corresponde a nmeros com at dezenove dgitos, contando pontos e vrgula. A varivel alfanumrica, ou string, corresponde s cadeias de caracteres, incluindo letras, nmeros, caracteres especiais e espaos (at 64 Kbytes). A varivel lgica representa um dos dois estados lgicos possveis: .T. (verdadeiro) ou .F. (falso). A varivel data usada para armazenar datas. O nome da varivel de memria pode ter at 10 caracteres. Somente letras, nmeros e "_" so permitidos. Deve comear com letra e no pode conter espaos em branco. Para criarmos nossas variveis iremos usar o operador de atribuio simples "=", da seguinte forma: =

Exemplo: nValor = 0.00 cNome = SPACE(40) cEmp = "PC TOLEDO SOFTWARE" lCond = .T. dNascto = CTOD(" ") Observe que o valor atribudo a uma varivel de memria defini o tipo de varivel que foi criada. Se for atribudo um nmero a varivel ser numrica, se for espaos em branco (SPACE (40)) ou uma cadeia de caracteres entre aspas a varivel ser alfanumrica, se for .T. ou .F. a varivel ser lgica e se for uma data em branco (CTOD(" ")) a varivel ser data. As variveis alfanumricas ou strings devem ser escritas entre aspas ou apstrofos e as variveis lgicas devem ser escritas entre pontos. Podemos tambm criar uma varivel a partir de uma outra varivel j existente, observe o exemplo abaixo: nValor = 10 nTotal = nValor * 2 cNome = "PAULO CESAR " cNomei = cNome + "TOLEDO" No primeiro exemplo foi criada uma varivel numrica com o valor 10, depois foi criada uma outra varivel (tambm numrica) onde vai ter o seu valor 20, que o resultado de 10 multiplicado por 2. No segundo exemplo foi criada uma varivel alfanumrica com o contedo "PAULO CESAR", depois foi criada uma outra com o contedo "PAULO CESAR TOLEDO", que a concatenao da primeira varivel com a expresso "TOLEDO". A operao entre variveis s pode ser feita com variveis do mesmo tipo, se forem de tipos diferentes ocorrer um erro durante a execuo do programa. Agora que j sabemos criar variveis vamos montar uma tela para digitao de entrada de dados, entre no EDIT e crie um arquivo com o nome de Exerc2.prg e digite os comandos abaixo. CLEAR SET DATE BRITISH SET CENTURY ON SET CONFIRM ON nCodigo = 0 cNome = SPACE(40) cEnd = SPACE(40) dAniver = CTOD(" ") cFone = SPACE(10) cEmail = SPACE(30) BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176) @ 1,1,24,79 BOX BORDA @ 4,4 CLEAR TO 21,76 @ 4,4 TO 21,76 DOUBLE @ 6,30 SAY "AGENDA DE ENDEREOS" @ 8,8 SAY "Cdigo...........:" GET nCodigo PICTURE "999" VALID (nCodigo>0) @ 9,8 SAY "Nome..............:" GET cNome PICTURE "@!" VALID (!EMPTY(cNome)) @ 10,8 SAY "Endereo........:" GET cEnd PICTURE "@!" @ 11,8 SAY "Aniversrio.....:" GET dAniver PICTURE "@D" @ 12,8 SAY "Telefone..........:" GET cFone PICTURE "@R (999)999-9999" @ 13,8 SAY "E-mail..............:" GET cEmail READ CLEAR

RETURN Aps gravar o arquivo compile para ver se no h erros, linkedite para criar o arquivo executvel e depois execute o programa e digite as informaes solicitadas. Comandos utilizados: Apenas os novos comandos sero descritos. SET DATE BRITISH Configura o formato de datas para entrada de dados e exibio em tela, o formato BRITISH o usado em nosso pas (DIA/MES/ANO). SET CENTURY ON Controla a exibio dos dgitos de sculo em datas, preparando seu programa para o prximo milnio. Argumentos ON permite a entrada e exibio dos dgitos de sculo para datas. OFF suprime a entrada e exibio dos dgitos de sculo para datas. SET CONFIRM ON Comuta a tecla de sada necessria para a terminao de GETs. Argumentos ON obrigar o usurio a pressionar uma das teclas de sada para abandonar um GET. OFF permite ao usurio abandonar um GET com a prpria digitao de caracteres, tendo o GET que ser todo preenchido, no havendo a necessidade de ser pressionada uma das teclas de sada. SET CONFIRM determina se uma das teclas de sada ser exigida para abandonar um GET. Se o CONFIRM est OFF, o usurio pode digitar quaisquer caracteres at o fim do GET que o cursor se mover automaticamente para o prximo GET se houver um. Caso no haja um outro GET, o READ terminado. Se, contudo, o CONFIRM estiver ON, uma das teclas de sada deve ser pressionada para abandonar o GET corrente. As teclas de sada mais usadas so: Enter, Seta para cima, Seta para baixo e ESC. CTOD(" ") Converte uma cadeia de caracteres em uma data correspondente Sintaxe CTOD() Argumentos uma cadeia de caracteres que contm nmeros representando o ms, dia, e ano separados por qualquer outro caractere que no um nmero. Os dgitos do ms, dia, e ano devem ser especificados de acordo com o formato indicado pelo SET DATE. Para inicializar uma data vazia para uma entrada de dados, especifique a como sendo uma cadeia de caracteres nula (" "). SPACE(...) Retorna um string de espaos.

Sintaxe SPACE() Argumentos a quantidade de espaos a serem retornados, sendo que o nmero mximo 65.535 (64K). @...SAY Exibe dados em uma linha e coluna especificadas. Sintaxe @ , [SAY [PICTURE ]] Argumentos e sao as coordenadas de linha e coluna da sada. Os valores de linha podem variar entre zero e 24, de coluna entre zero a 79 (coordenadas de vdeo). SAY exibe o resultado de uma expresso de qualquer tipo. PICTURE define a mscara para a sada de exp. @...SAY um comando de tela que exibe os resultados de para tela ou impressora nas coordenadas de linha e coluna especificadas. Ele pode opcionalmente formatar a sada usando a clusula PICTURE. @...SAY usado para criar telas de entrada de dados ou relatrios. @...SAY...GET Cria um novo objeto GET e o coloca em exibiao na tela. Sintaxe @ , [SAY GET [PICTURE ] [VALID ] Argumentos e so as coordenadas de linha e coluna para a operao. Se a clasula SAY est presente, especificam as coordenadas para o SAY, e o GET exibido a direita deste. Caso a sada esteja alm da extenso visvel ela no aparecer. SAY exibe o valor de nas coordenadas especificadas. GET define o nome da varivel de qualquer tipo de dados a ser editada. Ela pode ser caractere, data, numrica ou lgica. PICTURE especifica uma mscara para exibio e as regras para edio do GET. No exemplo acima est sendo usado: "999" que para nmeros, "@D" que para datas, "@R(999)999-9999" que para telefones e "@!" para caracteres em maisculos. VALID especifica uma expresso que deve ser satisfeita antes que o cursor possa deixar a regio de edio do GET corrente. Se retorna falso (.F.), o controle retorna ao GET e o usurio no pode deix-lo at que retorne verdadeiro (.T.) ou o usurio aperte Esc. No exemplo acima est sendo usado: !EMPTY(...) que vai retornar verdadeiro (.T.) somente se o campo estiver preenchido, se estiver vazio retorna falso (.F.).

EMPTY(...) Determina se o resultado de uma expresso vazio. Sintaxe EMPTY() Argumentos uma expresso de qualquer tipo de dados. EMPTY() retorna verdadeiro (.T.) se a expresso resultar em um valor vazio; do contrrio, ela retorna falso (.F.). No exemplo acima foi utilizado antes da funo EMPTY o operador ! que retorna o inverso lgico, isto , se a funo EMPTY retornar verdadeiro (.T.) alterado para o inverso falso (.F.) e vice-versa. READ Ativa edio em tela usando objetos GET, este comando vem sempre depois do ltimo comando @...SAY...GET. Voltar

Estrutura de controle de repetio e condio Normalmente, a execuo de um arquivo de comandos (programa) realiza-se de uma linha para a outra imediatamente seguinte. Os comandos de controle so utilizados para alterar tal seqncia ou fazer com que a execuo de determinados nmeros de linhas de programa seja repetida certo nmero de vezes. Todos os comandos de controle para poder funcionar necessitam de uma condio, dependendo do valor retornado pela condio o comando de controle desvia a execuo do programa para uma determinada linha de comando. Entre no EDIT e crie um arquivo com o nome de Exerc3.prg e digite os comandos abaixo. CLEAR SET DATE BRITISH SET CENTURY ON SET CONFIRM ON BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176) @ 1,1,24,79 BOX BORDA DO WHILE .T. nCodigo = 0 cNome = SPACE(40) cEnd = SPACE(40) dAniver = CTOD(" ") cFone = SPACE(10) cEmail = SPACE(30) cFim = "S" @ 4,4 CLEAR TO 21,76 @ 4,4 TO 21,76 DOUBLE @ 6,30 SAY "AGENDA DE ENDEREOS" @ 8,8 SAY "Cdigo...........:" GET nCodigo PICTURE "999" VALID (nCodigo>0) @ 9,8 SAY "Nome..............:" GET cNome PICTURE "@!" VALID (!EMPTY(cNome)) @ 10,8 SAY "Endereo........:" GET cEnd PICTURE "@!"

@ 11,8 SAY "Aniversrio.....:" GET dAniver PICTURE "@D" @ 12,8 SAY "Telefone..........:" GET cFone PICTURE "@R (999)999-9999" @ 13,8 SAY "E-mail..............:" GET cEmail @ 15,8 SAY "Deseja Continuar?...:" GET cFim PICTURE "@!" VALID (cFim $ "SN") READ IF cFim = "N" EXIT ELSE LOOP ENDIF ENDDO CLEAR RETURN Aps gravar o arquivo compile para ver se no h erros, linkedite para criar o arquivo executvel e depois execute o programa e observe como o programa vai trabalhar conforme as condies. Comandos utilizados: Apenas os novos comandos sero descritos. DO WHILE Executa um bloco enquanto uma condio verdadeira. Sintaxe DO WHILE ... [EXIT] ... [LOOP] ... END[DO] Argumentos a expresso lgica de controle do DO WHILE, se esta condio for verdadeira (.T.) os comandos dentro do DO WHILE executados, caso contrrio falso (.F.), a instruo desviada para a linha imediatamente seguinte ao ENDDO. EXIT incondicionalmente desvia o controle de dentro de um DO WHILE para a instruo imediatamente seguinte ao ENDDO. EXIT usado geralmente para encerrar o DO WHILE. LOOP desvia o controle para o incio do DO WHILE mais recente. DO WHILE...ENDDO uma estrutura de controle que executa um bloco repetitivamente, enquanto for avaliada como verdadeira (.T.). Quando a condio avaliada como verdadeira (.T.), o controle passa para dentro da estrutura e assim continua at que um EXIT, LOOP, ou ENDDO seja encontrado. ENDDO retorna o controle para o incio do DO WHILE e o processo se repete. Se um EXIT for encontrado, o DO WHILE encerrado. Se um LOOP for encontrado, controle desvia para o mais recente DO WHILE. Se a condio avaliada como falsa (.F.), a estrutura DO WHILE termina e o controle passa para a instruo imediatamente seguinte ao ENDDO. IF...ELSE...ENDIF Executa um dentre vrios blocos de instrues. Sintaxe

IF ... [ELSEIF ] ... [ELSE] ... END[IF] Argumentos uma expresso lgica de controle. Se ela avaliada como verdadeira (.T.), o bloco seguinte executado at que um ELSEIF, ELSE ou ENDIF seja encontrado. ELSEIF identifica um bloco a ser executado caso seja avaliada como verdadeira (.T.) e todas as condies IF e ELSEIF anteriores foram avaliadas como falsas (.F.). Qualquer nmero de ELSEIFs pode ser especificado dentro de uma estrutura IF...ENDIF. ELSE identifica o bloco a ser executado se todos os IF e ELSEIF preliminares foram avaliados como falso (.F.). No exemplo se voc digitar "N" no campo "Deseja Continuar?" o EXIT executado saindo da estrutura DO WHILE e encerrando o programa, mas se digitar "S" o programa retornado ao comeo do DO WHILE. $ O operador $ um operador relacional binrio que executa uma busca sensvel a maiscula e minscula e retorna verdadeiro (.T.) se um caractere ou uma cadeia de caracteres for encontrado dentro de uma outra cadeia de caracteres. No exemplo o operador $ est sendo usado dentro do VALID de um GET, para verificar se vai ser pressionado somente as teclas "S" e "N", qualquer outra tecla ser validado como falso (.F.) e no sendo aceito pelo GET. Tente digitar outras letras para ver o que acontece. Voltar

Criando um menu de opes Na maiorias dos programas as operaes so escolhidas atravs de um menu que tem vrias opes. O usurio vai selecionar dentre as opes a que ele quer executar. O Clipper dispe tambm deste recurso, que veremos a seguir. Entre no EDIT e crie um arquivo com o nome de Exerc4.prg e digite os comandos abaixo. CLEAR SET MESSAGE TO 21 CENTER SET WRAP ON BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176) @ 1,1,24,79 BOX BORDA @ 20,29 TO 22,50 @ 15,25 TO 17,54 @ 16,27 SAY "Voc Escolheu ->" nOp = 1 DO WHILE .T. @ 5,33 TO 11,45

@ 06,34 PROMPT " INCLUSO " MESSAGE " INCLUSO DE DADOS " @ 07,34 PROMPT " ALTERAO " MESSAGE " ALTERAO DE DADOS " @ 08,34 PROMPT " CONSULTA " MESSAGE " CONSULTA DE DADOS " @ 09,34 PROMPT " EXCLUSO " MESSAGE " EXCLUSO DE DADOS " @ 10,34 PROMPT " FINALIZA " MESSAGE " SAIR DO PROGRAMA " MENU TO nOp DO CASE CASE nOp = 1 @ 16,44 SAY "INCLUSO" CASE nOp = 2 @ 16,44 SAY "ALTERAO" CASE nOp = 3 @ 16,44 SAY "CONSULTA" CASE nOp = 4 @ 16,44 SAY "EXCLUSO" CASE nOp = 5 @ 16,44 SAY "FINALIZA" INKEY(0) EXIT ENDCASE ENDDO CLEAR RETURN Grave o arquivo, compile para ver se no h erros, linkedite para criar o arquivo executvel e depois execute o programa. Atravs das setas cursoras (para cima e para baixo) voc navega entre as opes, observe que a mensagem correspondente a opo apresentada em um quadro logo abaixo do menu. Se voc selecionar com o Enter uma das opes o programa vai mostrar qual foi a opo escolhida. Comandos utilizados: Apenas os novos comandos sero descritos. SET MESSAGE TO 21 CENTER Configura a linha onde vai aparecer a mensagem de @...PROMPT Sintaxe SET MESSAGE TO [CENTER] Argumentos especifica a linha de mensagem. CENTER centraliza a mensagem na linha especificada. SET WRAP ON Comuta rotao em Menus. Sintaxe SET WRAP ON | OFF Argumentos ON permite barra luminosa rotacionar quando estiver navegando em um menu de barra. OFF suprime a rotao num menu de barra.

SET WRAP comuta a rotao da barra luminosa em um @...PROMPT do primeiro para o ltimo item e vice-versa. Quando WRAP est ON e o ltimo item est iluminado, Cursor para direita ou Cursor para baixo movem a barra luminosa para o primeiro item. Tambm quando o primeiro item de menu est iluminado, Cursor para esquerda ou Cursor para cima movem a barra para o ltimo item. Quando WRAP est OFF, pressionar Cursor para cima ou Cursor para esquerda no primeiro item ou Cursor para baixo ou Cursor para direita no ltimo item, no causam nenhuma ao. @...PROMPT Exibe um item de menu e define uma mensagem. Sintaxe @ , PROMPT [MESSAGE ] Argumentos e so as coordenadas de linha e coluna para exibir o item de menu. Valores de linha esto na faixa de zero at 24 e de coluna de zero at 79. o string com o item de menu a ser exibido. define a mensagem a ser exibida cada vez que o item corrente iluminado. @...PROMPT a poro exibidora de sistema de menu de barra luminosa do Clipper. Cada @...PROMPT exibe um item de menu e define uma mensagem associada a ser exibida na linha definida em SET MESSAGE. O menu de barra luminosa invocado com MENU TO. Os itens de menu podem ser exibidos na tela em qualquer ordem e configurao de linha e coluna. MENU TO, entretanto, navega na lista de itens de menu corrente na ordem em que estes foram definidos. MENU TO Executa um menu de barra luminosa para PROMPTs definidos. Sintaxe MENU TO Argumentos o nome da varivel qual ser atribuda o resultado da seleo de menu. Esta varivel tem que ser criada previamente, o seu valor inicial vai determinar o primeiro PROMPT sobre o qual ficar a barra luminosa. O comando MENU TO o mecanismo de seleo para o sistema de menus de barra luminosa do Clipper. Antes de chamar o comando MENU TO, defina primeiro os PROMPTS do menu e mensagens associadas com uma srie de comandos @...PROMPT. Depois, ative o menu com MENU TO . DO CASE Executa um de vrios blocos de declaraes. Sintaxe DO CASE CASE

... [CASE ] ... [OTHERWISE] ... END[CASE] Argumentos CASE define um bloco de declaraes para executar caso avaliada como verdadeira (.T.). OTHERWISE define um bloco de declaraes para executar caso nenhum dos CASE seja verdadeiro (.T.). DO CASE...ENDCASE uma estrutura de controle que executa um de vrios blocos de declaraes dependendo de qual das condies associadas seja verdadeira (.T.). Ele trabalha desviando a execuo para as declaraes seguintes ao primeiro CASE que for verdadeiro (.T.). Execuo continua at que o prximo CASE, OTHERWISE ou ENDCASE seja encontrado. Controle ento desviado para a primeira instruo seguinte ao ENDCASE. Se nenhuma das condies CASE for avaliada como verdadeira (.T.), as declaraes seguintes ao OTHERWISE so executadas at que seja encontrado o ENDCASE. Caso no seja especificado um OTHERWISE, o controle desvia para a instruo em seguida ao ENDCASE. Voltar

Criando arquivo de dados Junto com o Clipper vem um programa chamado DBU que serve para criar a estrutura de um arquivo de dados. Para executar o DBU basta digitar DBU e pressionar a tecla enter. Surgir uma tela com um menu de barras na sua parte superior. As opes do menu podem ser acionadas atravs do pressionamento da tecla de funo correspondente. Nesse instante, surgir um submenu com vrias opes. Atravs das setas para cima e para baixo voc seleciona uma das subopes e teclando Enter para ativ-la. Teclas utilizadas no DBU: F1 - Help: Aciona uma tela de Help sensitiva ao contexto. F2 - Open: Permite a abertura de um arquivo de dados, ndice ou view. F3 - Create: Permite a criao de arquivos de dados e ndices. F4 - Save: Grava a estrutura atual. F5 - Browse: Permite a visualizao dos registros do arquivo de dados. F6 - Utility: Menu de comandos Utilitrios. F7 - Move: Permite a movimentao pelos registros do arquivo. F8 - Set: Permite o estabelecimento de filtros, relaes e campos. Para criar um arquivo de dados voc deve pressionar a tecla F3 e selecionar a opo DATABASE. Depois voc ter que informar a estrutura do arquivo que ser criado, voc deve informar: Field Name - Nome do campo. Somente letras, nmeros e "_" so permitidos. Deve comear com letra e no pode conter espao em branco. Type - Tipo de campo. (C)aractere, (D)ata, (L)gico, (M)emo ou (N)mero. Width - Tamanho do campo. Data (8), Caractere (at 64kb), Lgico (1), Memo (at 64kb) e

Nmero (19) Dec - Casas decimais. Somente para tipo nmero. Aps informar todos os dados de um campo, a seta para baixo abre mais uma linha de digitao. O arquivo que iremos criar tem a seguinte estrutura: Field Name CODIGO NOME ENDERECO ANIVER FONE EMAIL Type N C C D C C Width 3 40 40 8 10 30 Dec 0

Aps digitar toda a estrutura, voc deve pressionar a tecla F4 e selecionar a opo STRUCT para grav-la. Depois informe o nome do arquivo: AGENDA Pressione a tecla Enter duas vezes. Pronto, voc criou um arquivo de dados que futuramente ir armazenar os dados digitados em nosso programa. Voltar

Gravando em arquivo de dados Todas as informaes armazenadas em variveis de memria so perdidas assim que voc sair do programa ou da rotina que as criou. Para no perder estas informaes voc pode grav-las em arquivos de dados. Com as informaes gravadas voc poder: recuperar dados do arquivo a qualquer momento; modificar a seqncia dos dados, intercalando-os ou classificando-os da forma desejada; executar clculos com os dados; mostrar os resultados do processamento atravs de relatrios em impressora ou atravs do monitor de vdeo; modificar, excluir ou consultar os dados gravados. Entre no EDIT e crie um arquivo com o nome de Exerc5.prg e digite os comandos abaixo. CLEAR SET DATE BRITISH SET CENTURY ON SET CONFIRM ON BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176) SELECT 1 USE AGENDA IF !FILE("INDIC1.NTX") INDEX ON STR(CODIGO,3,0) TO INDIC1 ENDIF SET INDEX TO INDIC1 SET COLOR TO "R/W" @ 1,1,24,79 BOX BORDA nCodigo = 0 DO WHILE .T. cNome = SPACE(40)

cEnd = SPACE(40) dAniver = CTOD(" ") cFone = SPACE(10) cEmail = SPACE(30) cGrav = "S" SET COLOR TO "N/B" @ 4,4 CLEAR TO 21,76 @ 4,4 TO 21,76 DOUBLE @ 6,30 SAY "AGENDA DE ENDEREOS" @ 8,8 SAY "Cdigo...........:" GET nCodigo PICTURE "999" VALID (nCodigo>0) @ 9,8 SAY "Nome..............:" GET cNome PICTURE "@!" VALID (!EMPTY(cNome)) @ 10,8 SAY "Endereo........:" GET cEnd PICTURE "@!" @ 11,8 SAY "Aniversrio.....:" GET dAniver PICTURE "@D" @ 12,8 SAY "Telefone..........:" GET cFone PICTURE "@R (999)999-9999" @ 13,8 SAY "E-mail..............:" GET cEmail @ 15,8 SAY "Deseja Gravar?...:" GET cGrav PICTURE "@!" VALID (cGrav $ "SN") READ IF LASTKEY( ) = 27 EXIT ENDIF IF cGrav = "S" APPEND BLANK REPLACE CODIGO WITH nCodigo, NOME WITH cNome, ENDERECO WITH cEnd REPLACE ANIVER WITH dAniver, FONE WITH cFone, EMAIL WITH cEmail nCodigo = nCodigo + 1 ENDIF ENDDO CLOSE DATABASE CLEAR RETURN Grave o arquivo, compile para ver se no h erros, linkedite para criar o arquivo executvel e depois execute o programa. Digite as informaes, se no campo "Deseja Gravar?" voc informar "S", todos os dados digitados sero gravados no arquivo AGENDA.DBF. Faa vrias incluses para testar o programa, e anote as informaes que forem gravadas, principalmente os campo "Cdigo", para facilitar as pesquisas e alteraes que faremos nos prximos exerccios. Para sair do programa pressione a tecla ESC. Comandos utilizados: Apenas os novos comandos sero descritos. SELECT O comando SELECT usado para selecionar uma rea de trabalho onde ser aberto um arquivo de dados. Referncias a reas de trabalho com o comando SELECT podem ser feitas atravs de nmeros, de 0 a 250. Para cada arquivo de dados aberto voc ter que selecionar uma rea de trabalho diferente. rea de trabalho zero refere-se primeira rea de trabalho vazia. USE USE abre um arquivo de dados (.dbf), seu arquivo memo associado (.dbt), e opcionalmente ndices associados(.ntx) na rea corrente ou na prxima rea disponvel. Sintaxe: USE [ [INDEX ] [ALIAS ] Argumentos o nome do arquivo a ser aberto, o qual pode ser especificado literalmente

ou como expresso caractere entre parnteses. INDEX especifica o(s) nome(s) de at 15 ndices a serem abertos na rea corrente. Cada ndice pode ser especificado literalmente ou como expresso caractere entre parnteses, sendo que o primeiro ndice da lista torna-se o ndice de controle. ALIAS o nome a ser associado rea de trabalho quando o arquivo de dados aberto. Se esta clusula no especificada, o alias assumido o nome do arquivo. No exemplo acima est sendo aberto o arquivo AGENDA.DBF, onde iremos gravar os dados digitados. FILE( ) FILE() uma funo de tratamento de ambiente utilizada para determinar se encontrado algum arquivo que corresponda a um padro de especificao de arquivo. FILE() procura no diretrio especificado e em um path explicitamente especificado. Caso no seja especificado path, FILE() pesquisa no diretrio padro Clipper corrente e depois no path Clipper. Em nenhuma circunstncia o path DOS pesquisado. Observe tambm que a funo FILE() no reconhece arquivos de sistemas ou escondidos em sua pesquisa. FILE() retorna verdadeiro (.T.) caso haja algum arquivo que corresponda ao padro ; caso contrrio, ela retorna falso (.F.). No exemplo acima foi utilizado antes da funo FILE( ) o operador ! que retorna o inverso lgico, isto , se a funo FILE( ) encontrar o arquivo INDC1.NTX retornar verdadeiro (.T.), que alterado para o inverso falso (.F.) e vice-versa. INDEX ON...TO... Cria um arquivo de ndices que serve para ordenar o arquivo de dados (.DBF). Sintaxe INDEX ON TO Argumentos uma expresso que retorna o valor chave a ser colocado no ndice para cada registro na rea de trabalho corrente. pode ser do tipo caractere, data, lgico, ou numrico. O tamanho mximo da expresso da chave de indexao de 250 caracteres. TO especifica o nome do arquivo de ndices a ser criado. O nome do arquivo pode ser especificado literalmente ou por expresso caractere entre parnteses. Normalmente, a extenso de arquivo padro (.ntx). O comando INDEX ON cria um arquivo que contm um ndice dos registros do arquivo de dados corrente baseado em . Quando o arquivo de ndices usado, os registros do arquivo de dados aparecem na ordem da expresso chave, embora o ndice no altere a ordem fsica dos registros dentro do arquivo de dados. O comando INDEX ordenas as chaves de caractere de acordo com o valor ASCII de cada caractere dentro da cadeia, valores numricos em ordem numrica, ordem cronolgica dos valores de datas, considerando datas em branco como valores baixos, e valores lgicos classificados com valor verdadeiro (.T.) considerados como valores altos. No exemplo acima estamos indexando o arquivo pelo Cdigo. STR( ) Converte um valor numrico para uma cadeia de caracteres. Sintaxe

STR(,[],[]) Argumentos o nmero que ser convertido para caractere. o tamanho da cadeia de caracteres a ser retornada incluindo dgitos decimais, ponto decimal, e sinal. a quantidade de casas decimais a serem retornadas. SET INDEX TO O comando SET INDEX utilizado para abrir arquivos de ndices para o arquivo de dados corrente, este comando vai ordenar os registros do arquivo de dados de acordo com chave feita no comando INDEX ON... TO... SET COLOR TO Define cores de tela. Sintaxe SET COLOR TO [ [, ][, ][, ] [, ]] Argumentos a cor utilizada para escrever em toda a tela do vdeo, incluindo a utilizao de todos os comandos e funes quando exibidas na tela. Isto inclui comandos como @...PROMPT, @...SAY, e ?; e funes como ACHOICE(), DBEDIT(), e MEMOEDIT(). a cor utilizada para configurar a exibio das barras luminosas. Este argumento influi sobre a barra luminosa de seleo sobre os GETs com INTENSITY ON, o comando MENU TO, a funo DBEDIT(), e ACHOICE(). a cor utilizada para configurar a cor que ser colocada na rea em torno da tela de vdeo, que inacessvel para a utilizao normal dos programas que escrevem algo na tela. Esta configurao somente funciona com adaptadores de vdeo do tipo CGA, mas nao com adaptadores EGA ou VGA. atualmente no suportada por mquinas nas quais a Nantucket no prov drivers apropriados. Esta configurao suportada somente para propsitos de compatibilidade. o par de cores utilizado para configurar uma determinada entrada de dados exibindo o GET corrente na cor de destaque definida, enquanto que os outros GETs so mostrados nesta cor. Observao: Ver Tabela de cores e atributos LASTKEY( ) Retorna o valor da ltima tecla pressionada no teclado. LASTKEY() retorna um nmero de -39 a 386 que identifica o valor INKEY() da ltima tecla extrada do buffer de teclado. No exemplo acima a funo LASTKEY( ) verifica se foi pressionada a tecla ESC que corresponde ao nmero 27. APPEND BLANK Adiciona um registro vazio ao arquivo de dados corrente para que possamos gravar os

dados digitados. APPEND BLANK adiciona um registro vazio no fim do arquivo corrente e o torna o registro corrente. Os novos valores de campos so inicializados em valores vazios para cada tipo de dado. A campos caractere so atribudos espaos, campos numricos so inicializados com zero, campos lgicos so inicializados com falso (.F.), e campos data so atribudos CTOD(""). REPLACE Grava nos campos do arquivo de dados os valores atribudos as variveis de memria. Sintaxe REPLACE WITH [, WITH ...] Argumentos o nome do campo do arquivo de dados qual ser atribudo novo valor. o valor a ser atribudo a . CLOSE DATABASE Fecha um conjunto especfico de arquivos. DATABASES Fecha todos os arquivos de dados abertos, memos e ndices em todas as reas, e libera filtros e relaes ativas. Voltar

Pesquisando registros no arquivo de dados Para poder pesquisar os registros que foram gravados em um arquivo de dados necessrio que este arquivo esteja indexado, isto , tenha algum arquivo de ndice ativo junto com o arquivo de dados. Vamos montar um programa para pesquisar os registros do arquivo de dados AGENDA.DBF. Entre no EDIT e crie um arquivo com o nome de Exerc6.prg e digite os comandos abaixo. CLEAR SET DATE BRITISH SET CENTURY ON SET CONFIRM ON BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176) SELECT 1 USE AGENDA IF !FILE("INDIC1.NTX") INDEX ON STR(CODIGO,3,0) TO INDIC1 ENDIF SET INDEX TO INDIC1 SET COLOR TO "R/W" @ 1,1,24,79 BOX BORDA DO WHILE .T. nCodigo = 0 cSai = "N" SET COLOR TO "N/B"

@ 4,4 CLEAR TO 21,76 @ 4,4 TO 21,76 DOUBLE @ 6,30 SAY "AGENDA DE ENDEREOS" @ 8,8 SAY "Cdigo...........:" GET nCodigo PICTURE "999" VALID (nCodigo>0) READ IF LASTKEY( ) = 27 EXIT ENDIF GO TOP SEEK STR(nCodigo,3,0) IF FOUND( ) @ 9,8 SAY "Nome..............: " + NOME @ 10,8 SAY "Endereo........: " + ENDERECO @ 11,8 SAY "Aniversrio.....: " + DTOC(ANIVER) @ 12,8 SAY "Telefone..........: " + FONE @ 13,8 SAY "E-mail..............: " + EMAIL ELSE TONE(400,3) @ 10,8 SAY "NO ENCONTRADO" ENDIF @ 15,8 SAY "Deseja Sair?...:" GET cSai PICTURE "@!" VALID (cSai $ "SN") READ IF cSai = "S" EXIT ENDIF ENDDO CLOSE DATABASE CLEAR RETURN Grave o arquivo, compile para ver se no h erros, linkedite para criar o arquivo executvel e depois execute o programa. Digite o Cdigo dos registro que foram gravados no exerccio anterior (espero que voc tenha anotado) para pesquisar estes registros. Depois digite um Cdigo que voc tem certeza que no existe no arquivo e observe a reao do programa. Comandos utilizados: Apenas os novos comandos sero descritos. GO Move o ponteiro de registro para um registro especfico no arquivo de dados. Sintaxe GO | BOTTOM | TOP Argumentos especifica o nmero do registro destino. BOTTOM especifica o ltimo registro na rea de trabalho corrente. TOP especifica o primeiro registro na rea de trabalho corrente. O comando GO posiciona o ponteiro num registro especificado na rea de trabalho corrente. O registro pode ser especificado atravs de seu nmero ou como registro incio ou fim do arquivo. Se a nova posio incio (TOP) e h um ndice ativo, o ponteiro de registros vai at o primeiro registro do ndice. Caso a nova posio seja fim (BOTTOM) e haja um ndice ativo, o ponteiro de registros vai para o ltimo registro do ndice. Antes de qualquer procura em um arquivo

de dados indexado necessrio voltar para o primeiro registro do arquivo de dados. SEEK Pesquisa um ndice atravs de um valor chave especificado. Sintaxe SEEK Argumentos uma expresso qual a chave de indexao dever corresponder. O comando SEEK pesquisa o ndice de controle que comea com a primeira chave e continua at que seja encontrada correspondncia ou at que haja um valor chave maior do que o argumento de pesquisa. Caso haja correspondncia, o ponteiro de registro posicionado no nmero do registro encontrado no ndice. No exemplo acima, o comando SEEK procura nos registros gravados um que tenha o cdigo que voc digitou. FOUND( ) Determina se a operao de pesquisa anterior foi bem sucedida. Sintaxe FOUND() --> lSucesso Retorno FOUND() retorna verdadeiro (.T.) se o ltimo comando de pesquisa foi bem sucedido; do contrrio, ela retorna falso (.F.). FOUND() uma funo de tratamento de banco de dados utilizada para determinar se uma operao de pesquisa (isto , FIND, LOCATE, CONTINUE, SEEK, SET RELATION) foi bem sucedida antes que o prximo passo no programa seja executado. TONE( ) Aciona o alto-falante por uma durao e freqncia especificadas. Sintaxe TONE(, ) Argumentos um valor numrico positivo que indica a freqncia do som a ser produzido. um valor numrico positivo que indica a durao do som. Voltar

Alterando registros no arquivo de dados J fizemos vrias incluso de informaes no arquivo de dados nos exerccios anteriores, agora vamos alterar estes registros.

Entre no EDIT e crie um arquivo com o nome de Exerc7.prg e digite os comandos abaixo. CLEAR SET DATE BRITISH SET CENTURY ON SET CONFIRM ON BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176) SELECT 1 USE AGENDA IF !FILE("INDIC1.NTX") INDEX ON STR(CODIGO,3,0) TO INDIC1 ENDIF SET INDEX TO INDIC1 SET COLOR TO "R/W" @ 1,1,24,79 BOX BORDA DO WHILE .T. nCodigo = 0 cAlt = "N" SET COLOR TO "N/B" @ 4,4 CLEAR TO 21,76 @ 4,4 TO 21,76 DOUBLE @ 6,30 SAY "AGENDA DE ENDEREOS" @ 8,8 SAY "Cdigo...........:" GET nCodigo PICTURE "999" VALID (nCodigo>0) READ IF LASTKEY( ) = 27 EXIT ENDIF GO TOP SEEK STR(nCodigo,3,0) IF !FOUND( ) TONE(400,3) @ 10,8 SAY "NO ENCONTRADO" LOOP ENDIF cNome = NOME cEnd = ENDERECO dAniver = ANIVER cFone = FONE cEmail = EMAIL @ 9,8 SAY "Nome..............:" GET cNome PICTURE "@!" VALID (!EMPTY(cNome)) @ 10,8 SAY "Endereo........:" GET cEnd PICTURE "@!" @ 11,8 SAY "Aniversrio.....:" GET dAniver PICTURE "@D" @ 12,8 SAY "Telefone..........:" GET cFone PICTURE "@R (999)999-9999" @ 13,8 SAY "E-mail..............:" GET cEmail @ 15,8 SAY "Alterar?...:" GET cAlt PICTURE "@!" VALID (cAlt $ "SN") READ IF cAlt = "S" REPLACE NOME WITH cNome, ENDERECO WITH cEnd REPLACE ANIVER WITH dAniver, FONE WITH cFone, EMAIL WITH cEmail ENDIF ENDDO CLOSE DATABASE CLEAR RETURN Grave o arquivo, compile para ver se no h erros, linkedite para criar o arquivo executvel e depois execute o programa. Digitando um cdigo j cadastrado o programa apresenta todos os

campos para que voc possa fazer alguma alterao nos dados que foram gravados no arquivo. Para sair do programa pressione a tecla ESC na hora de digitar o "Cdigo". Comandos utilizados: Todos os comandos usados j foram vistos. Voltar

Excluindo registros no arquivo de dados Vamos supor que voc brigou com um dos seus amigos e gostaria de excluir os seus dados da sua Agenda de Endereos. Para isto, temos que primeiro procurar qual o registro que queremos excluir e depois atravs de uma confirmao excluir o registro. Entre no EDIT e crie um arquivo com o nome de Exerc8.prg e digite os comandos abaixo. CLEAR SET DATE BRITISH SET CENTURY ON SET CONFIRM ON BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176) SELECT 1 USE AGENDA IF !FILE("INDIC1.NTX") INDEX ON STR(CODIGO,3,0) TO INDIC1 ENDIF SET INDEX TO INDIC1 SET COLOR TO "R/W" @ 1,1,24,79 BOX BORDA DO WHILE .T. nCodigo = 0 cExc = "N" cRec = "S" SET COLOR TO "N/B" @ 4,4 CLEAR TO 21,76 @ 4,4 TO 21,76 DOUBLE @ 6,30 SAY "AGENDA DE ENDEREOS" @ 8,8 SAY "Cdigo...........:" GET nCodigo PICTURE "999" VALID (nCodigo>0) READ IF LASTKEY( ) = 27 EXIT ENDIF GO TOP SEEK STR(nCodigo,3,0) IF !FOUND( ) TONE(400,3) @ 10,8 SAY "NO ENCONTRADO" LOOP ENDIF @ 9,8 SAY "Nome..............: " + NOME @ 10,8 SAY "Endereo........: " + ENDERECO @ 11,8 SAY "Aniversrio.....: " + DTOC(ANIVER) @ 12,8 SAY "Telefone..........: " + FONE @ 13,8 SAY "E-mail..............: " + EMAIL IF DELETED( )

TONE(400,3) @ 15,8 SAY "Registro j Excludo, Recuperar?...:" GET cRec PICT "!" VALID (cRec $ "SN") READ IF cRec = "S" RECALL ENDIF ELSE @ 15,8 SAY "Excluir Registro?...:" GET cExc PICTURE "@!" VALID (cExc $ "SN") READ IF cExc = "S" DELETE ENDIF ENDIF ENDDO PACK CLOSE DATABASE CLEAR RETURN Grave o arquivo, compile para ver se no h erros, linkedite para criar o arquivo executvel e depois execute o programa. Agora digite o Cdigo do registro que voc quer excluir e depois confirme a excluso. Observe que se voc informar o cdigo de algum registro j excludo o programa pergunta se voc quer recuperar este registro. Para sair do programa pressione a tecla ESC na hora de digitar o "Cdigo". Comandos utilizados: Apenas os novos comandos sero descritos. DELETED( ) Esta funo retorna verdadeiro (.T.) se o registro corrente est marcado para para eliminao (se j foi excludo); caso contrrio, retornar falso (.F.). RECALL O comando RECALL recupera registros marcados para eliminao na rea de trabalho corrente. o inverso do comando DELETE. Um registro que foi recuperado pelo comando RECALL no ser mais excludo. DELETE Marca os registros para eliminao. Este comando vai marcar quais os registro que sero excludos futuramente pelo comando PACK. PACK Quando voc utiliza o comando PACK, todos os registros marcados para eliminao so removidos do arquivo de dados corrente, o espao fsico ocupado pelos registros eliminados recuperado, e todos os ndices ativos na rea de trabalho corrente so atualizados. Voltar

Criando relatrios Para que voc obtenha informaes sobre os registros do arquivo de dados do programa AGENDA de uma forma mais abrangente, voc ter que criar um relatrio que fornea todas as informaes que voc necessita. importante antes de comear a criar o relatrio planejar o layout do relatrio, ou seja, quais informaes devem aparecer, qual ser a sua disposio no papel, qual ser o cabealho e rodap, que clculos sero realizados, nmero de linhas a serem impressas, etc.

Entre no EDIT e crie um arquivo com o nome de Exerc9.prg e digite os comandos abaixo. CLEAR SET DATE BRITISH SET CENTURY ON SET CONFIRM ON SET DELETED ON BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176) SELECT 1 USE AGENDA IF !FILE("INDIC1.NTX") INDEX ON STR(CODIGO,3,0) TO INDIC1 ENDIF SET INDEX TO INDIC1 SET COLOR TO "R/W" @ 1,1,24,79 BOX BORDA DO WHILE .T. nCodigoi = 0 nCodigof = 0 cImp = "N" SET COLOR TO "N/B" @ 4,4 CLEAR TO 21,76 @ 4,4 TO 21,76 DOUBLE @ 6,30 SAY "LISTA DE ENDEREOS" @ 8,8 SAY "Cdigo Inicial....:" GET nCodigoi PICTURE "999" VALID (nCodigoi>0) READ IF LASTKEY( ) = 27 EXIT ENDIF GO TOP SEEK STR(nCodigoi,3,0) IF !FOUND( ) TONE(400,3) @ 8,32 SAY "NO CADASTRADO" INKEY(0) LOOP ENDIF @ 8,32 SAY NOME @ 9,8 SAY "Cdigo Final......:" GET nCodigof PICTURE "999" VALID (nCodigof>=nCodigoi) READ IF LASTKEY( ) = 27 EXIT ENDIF GO TOP SEEK STR(nCodigof,3,0) IF !FOUND( ) TONE(400,3) @ 9,32 SAY "NO CADASTRADO" INKEY(0) LOOP ENDIF @ 9,32 SAY NOME @ 11,8 SAY "Confirma impresso?...:" GET cImp PICTURE "@!" VALID (cImp $ "SN") READ IF LASTKEY( ) = 27 EXIT

ENDIF IF cImp = "S" DO WHILE .T. IF !ISPRINTER( ) TONE(400,3) @ 13, 8 SAY "PREPARE A IMPRESSORA - Pressione qualquer tecla" tek=INKEY(0) IF tek=27 EXIT ENDIF LOOP ENDIF SET PRINTER TO LPT1 SET DEVICE TO PRINTER GO TOP SEEK STR(nCodigoi,3,0) vcab=.T. DO WHILE !EOF( ) IF CODIGO > nCodigof EXIT ENDIF IF vcab @ 00,00 SAY "NOME DA SUA EMPRESA" @ 01,00 SAY "AGENDA DE ENDERECO" @ 02,00 SAY REPLICATE("-",80) vcab = .F. ENDIF @ PROW( )+1,02 SAY "Codigo.......:" @ PROW( ) , 17 SAY CODIGO PICT "999" @ PROW( ) , 22 SAY "Nome..:" @ PROW( ) , 30 SAY NOME PICT "@!" @ PROW( )+1,02 SAY "Endereco......:" @ PROW( ) , 17 SAY ENDERECO PICT "@!" @ PROW( )+1,02 SAY "Aniversario..:" @ PROW( ) , 17 SAY ANIVER PICT "@D" @ PROW( ) , 29 SAY "Telefone..:" @ PROW( ) , 41 SAY FONE PICT "@R (999)999-9999" @ PROW( )+1,02 SAY "E-mail.......:" @ PROW( ) , 17 SAY EMAIL @ PROW( )+1,00 SAY REPLICATE("-",80) IF PROW( ) > 50 vcab = .T. ENDIF SKIP ENDDO EJECT SET DEVICE TO SCREEN SET PRINTER TO EXIT ENDDO ENDIF ENDDO CLOSE DATABASE CLEAR RETURN Grave o arquivo, compile para ver se no h erros, linkedite para criar o arquivo executvel e depois execute o programa. Para filtrar apenas alguns registros do arquivo de dados solicitado

o "Cdigo Inicial" e o "Cdigo Final", isto , sero impressos somente os registros que o cdigo esteja dentro deste intervalo. Comandos utilizados: Apenas os novos comandos sero descritos. SET DELETED Determina se os registros marcados sero considerados ou no no processamento. Sintaxe SET DELETED on | OFF Argumentos ON ignora registros marcados. ( como se eles no existissem.) OFF processa registros marcados. ISPRINTER( ) ISPRINTER() uma funo de tratamento de impressoras utilizada para determinar se a sada paralela (LPT1) est on-line e pronta para imprimir. Voc pode usar ISPRINTER() para certificar-se de que a impressora est pronta antes que voc inicie uma operao de impresso. SET PRINTER TO O comando SET PRINTER usado para redirecionar as sadas da impressora para outras sadas que no seja a padro. A sada padro a porta paralela LPT1, onde normalmente se conecta uma impressora paralela. SET DEVICE TO Envia os comandos @...SAY para tela ou impressora. Sintaxe SET DEVICE TO SCREEN | printer Argumentos SCREEN envia todos os comandos @...SAY tela e independe de como os comandos SET PRINTER e CONSOLE estejam ajustados. PRINTER envia todos os comandos @...SAY ao dispositivo ajustado em SET PRINTER TO. Isto pode incluir um porta de impressora local, um spooler de rede, ou um arquivo. EOF( ) Determina se o final do arquivo foi atingido. Sintaxe EOF() Retorno EOF() retorna verdadeiro (.T.) quando feita uma tentativa de mover o ponteiro de registros para alm do ltimo registro lgico em um arquivo de banco de dados; do contrrio, ela retorna falso (.F.). Caso no haja nenhum arquivo de banco de dados aberto na rea de trabalho corrente, EOF() retorna falso (.F.). Se o arquivo de banco de dados corrente no possui registros, EOF() retorna verdadeiro (.T.).

REPLICATE( ) Retorna uma cadeia de caracteres repetida uma quantidade de vezes especificada. Sintaxe REPLICATE(, ) Argumentos a cadeia de caracteres a ser repetida. a quantidade de vezes que ser repetido. PROW( ) Retorna a linha em que se encontra a cabea de impresso. Sintaxe PROW() Retorno PROW() retorna o nmero de linha corrente enviado impressora na forma de um valor numrico inteiro. A posio inicial de linha zero. SKIP Move o ponteiro de registro para uma nova posio no arquivo de dados. Sintaxe SKIP [] Argumentos uma expresso numrica que especifica o nmero de registros para mover o ponteiro a partir da posio corrente. Um valor positivo especifica deslocamento do ponteiro para frente e valores negativos significam deslocamento do ponteiro para trs. SKIP especificado sem argumentos move o ponteiro 1 registro para frente. EJECT Avana a cabea da impressora para o comeo da prxima pgina. No exemplo est sendo usado o comando EJECT para avanar para uma nova pgina quando todos os registro do intervalo forem impressos. Voltar

Chamando arquivo fonte externo At agora criamos vrios pequenos programas separados, a unio de todos estes programas forma uma aplicao. Para isto temos que criar um programa principal do qual chamaremos todos os outros programas. Geralmente este programa principal tem um menu de opes e de acordo com a opo selecionada ser chamado um programa onde voc vai conseguir realizar a operao desejada. Vamos ver como isto funciona. Entre no EDIT e crie um arquivo com o nome de Agenda.prg e digite os comandos abaixo.

CLEAR SET DATE BRITISH SET CENTURY ON SET CONFIRM ON SET MESSAGE TO 21 CENTER SET WRAP ON BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176) @ 1,1,24,79 BOX BORDA @ 20,29 TO 22,50 nOp = 1 DO WHILE .T. @ 5,33 TO 12,45 @ 06,34 PROMPT " INCLUSO " MESSAGE " INCLUSO DE DADOS " @ 07,34 PROMPT " ALTERAO " MESSAGE " ALTERAO DE DADOS " @ 08,34 PROMPT " CONSULTA " MESSAGE " CONSULTA DE DADOS " @ 09,34 PROMPT " EXCLUSO " MESSAGE " EXCLUSO DE DADOS " @ 10,34 PROMPT " RELATRIO " MESSAGE " EMISSO DE RELATRIO " @ 11,34 PROMPT " FINALIZA " MESSAGE " SAIR DO PROGRAMA " MENU TO nOp vTelap = SAVESCREEN(0,0,24,79) DO CASE CASE nOp = 1 DO EXERC5 CASE nOp = 2 DO EXERC7 CASE nOp = 3 DO EXERC6 CASE nOp = 4 DO EXERC8 CASE nOp = 5 DO EXERC9 CASE nOp = 6 EXIT ENDCASE RESTSCREEN(0,0,24,79,vTelap) ENDDO CLEAR RETURN Grave o arquivo, compile (ver observao abaixo) para ver se no h erros, linkedite para criar o arquivo executvel e depois execute o programa. Observe que quando voc compila o arquivo AGENDA.PRG tambm so compilados os arquivos (.prg) que esto sendo chamados pelo comando DO. Executando o programa ser montado um menu de opes, selecionando uma das opes chamado o arquivo (.prg) corresponde a opo escolhida. Observao: No comeo dos arquivos exerc5.prg, exerc6.prg, exerc7.prg, exerc8.prg e exerc9.prg tem os seguintes comandos: CLEAR, SET DATE BRITISH, SET CENTURY ON e SET CONFIRM ON. Estes comandos no so necessrios por que j esto no programa principal (agenda.prg), seria necessrio retirar estes comandos dos arquivos acima mencionados, evitando assim uma duplicidade destes comandos. O comando CLEAR que est no final destes arquivos tambm ter de ser retirado, pois neste caso um comando desnecessrio j que no arquivo agenda.prg a tela do programa est sendo restaurada pelo comando RESTSCREEN( ). Enquanto estes arquivos estavam sendo executados sozinhos estes comandos eram necessrios. Pronto nosso programa j est completo. Parabns... Comandos utilizados:

Apenas os novos comandos sero descritos. SAVESCREEN( ) Grava uma regio de tela para posterior exibio atravs da funo RESTSCREEN( ). Sintaxe SAVESCREEN(, , , ) Argumentos , , , e definem as coordenadas da regio de tela a ser gravada. SAVESCREEN() uma funo de tratamento de tela, utilizada para gravar uma regio de tela em uma varivel de qualquer classe de armazenamento, inclusive variveis de campo. Mais tarde, voc pode re-exibir a imagem de tela gravada na mesma ou em uma nova localizao, atravs da funo RESTSCREEN(). Regies de tela geralmente so gravadas e recuperadas quando se utiliza uma rotina de menu de opes. Antes de chamar algum outro programa a tela salva e depois que o programa retorna para o menu a tela restaurada, evitando que voc tenha que refazer a tela novamente. DO O comando DO executa uma rotina ou programa e indica para o compilador Clipper, quais as rotinas ou programas devem ser compiladas. Quando um programa ou rotina chamados pelo comando DO so finalizados, o controle do fluxo de execuo retorna ao programa que os chamou, exatamente na prxima linha do programa a ser executada, aps o comando DO. RESTSCREEN( ) Exibe (restaura) uma regio de tela gravada em uma localizao especificada. Sintaxe RESTSCREEN(, , , , ) Argumentos , , , e definem as coordenadas da informao de tela contida em . uma cadeia de caracteres que contm a regio de tela gravada. RESTSCREEN() uma funo de tratamento de tela que re-exibe uma regio de tela gravada com SAVESCREEN(). A localizao da tela destino pode ou no ser a mesma que a localizao original de quando a regio de tela foi gravada. Se voc especificar uma nova localizao de tela, a nova regio de tela deve ser do mesmo tamanho, pois do contrrio voc poder obter resultados ambguos. Voltar

Funes e smbolos usados com picture Nos comandos @...SAY ou @...SAY...GET existe um clusula PICTURE que serve para formatar o dado a ser exibido. O uso correto dessa clusula muito importante para um bom acabamento dos seus programas. A clusula PICTURE deve ser seguido por um caractere de formatao que dividido em funes e smbolos.

Funes: @A @B @C @D @E as casas decimais e pontos separando milhares. @K Limpa automaticamente o contedo corrente da varivel se o primeiro caractere digitado no for uma tecla de movimentao do cursor. @R Literais na mscara so mostrados, mas no faro parte do contedo do dado. @S Limita a edio ou a visualizao do dado em caracteres. @X Mostra o smbolo DB (dbito) aps um nmero negativo. @Z Mostra brancos no lugar de zeros. @( Mostra entre parnteses os nmeros negativos. @! Converte minsculas em Maisculas. @) O mesmo que @(, exceto que brancos iniciais no so mostrados dentro de parnteses. Smbolos: 9 # A L N X ! $ * . , Permite somente dgitos para dados tipos Caractere, dgitos e sinal para dados tipo Numrico. Permite somente dgitos, espaos e sinais. Permite somente letras. Permite somente caracteres lgicos (T ou F, Y ou N). Permite somente letras e nmeros. Permite qualquer caractere. Converte minsculas em maisculas. Mostra $ no lugar de zeros no significativos. Mostra asteriscos no lugar de zeros no significativos. Identifica o ponto decimal. Mostra uma vrgula a cada milhar. Permite somente letras. Alinha esquerda dados numricos. Mostra o smbolo CR (crdito) aps um nmero positivo. Mostra datas no formato definido pelo comando SET DATE TO. Mostra datas no formato dd/mm/aa e dados numricos com a vrgula separando

Funes ou smbolos mais utilizados: @ 10,10 SAY "C.P.F....:" GET cCPF PICTURE "@R 999.999.999-99" @ 10,10 SAY "Valor Total...:" GET nValor PICTURE "@E 99,999,999.99" @ 10,10 SAY "Nome Completo..:" GET cNome PICTURE "@!" @ 10,10 SAY "Data....:" GET dData PICTURE "@D" @ 10,10 SAY "Cdigo....:" GET cCod PICTURE "9999" @ 10,10 SAY "Telefone...:" GET cTel PICTURE "@R (999)999-9999" Voltar

Tabela de cores e atributos O comando SET COLOR ou a funo SETCOLOR( ) determinam as cores e atributos do vdeo. Os parmetros so fornecidos no formato c1/c2, onde c1 e c2 so letras, nmeros ou atributos para as letras e fundo. Os seguintes cdigos so utilizados para especificar as cores ou

atributos do vdeo: Cor Preto Azul Verde Cyan Vermelho Magenta Marrom Branco Cinza Azul-claro Verde-claro Cyan-claro Vermelho-claro Magenta-claro Amarelo Branco intenso Atributos: Invisvel Piscante Vdeo reverso Alta intensidade Sublinhado Exemplos: SET COLOR TO "W+/B" ou SETCOLOR("W+/B") - Letra em branco intenso com fundo azul. SET COLOR TO "N/R" ou SETCOLOR("N/R") - Letra em preto com fundo vermelho. Voltar X * I + U Letra N B G BG R RB GR W N+ B+ G+ BG+ R+ RB+ GR+ W+ Nmero 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Operadores Os operadores utilizados pelo Clipper para a manipulao de expresses dividem-se nas seguintes categorias: Operadores Matemticos adio subtrao multiplicao diviso exponenciao Mdulo (resto de diviso) Operadores Relacionais Menor Maior Igual Operadores de String + Concatenao de strings (unio) Concatenao de strings com eliminao dos brancos finais das strings intermedirias. $ Retorna .T. se estiver contido em Operadores Lgicos

+ * / ^ % < > =

.NOT. ou ! "No" lgico

= = Exatamente igual = Maior ou igual ou # ou != Diferente Atribuio = Atribuio normal : = Permite atribuir um mesmo valor a diversas variveis. += Adiciona antes de atribuir - = Subtrai antes de atribuir * = Multiplica antes de atribuir / = Divide antes de atribuir ^ = Eleva antes de atribuir %= Calcula o mdulo antes de atribuir Voltar

.AND. .OR.

"E" lgico "Ou" lgico

Incremento/Decremento

+ + Incrementa o operando em 1 -Decrementa o operando em 1

Nomes de campos e variveis de memria Somente os 10 primeiros caracteres so significativos no nome. Somente letras, nmeros e "_" so permitidos. Deve comear com letra e no pode conter espao em branco. Campos e variveis de memria podem ter o mesmo nome. Quando ocorrer um conflito de nomes, nomes de campos tm precedncias sobre os nomes de variveis. Voltar

Opes de compilao Compilador do Clipper -- CLIPPER.EXE Compila um ou mais arquivos programa (.prg) que contm rotinas e funes definidas pelo usurio para formar um arquivo objeto (.OBJ). Sintaxe CLIPPER [] Argumentos de Linha de Comando Esta a sintaxe da linha de comando utilizada para invocar o compilador do Clipper. Se no forem especificados argumentos, exibida uma tela de auxlio (help). o nome do arquivo programa (.prg) a ser compilado para um arquivo objeto. uma lista de uma ou mais opes de controle do curso da compilao, todas elas descritas abaixo. Opes do Compilador /A Evita confuso entre variveis (declaradas com PRIVATE, PUBLIC ou PARAMETERS) e campos com o mesmo nome. /B Inclui informaes de depurao no arquivo objeto.

/CREDIT Mostra o nome das pessoas que trabalharam no projeto do Clipper 5.x. /D[=] Define um identificador para o pr-processador com atribudos ao se especificado. /I Adiciona o diretrio especificado frente da lista de paths INCLUDE. /L Exclui os nmeros de linha do cdigo fonte do arquivo objeto. /M Compila apenas o arquivo programa (.prg) corrente suprimindo a pesquisa automtica para arquivos programa (.prg) referenciados em um arquivo programa com os comandos DO, SET FORMAT, e SET PROCEDURE. /N Suprime a definio automtica de uma rotina com o mesmo nome do arquivo programa (.prg). /O Define o nome e/ou localizao do arquivo objeto de sada. /P Pr-processa o o arquivo programa (.prg) e copia o resultado em um arquivo de sada com uma extenso (.ppo). /Q Suprime a exibio de nmeros de linha quando da compilao. /R[] Inclui uma solicitao de pesquisa em biblioteca no arquivo objeto. /S Verifica a sintaxe do arquivo (.prg) corrente e no gerado nenhum arquivo objeto. /T Especifica um diretrio diferente para arquivos temporrios gerados durante a compilao. /U[] Identifica um arquivo header padro alternativo a ser pr-procdessado ao invs do STD.CH, que vem com o Clipper, e que utilizado automaticamente. /V Fora o compilador a assumir todas as referncias a nomes de variveis no declaradas ou sem alias como sendo variveis pblicas ou privadas. /W Gera mensagens de advertncia para referncias a variveis (ambguas) no declaradas ou sem alias. Voltar

Opes de linkedio Linker do Clipper -- RTLINK.EXE Combina arquivos objeto (.OBJ) com arquivos biblioteca (.LIB) para formar um arquivo executvel (.EXE) ou biblioteca pr-linkada (.PLL). Sintaxe RTLINK [FILE [OUTPUT ] [LIBRARY [] []] Se utilizado sem argumentos, o .RTLink entra no modo prompt, no qual voc deve entrar com as opes do linker. Argumentos de Linha de Comando uma lista dos arquivos objeto a serem linkados. o nome do arquivo de sada a ser gerado. Se no for especificado, o nome

do primeiro arquivo da linha de comando do .RTLink utilizado. a lista de bibliotecas a serem pesquisadas a fim de resolver quaisquer smbolos no identificados. refere-se utilizao de uma ou mais das opes do linker descritas abaixo. /BATCH | /NOBATCH BATCH evita que o linker consulte voc quando ele no conseguir localizar um arquivo. NOBATCH o padro. BEGINAREA . . . ENDAREA Designa uma rea de overlays estticas com todas as sees especificadas entre estes dois comandos tornando-se sees de overlays estticas dentro da rea de overlays. As reas de overlays estticas podem ser aninhadas especificando-se uma construo BEGINAREA...ENDAREA dentro de outra. /DEBUG Faz com que o gerenciador de overlays do .RTLink exiba uma mensagem que identifica cada overlay na medida em que carregada na memria durante a execuo do programa. /DEFAULTLIBRARYSEARCH | /NODEFAULTLIBRARYSEARCH NODEFAULTLIBRARYSEARCH faz com que o .RTLink ignore quaisquer nomes de bibliotecas includos pelo compilador. DEFAULTLIBRARYSEARCH o padro. /DYNAMIC[:] DYNAMIC [INTO ] DYNAMIC fora o linker a colocar quaisquer mdulos subseqentes compilados pelo Clipper em uma overlay dinmica ao invs de colocar o mdulo na seo raiz. DYNAMIC o contrrio de RESIDENT e o modo padro. /EXCLUDE: No modo de pr-linkagem, faz com que qualquer mdulo que define o(s) smbolo(s) especificado(s) seja excludo da linkagem. /EXTDICTIONARY | /NOEXTDICTIONARY /NOEXTDICTIONARY faz com que o linker nao pesquise o dicionrio estendido. /EXTDICTIONARY o padrao. /FREEFORMAT Configura a interface do linker para o modo de entrada FREEFORMAT quando o .RTLink muda para um novo stream de entrada. /FREEFORMAT o contrrio de /POSITIONAL e modo de entrada padro. /HELP

Relaciona as opes do linker no console. /IGNORECASE | /NOIGNORECASE NOIGNORECASE faz com que o fato de as letras estarem em maisculo ou minsculo seja significativo em nomes de smbolos e segmentos. IGNORECASE o padro. /INCREMENTAL[:] | /NOINCREMENTAL INCREMENTAL habilita a linkagem incremental dos mdulos compilados pelo Clipper. Quando um programa linkado, somente os mdulos que sofreram alterao so re-linkados. NOINCREMENTAL o padro. /MAP[:] MAP [= ] [] Gera um arquivo map que contm uma ou mais informaes a respeito da sesso de linkagem. As opes map disponveis so S, N e A MODULE Move os segmentos dos mdulos especificados para a seo de overlays estticas corrente. /PLL: Utilizada no modo de linkagem para especificar um arquivo biblioteca pr-linkada do qual o arquivo executvel de sada depende. /POSITIONAL Configura a interface do linker para o modo de entrada POSITIONAL quando o .RTLink muda paraq um novo stream de entrada. /POSITIONAL o oposto de /FREEFORMAT, que o modo de entrada padro. /PRELINK Altera o .RTLink para modo de pr-linkagem. Neste modo, o gerado pelo .RTLink uma biblioteca pr-linkada (.PLL) ao invs de um arquivo executvel (.EXE). PRELOAD Faz a seo de overlays estticas corrente ser carregada na memria antes que o programa inicie a execuo. Normalmente, apenas as sees residentes do programa so carregadas na memria antes do incio da execuo. /REFER: REFER No modo de pr-linkagem, o .RTLink forado a pesquisar todas as bibliotecas especificadas a fim de carregar o cdigo necessrio associado aos smbolos especificados. /RESIDENT Faz com que os mdulos subseqentes compilados pelo Clipper sejam carregados na seo raiz do programa corrente, anulando a criao automtica de overlays dinmicas para todo cdigo compilado pelo Clipper. RESIDENT o oposto de DYNAMIC.

SECTION [= ] [INTO ] Cria uma seo de overlays estticas, e faz com que os segmentos dentro de quaisquer mdulos objeto que no sejam do Clipper especificados em opes FILE ou LIBRARY subseqentes tornem-se parte desta seo. /SILENT Suprime a exibio dos prompts e respostas do linker quando o .RTLink invocado com um arquivo script. /STACK: Especifica uma pilha de programa que anula o tamanho da pilha especificado no mdulo objeto. um valor numrico de no mximo 65.535. /VERBOSE[:] Faz com que o .RTLink exiba mensagens de status durante a linkagem, indicando os mdulos sendo linkados e em qual ordem. especifica a quantidade de informaes a serem exibidas (0, 1, ou 2). Voltar

Comandos e funes usadas neste curso Abaixo esto relacionados todos os comandos e funes usadas neste curso, clicando sobre o nome do comando ou funo voc se deslocar at a parte de curso onde foi exemplificado o uso do comando ou da funo. COMANDOS @...BOX... @...SAY... CLOSE DATABASE DO WHILE IF...ELSE...ENDIF PACK SEEK @...CLEAR TO... @...TO... DELETE EJECT INDEX ON...TO... READ SELECT @...SAY...GET... APPEND BLANK DO EXIT LOOP REPLACE SKIP @...PROMPT... CLEAR DO CASE GO MENU TO RETURN USE

COMANDOS SET SET CENTURY SET DELETED SET SCOREBOARD SET COLOR SET INDEX TO SET WRAP SET CONFIRM SET MESSAGE SET DATE SET PRINTER

FUNES CHR( ) DTOS( ) FOUND( ) REPLICATE( ) TIME( ) Voltar CTOD( ) EMPTY( ) INKEY( ) RESTSCREEN( ) TONE( ) DATE( ) EOF( ) ISPRINTER( ) SAVESCREEN( ) DTOC( ) FILE( ) LASTKEY( ) SPACE( )

A Reproduo do contedo deste curso permitida, desde que citada a fonte (Site Clipper On Line http://www.pctoledo.com.br) , o nome do autor ( Paulo Csar Toledo) e endereo de e-mail ([email protected]).