linguagem de programação i a

23
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação

Upload: abril

Post on 14-Jan-2016

20 views

Category:

Documents


0 download

DESCRIPTION

Linguagem de programação I A. Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação. Linguagem de programação I A. Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação. Versão: 030714_01. Arquivos. Arquivos. Tipos de arquivo: Sequencial (texto) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Linguagem de programação I A

Linguagem de programação I A

Carlos Oberdan Rolim

Ciência da ComputaçãoSistemas de Informação

Page 2: Linguagem de programação I A

Linguagem de programação I A

Carlos Oberdan Rolim

Ciência da ComputaçãoSistemas de Informação

Versão: 030714_01

Page 3: Linguagem de programação I A

Arquivos

Page 4: Linguagem de programação I A

Arquivos

Tipos de arquivo:

Sequencial (texto)

Caracteres armazenadas sequencialmente.

É possível determinar o primeiro, segundo terceiro .. caracteres que compõem o arquivo

Binário

Formado por uma sequência de bytes sem correspondência com um tipo de dado.

Cabe ao programador fazer esta correspondência quando lê e escreve estes arquivos.

Page 5: Linguagem de programação I A

Como trabalhar com arquivos

Antes de acessar os dados dentro de um arquivo é necessário abri-lo.

Executa-se as operações desejadas com o arquivos usando funções específicas para leitura e escrita

Ao terminar de realizar as operações no arquivo, devemos fechá-lo.

As operações de abertura e fechamento garantem a integridade dos dados.

As funções referentes a arquivos requerem a inclusão do stdio.h, e todo arquivo aberto é referenciado por um ponteiro para o tipo FILE.

Page 6: Linguagem de programação I A

Descritor de ArquivosDescritor de arquivo:

Em C: Estrutura de dados denominada FILE

Aponta para um arquivo físico no disco

O arquivo lógico e armazenado em variáveis de memória definidas pelo programador.

Todas operações feitas pelo descritor refletem no arquivo

Criando um descritor:

FILE *parquivo;

Arquivo “lógico”em memória

Descritor de Arquivo (FILE)Arquivo

“Físico”

Disco

Memória

Page 7: Linguagem de programação I A

Abrindo arquivos

A função “fopen” tem duas finalidades:

- abrir uma descritor de bytes

- ligar um arquivo em disco àquele descritor

FILE *fopen(char *NomeArquivo, char *modo);

FILE *arquivo;

if ((arquivo = fopen(“teste”,”w”)) == NULL) {

puts(“Não posso abrir o Arquivo teste.\n”);

exit(1); /* força o término da execução da rotina */

}

Page 8: Linguagem de programação I A

Abrindo arquivos

Outro exemplo

FILE *parquivo;

char *nome = "texto.txt";

if (( parquivo = fopen(nome, "w+b")) == NULL) {

printf("\n\nNao foi possivel abrir o arquivo para escrita.\n");

exit(1);

}

Page 9: Linguagem de programação I A

Modo Significado

“r” Abre Arquivo de Texto para Leitura

“w” Cria Arquivo de Texto para Gravação

“a” Anexa a um Arquivo de Texto

“rb” Abre Arquivo Binário para Leitura

“wb” Cria Arquivo Binário para Gravação

“ab” Anexa a um Arquivo Binário

“r+” Abre Arquivo de Texto para Leitura/Gravação

“w+” Cria Arquivo de Texto para Leitura/Gravação

“a+” Abre ou Cria Arquivo de Texto para Leitura/Gravação

“r+b” Abre Arquivo Binário para Leitura/Gravação

“w+b” Cria Arquivo Binário para Leitura/Gravação

“a+b” Abre ou Cria Arquivo Binário para Leitura/Gravação

Page 10: Linguagem de programação I A

Fechando arquivo

Fechando um arquivo: função fclose(..)

Quando um programa não precisa mais utilizar um arquivo por um período de tempo longo, o arquivo pode ser fechado

