Universidade do Vale do Paraíba Colégio Técnico Antônio Teixeira Fernandes Disciplina Programação Orientada a Objetos I Material IV-Bimestre Criando um arquivo de dados. Abrindo e fechando um arquivo de dados. Processando um arquivo de dados. Processo de leitura, Escrita e Inserção em Arquivo, Menus e Dialogos site : http://www1.univap.br/~wagner Prof. Responsáveis Wagner Santos C. de Jesus 1 Arquivo de Dados Muitas informações precisam ler e escrever informações de um dispositivo de memória auxiliar. Essas informações são armazenadas no dispositivo na forma de um arquivo de dados. Os arquivos de dados nos permitem armazenar informações permanentemente e acessar e alterar essas informações sempre que necessário. 2 Usando Streams. A manipulação de arquivo em C normalmente é feita por intermédio de um recurso do sistema operacional denominado Stream (que vem a ser cadeia de caracteres ou bytes). Normalmente em C manipulamos arquivos de texto que são arquivo não formatados ou seja esse tipo de manipulação deve ser feita inteiramente por intermédio do programador que desenvolve a aplicação procedimento que da origem ao que chamamos de estrutura de banco de dados que são complexas e demando conhecimentos matemáticos de relacionamento intercessão. 3 Criando um arquivo de dados do tipo texto. Para se trabalhar com um arquivo de dados do tipo texto, o primeiro passo é estabelecer um buffer, onde as informações são armazenadas temporariamente durante a transferencia entre memória e computador (Dispositivo de gravação). 4 5 Criando um Buffer. (FILE) • Para se criar um buffer é necessário usar o comando FILE que é um tipo de estrutura especial que estabelece o buffer. Para dar nome ao buffer colocamos uma variável do tipo ponteiro. 6 Para usar FILE é necessário utilizar a biblioteca. #include <stdio.h> Sintaxe para criação de um Buffer. FILE *<nome_Buffer>; Exemplo : FILE *pt; 7 Abrindo e criando um arquivo - fopen() • fopen() : Para se manipular um arquivo é preciso cria-lo para poder usar o recurso de leitura, e gravação. A função fopen retorna um ponteiro para o início do buffer associado ao arquivo. Um valor NULL é retornado quando o arquivo de dados não puder ser encontrado. 8 Sintaxe : <buffer> = fopen(<nome-arquivo>, <tipo-abertura>); 9 Exemplo : pt = fopen("c:/diretorio/teste.txt","r+"); Obs : Este exemplo abre um arquivo já existente para leitura e gravação. 10 Escrevendo dados em um Arquivo fprintf() Para gravar uma informação em um arquivo usamos a função fprintf(), que permite escrever um dado no buffer. Sintaxe: fprintf(<buffer>,<cadeia_Caracteres); Obs : A cadeia de ser sempre do tipo char. 11 Exemplo : fprintf(pt,"Gravando Arquivo"); 12 Fechando um arquivo de dados - fclose() Para se fechar um arquivo usamos a função fclose(), que permite remover todos os dados do buffer para o disco. Sintaxe : fclose(<nome_buffer>); Exemplo : fclose(pt); 13 Exemplo de um programa para escrever um dado no arquivo. FILE *fp; fp = fopen("c:/ProjC++/teste.txt","r+"); fprintf(fp,"Corinthians do Rivelino..\n"); fclose(fp); 14 Leitura de um arquivo de dados fgets(), feof(). Permite realizar a leitura de um ou mais registros em arquivo cada vez que fgets() é acionado desloca o ponteiro para o próximo registro até encontrar o final do arquivo. Que é indicado pela função feof(), que retorna verdadeiro caso o final do arquivo seja encontrado. Sintaxe : fgets(<varm_receptora>,<tamanho>,<Buffer>); feof(<ponteiro>); 15 Exemplo : char v[30]; fp = fopen(arq,"r+"); while(!feof(fp)) { fgets(v,30,fp); ShowMessage(v); } fclose(fp); 16 Verificando se um arquivo existe ou não - FileExists(). FileExists() - Retorna um operador booleano se o arquivo existir no diretório específicado. Sintaxe : <Varm-Boolean> = FileExists(<Caminho_nome_Arquivo>); Exemplo : boolean t = FileExists("c:/Projeto/lista.txt"); 17 Criando uma Estrutura de registros Uma estrutura vem a ser um tipo especial de dados que permite agrupar tipo de diferentes de dados em um só ambiente com se o conjunto fosse apenas um. 18 Implementado a criação de uma estrutura de registros - struct struct - cria uma estrutura de registros para um determinado grupo de dados. Obs: A estrutura deve ser declarada no programa de forma global. Sintaxe : struct <nome_logico> { <definição das campos_Variáveis>; } <nome_físico>; 19 Exemplo : struct dados { int n; AnsiString nome; double salario; }entrada; 20 Usando uma estrutura de registros. void __fastcall TForm1::Button1Click(TObject *Sender) { entrada.nome = "Maria da Silva"; entrada.salario = 3000.90; ShowMessage(entrada.salario); } 21 Uma estrutura de registro pode ser associada a um arquivo formando assim um banco de dados. Exemplo de arquivo com estrutura de registros. struct dados { char nome[30]; char salario[12]; }entrada; 22 Exemplo Gravação de uma estrutura em um arquivo de texto. void __fastcall TForm1::Button1Click(TObject *Sender) { FILE *fp; fp = fopen("c:/ProjC++/teste.txt","w+"); StrCopy(entrada.nome,"Maria da Silva,"); StrCopy(entrada.salario,"3000.90\n"); fprintf(fp,entrada.nome); fprintf(fp,entrada.salario); fclose(fp); } 23 Mudando o nome do Arquivo. RenameFile() : Troca o nome do arquivo determinado em um diretório. Sintaxe : RenameFile(<Arquivo_Antigo>,<Arquivo_Novo>); Exemplo : RenameFile("c:/Projeto/teste.txt","c:/Projeto/testando.txt"); 24 DeleteFile() : Apaga um arquivo de um determinado diretório. Sintxe : RenameFile(<Nome_Arquivo>); Exemplo : DeleteFile("c:/Projeto/logica.txt"); 25 system() : Executa um comando do sistema operacional. Sintaxe : system(<String do sistema>); Exemplo : system("sol.exe"); 26 Permite a criação de uma região para digitação de texto. Memo deve ser usado com a propriedade Lines. Para adicionar um texto ao memo usamos método add(). Exemplo : Memo1->Lines->Add("Teste"); 27 Para contar o número de linhas de um texto usamos método count. Exemplo : int x = Memo1->Lines->Count; Para obter o uma linha de um texto usa-se o método. Strings[]. Exemplo : int i = 1; AnsiString p = Memo1->Lines->Strings[i]; 28 Para Gravar os dados de um determinado texto. SaveToFile(). Exemplo : Memo1->Lines->SaveToFile("teste.txt"); 29 Para Carregar os dados de um determinado texto. LoadFormFile(). Sintaxe: Memo1->Lines->LoadFromFile("teste.txt"); 30 SaveDialog e OpenDialog Paleta Dialog, permite criar uma janela onde o usuário poderã escolher um arquivo para abertura ou gravação. Propriedades Valores Default *.txt (extensão) Filename Caminho e nome do arquivo Texto|*.txt (nome e extensão do arquivo) C:\lixo (Diretório padrão da caixa) Filter InitialDir 31 Método Execute() Executa a caixa de dialogo onde o arquivo escolhido será enviado para a propriedade FileName. Exemplo : SaveDialog1->Execute(); 32 Saída da caixa SaveDialog 33 FileName : Permite exibir o caminho e o nome do arquivo que foi escolhido. AnsiString cam = SaveDialog1->FileName; No exemplo acima o caminho armazenado na variável cam será c:\lixo\cripotografia.txt 34 MainMenu : Determina um menu de opções. (Basta digitar duplo click no objeto) Escrever opções propriedade caption na Para criar um submenu basta clicar na linha de baixo e escrever na propriedade caption. 35 Resultado na Execução do Menu 36 O código deverá ser colocado no evento OnClick do objeto MainMenu1 void __fastcall TForm1::Novo1Click(TObject *Sender) { ShowMessage(“Click na opção Novo”); } 37