Fechar um arquivo protege os seus dados, garante que atualizações feitas serão salvas e libera o arquivo para outros usuários ou programas poderem utiliza-lo.

int fclose(FILE *fp);

fclose(arquivo);

Page 11: Linguagem de programação I A

C provê funções para ler caracteres, linhas de texto, padrões formatados ou

vetores de bytes:

int getc(FILE *arquivo);

lê um caracter do arquivo e retorna seu valor como inteiro. Retorna EOF

em caso de erro

int fgetc(FILE *f)

lê um byte, retorna seu valor (0-255) como inteiro. Retorna EOF em caso de

erro.

char *fgets(char *dest, int limite, FILE *f);

lê uma linha de texto (ou até atingir o limite de bytes lidos) e guarda o texto

lido em dest. Retorna dest em caso de sucesso, NULL em caso de erro.

int fscanf(FILE *f, char *formato, ...);

scanf para arquivos.

int fread(void *dados, int tam_elem, int num_elem, FILE *f);

lê num_elem elementos de tam_elem bytes cada e armazena em dados.

Retorna o número de elementos lidos com sucesso.

Leitura de dados

Page 12: Linguagem de programação I A

#include <stdio.h>

#include <conio.h>

int main() {

FILE * fp;

char ch;

fp = fopen ("arquivo.txt" , "r");

if (fp == NULL)

perror ("Erro abrindo arquivo");

else {

ch = getc(fp);

while (ch != EOF){

ch = getc(fp);

putchar (ch);

}

fclose (fp);

}

return 0;

}

Exemplo de código para ler e imprimir usando getc

Page 13: Linguagem de programação I A

#include <stdio.h>

int main() {

FILE * pFile; char mystring [100];

pFile = fopen (“arquivo.txt" , "r"); if (pFile == NULL) perror ("Erro abrindo arquivo"); else { fgets (mystring , 100 , pFile); puts (mystring); fclose (pFile); } return 0; }

Exemplo de código para ler e imprimir usando fgets

Page 14: Linguagem de programação I A

C provê funções para escrever caracteres, strings, padrões formatados ou

vetores de bytes:

int putc(int c, FILE *f)

Escreve o caracter c. Retorna EOF em caso de erro.

int fputc(int c, FILE *f)

Escreve o byte c. Retorna EOF em caso de erro.

int fputs(char *dest, FILE *f);

Escreve a string dest (que deve ter o zero terminador) no arquivo. Retorna EOF em caso

de erro.

int fprintf(FILE *f, char *formato, ...);

printf para arquivos.

int fwrite(void *dados, int tam_elem, int num_elem, FILE *f);

Escreve num_elem elementos de tam_elem bytes cada, armazenados em dados.

Retorna o número de elementos escritos com sucesso.

Escrita de dados

Page 15: Linguagem de programação I A

main(){FILE *arq;char ch; if ((arq=fopen(“teste.dat”,”w”)) == NULL) { printf(“Arquivo não pode ser criado\n”); exit(1); }

do{ch=getchar();putc(ch,arq);

}while (ch!=0);

fclose(arq);}

Escreve cada caracter lido em um arquivo usando putc

Page 16: Linguagem de programação I A

#include <stdio.h>

int main () {

FILE * pFile;

char str [256];

printf (“Informe string a gravar em arquivo: ");

fgets (str,255,stdin);

pFile = fopen (“arquivo.txt","a");

fputs (str, pFile);

fclose (pFile);

return 0; }

Escreve uma string lida em um arquivo usando fputs

Page 17: Linguagem de programação I A

fwrite ( ) e fread ( )

Permitem escrever e ler blocos de dados, sua forma

geral é a seguinte:

int fread(void *buffer, int num_bytes, int cont,

FILE *fp);

int fwrite(void *buffer, int num_bytes, int cont,

FILE *fp);

Page 18: Linguagem de programação I A

#include <stdio.h>int main() {FILE *pf;float pi = 3.1415;float pilido;if((pf = fopen("arquivo.bin", "wb")) == NULL) {    printf("Erro na abertura do arquivo");    exit(1);}if(fwrite(&pi, sizeof(float), 1,pf) != 1)   /* Escreve a variável pi */    printf("Erro na escrita do arquivo");fclose(pf);                                    /* Fecha o arquivo */if((pf = fopen("arquivo.bin", "rb")) == NULL){ /* Abre o arquivo para nova leitura */    printf("Erro na abertura do arquivo");    exit(1);}if(fread(&pilido, sizeof(float), 1,pf) != 1)  /* Le em pilido o valor da variável armazenada anteriormente */    printf("Erro na leitura do arquivo");printf("\nO valor de PI, lido do arquivo e': %f", pilido);fclose(pf);return(0);} Exemplo usando fwrite e fread

Page 19: Linguagem de programação I A

Erros com arquivos

A função ferror() determina se a operação de arquivo

produziu um erro. Sua forma geral será:

int ferror(FILE *fp);

#include <stdio.h> int main () { FILE * pFile; pFile=fopen(“arquivo.txt","r"); if (pFile==NULL) perror ("Erro ao abrir arquivo"); else { fputc ('x',pFile); if (ferror (pFile)) printf ("Erro na escrita ao arquivo\n"); fclose (pFile); } return 0; }

Page 20: Linguagem de programação I A

Em todo arquivo aberto há um "cursor" indicando a posição onde ocorrerá

a próxima leitura e/ou escrita. Todas as operações de leitura e escrita

avançam o cursor após ler/escrever os dados. Para mover o cursor, ou

obter sua posição atual, temos:

int fseek(FILE *f, long distancia, int origem);

Move o cursor do arquivo f para a posição distancia relativa em bytes a alguma origem.

A origem deve ser uma destas 3 constantes:

SEEK_SET – início do arquivo

SEEK_CUR – posição atual

SEEK_END – fim do arquivo

fseek retorna 0 em caso de sucesso, -1 em caso de erro.

Obs: Normalmente é utilizado em arquivos binários

long rewind(FILE *f);

Move o cursor para o inicio do arquivo.

long ftell(FILE *f);

Retorna a posição atual do cursor no arquivo f.

Posicionamento do cursor

Page 21: Linguagem de programação I A

main(){

FILE *fp;

char c;

if ((fp=fopen(“teste”,”rb”)) == NULL) {

printf(“Arquivo não pode ser aberto\n”);

exit(1);

}

fseek(fp,234L,0); /* L força que seja um inteiro longo */

c = getc(fp); /* lê o caracter 234 */

putchar(c);

}

Lê um caracter do arquivo binário

Page 22: Linguagem de programação I A

Obter o tamanho de um arquivo

int main () { FILE * pFile; long lSize;

pFile = fopen ( "myfile.bin" , "rb" ); if (pFile==NULL) { fputs ("File error",stderr); exit (1); } fseek (pFile , 0 , SEEK_END); /* vai para fim do arquivo */ lSize = ftell (pFile); /* retorna posicao atual */ rewind (pFile); /* volta para inicio */

printf(“Tamanho do arquivo em bytes%lf”, lSize);

}

Page 23: Linguagem de programação I A

#include “stdio.h”int main(int argc,char *argv[]) {FILE *in, *out;char ch;if (arg != 3) {

printf(“Digite o Nome dos Arquivos\n”);exit(1);}

if ((in=fopen(argv[1],”rb”)) == NULL) {printf(“Arquivo origem não existe\n”);exit(1);}

if ((out=fopen(argv[2],”wb”)) == NULL) {printf(“Arquivo destino não existe\n”);exit(1);}

while (! feof(in)) putc(getc(in),out); /* esta é a cópia propriamente dita */

fclose(in);fclose(out);}

Programa para copiar arquivos