SSC INTRODUÇÃO À COMPUTAÇÃO PARA ENGENHARIA AMBIENTAL REGISTROS E ARQUIVOS. Profa. Dra. Milena Guessi Margarido

Documentos relacionados
CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:

Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

USP - ICMC - SSC SSC o. Semestre Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Automação ]

ESTRUTURAS COMPOSTAS. REGISTROS (Struct) Introdução à Ciência da Computação I Simone Senger Souza

Linguagem C: Arquivo-Texto

Programação II. Arquivos - Conceito. Arquivos

ESTRUTURAS COMPOSTAS REGISTRO. Slides de autoria de Rosely Sanches e Simone Senger de Souza

Linguagem C. Armazenamento de Dados em Arquivos - Continuação

Estruturas de Dados. Módulo 15 - Arquivos. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

Manipulação de Arquivos

9. Arquivos em C. Prof. Renato Tinós. Departamento de Computação e Matemática (FFCLRP/USP) Introdução à Computação II

Programação de Computadores I Arquivos na Linguagem C PROFESSORA CINTIA CAETANO

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: Manipulação de arquivos

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Arquivos em C

Arquivos em C Parte 2

LINGUAGEM C: ARQUIVOS

Outline. 33. Manipulação de arquivos DIM

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

Manipulação de Arquivos

Universidade Estadual de Mato Grosso do Sul Ciência da Computação Algoritmos e Estruturas de Dados I (AED-I) Prof. Nilton

Leitura de Arquivos. Prof. Fabrício Olivetti de França

Métodos Computacionais. Arquivos

Structs, Ponteiros e Arquivos. Prof. Maurício Dias

Depuração e Teste de programas C C Depuração e teste de programas C

Linguagem C Ficheiros Compilação Separada

Manipulação de Arquivos

Arrays, Criação de Funções, Estruturas e Manipulação de Arquivos.

1 Arquivos em C. CEFETES Serra - Programação II Mateus Costa Notas de Aula - Arquivos

LINGUAGEM C: ARQUIVOS

Arquivos. Estruturas de Dados II Vanessa Braganholo

Sequência de informações binárias armazenadas num dispositivo de armazenamento permanente. Em geral os bits são agrupados em grupos de 8 (1 byte)

Manipulação de arquivos

Linguagem C arquivos. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

Algoritmos e Estruturas de Dados II IEC013

Fundamentos de Arquivos. SCC203 Algoritmos e Estruturas de Dados II

Introdução à Computação II AULA 08 BCC Noturno - EMA896115B

Arquivos em C. Notas de Aula. Prof. Francisco Rapchan

Ficheiros. IPC2 1999/2000 F. Nunes Ferreira

4,0 pontos), exclusão de registro e exclusão completa de dados; 3. A nota final do trabalho terá um peso 4.

Aula 9 Oficina de Programação Strings. Profa. Elaine Faria UFU

Manipulação de Arquivos em C

Algoritmos e Programação _ Departamento de Informática

Apêndice B. Cadeias de Caracteres (Strings)

Variáveis, Tipos de Dados e Operadores

Computação Eletronica: Arquivos (Introdução)

Linguagem C: Introdução

Manipulação de Arquivos

Caracteres e Cadeias de Caracteres

ARQUIVOS DE DADOS EM C: UMA INTRODUÇÃO

Disciplina de Algoritmos e Programação

C Estruturas. Section Summary. Adriano Cruz 1 de fevereiro de 2016

Linguagem C (repetição)

LINGUAGEM C: ARRAYS DE CARACTERES: STRINGS

Linguagem de Programação C

14. Arquivos. W. Celes e J. L. Rangel. Estruturas de Dados PUC-Rio 13-1

Alocação Dinâmica de Memória - Exercício Escreva um programa em C que manipule um vetor de inteiros não nulos alocado dinamicamente.

Manipulação de Arquivos Exercício/Exemplo:

ESTRUTURAS CONDICIONAIS. Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza

1 Escrita de Arquivos Binário

Entrad Entrada / Saíd a / Saída

Matrizes em C. Lucas Ferrari de Oliveira Professor Adjunto. Universidade Federal do Paraná

ESTRUTURAS CONDICIONAIS. Introdução à Ciência da ComputaçãoI Simone Senger de Souza

Aula de Arquivos. Jesimar da Silva Arantes. Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos, SP

Linguagem C. André Tavares da Silva.

Capítulo 6: Arquivos

Introdução à Programação

Introdução à Programação

Capítulo 06: Arquivos

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

SITUAÇÃO VETORES. Imagine o seguinte problema:

Linguagem de Programação C. Arquivos Binários

Arquivos. Prof. Dr. Silvio do Lago Pereira. Departamento de Tecnologia da Informação Faculdade de Tecnologia de São Paulo

INF 1620 P3-02/07/02 Questão 1 Nome:

EXERCÍCIO DE SONDAGEM TURMA 01 SEMESTRE DATA: 01/11/2016. Matrícula Nome Nota

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Prova - 14 de junho de 2017

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Programação. Folha Prática 10. Lab. 10. Departamento de Informática Universidade da Beira Interior Portugal. Copyright 2010 All rights reserved.

Programação de Computadores II. Cap. 7 Cadeias de Caracteres 1/2

Estrutura de Dados. Struct (Registro) Lais Farias Alves

Vetores e Matrizes. Conceito. Conceito. Conceito. Conceito. Conceito. Variáveis Compostas Homogêneas. Matriz

Manipulação de Arquivos

Programação de Computadores I Funções de Repetição da Linguagem C PROFESSORA CINTIA CAETANO

Caracteres. Caracteres são representados através de códigos numéricos. Tabela de códigos: Define correspondência entre caracteres e códigos numéricos

Curso de C. Declaração de Variáveis 18/3/ :48 1

Linguagem de Programação C. Arquivos

Programação de Computadores I. Linguagem C Arquivos

PROGRAMAÇÃO E ALGORITMOS (LEI) Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2016/2017

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

INTRODUÇÃO À LINGUAGEM C. Prof. Msc. Luis Filipe Alves Pereira 2015

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

INF 1620 P3-21/06/08 Questão 1 Nome:

Programação. MEAer e LEE. Manipulação de ficheiros de texto. Bertinho Andrade da Costa. Instituto Superior Técnico. 2010/2011 1º Semestre

SCC 202 Algoritmos e Estruturas de Dados I. Pilhas (Stacks) (implementação dinâmica)

Rogério Rodrigues de Vargas

Introdução à Linguagem C

Linguagem C Controle do Fluxo de Execução. Lógica de Programação

PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS ALGORITMOS & ESTRUTURAS DE DADOS

Técnicas de Programação: Comandos de Controle de DEE UFPB

Transcrição:

SSC 301 - INTRODUÇÃO À COMPUTAÇÃO PARA ENGENHARIA AMBIENTAL REGISTROS E ARQUIVOS Profa. Dra. Milena Guessi Margarido (milena@icmc.usp.br)

Número Bairro CEP Cidade Logradouro Endereço País

REGISTRO Estrutura composta heterogênea Exemplo endereço: Logradouro: literal CEP: numérico Número: numérico Bairro: literal Cidade: literal Estado: literal País: literal

REGISTRO Um registro (struct) é uma coleção de dados (que podem ser de tipos diferentes) sobre um objeto particular. registro campo cada campo pode ser de qualquer tipo

REGISTRO - EXEMPLO Cadeia de Caracteres Vetor de Reais Matriz de Reais Real Nome CPF RG HT 1 HT 2 HT 3 HT 4 HT 5 HT 6 Salário FGTS 1.1 FGTS 1.2 FGTS 2.1 FGTS 2.2 horas trabalhadas no semestre FGTS nos trimestres

REGISTRO Cada campo deve ter um nome e deve ser referenciado por este nome Não confundir com matriz e vetor onde todos os elementos são do mesmo tipo e são referenciados por um índice

COMO DEFINIR UMA VARIÁVEL DE TIPO REGISTRO EM C typedef struct { Descrição dos campos tipo1 campo_1; tipo2 campo_2;... } nome_do_registro; tipon campo_n; Não é uma variável, é um novo tipo de dado!

ONDE DEFINIR UMA VARIÁVEL DE TIPO REGISTRO EM C No início do programa (em geral, fora de todas as funções): typedef struct { char logradouro[50]; char cep; int numero; char bairro[30]; char cidade[30]; char estado[2]; char pais[20]; } REGENDERECO; Uma vez definida, pode-se referenciar o novo tipo para declarar variáveis usando: REGENDERECO ENDERECO;

FAZENDO REFERÊNCIA A UM CAMPO DE VARIÁVEL DO TIPO REGISTRO EM C <nome-da-variável-tipo-struct>.<nome do campo> No exemplo anterior, uma atribuição de valores poderia ser: ENDERECO.logradouro = Av Trabalhador São-carlense ; ENDERECO.cep = 13566-590 ; ENDERECO.numero = 400; ENDERECO.estado = SP ; ENDERECO.bairro = Centro ; ENDERECO.pais = Brasil ; ENDERECO.cidade = São Carlos ;

FAZENDO REFERÊNCIA A UM CAMPO DE VARIÁVEL DO TIPO REGISTRO EM C No exemplo anterior, uma leitura de valores poderia ser: printf("\n\nentre com o logradouro:"); gets(endereco.logradouro); printf("\n\nentre com o cep:"); gets(endereco.cep); printf("\n\nentre com o número:"); scanf( %d, &ENDERECO.numero);

MANIPULAÇÃO DA VARIÁVEL DE TIPO REGISTRO EM C As variáveis do tipo struct podem ser manipuladas do mesmo modo que outros dados na memória Exemplo: SALARIO_BR = CONV_USD_REAL * REGEMPREGADO.SALARIO_USD;

EXIBIÇÃO DA VARIÁVEL DE TIPO REGISTRO EM C As variáveis do tipo struct podem ser exibidas. Exemplo: printf ( cidade: %s, ENDERECO.cidade);

VETOR DE REGISTROS Se, ao invés de um única ficha do empregado, quisermos cadastrar várias fichas? Solução: criar um vetor de registros HT 1 HT 1 HT 1 CPF Nome CPF Nome Nome RG Salário RG HT 2 HT 3 HT 4 HT 5 HT 6 HT 2 HT 3 HT 4 HT 5 HT 6 CPF FGTS 1.1 RG FGTS 1.2 HT 2 HT 3 Salário FGTS HT 2.1 4 HT 5 HT 6FGTS 2.2 FGTS 1.1 FGTS 1.2 Salário FGTS 2.1 FGTS 2.2 FGTS 1.1 FGTS 1.2 FGTS 2.1 FGTS 2.2

VETOR DE REGISTROS [0] [1] [2] HT 1 HT 1 HT 1 HT 1 HT 2 HT 3 HT 4 HT 5 CPF Nome FGTS 1.1 RG FGTS 2.1 FGTS 1.1 Salário FGTS 2.1 FGTS 1.1 FGTS 1.2 HT 2 HT 3 HT 4 HT 5 HT 6 FGTS 2.1 FGTS 2.2 HT 1 HT 2 HT 3 HT 4 HT 5 CPF HT 1 HT 2 HT 3 HT 4 HT 5 CPF Nome FGTS 1.1 RG FGTS 2.1 FGTS 1.1 Salário FGTS 2.1 FGTS 1.1 FGTS 1.2 HT 2 HT 3 HT 4 HT 5 HT 6 FGTS 2.1 FGTS 2.2 Nome FGTS 1.1 RG FGTS 2.1 FGTS 1.1 Salário FGTS 2.1 FGTS 1.1 FGTS 1.2 HT 2 HT 3 HT 4 HT 5 HT 6 FGTS 2.1 FGTS 2.2

COMO DEFINIR UM VETOR DE REGISTROS? Na seção de declaração de tipo coloca-se: typedef struct { tipo1 campo1; tipo2 campo2;... tipon campon; } nome_do_registro; nome_do_registro nome_da_variavel [dimensao];

EXEMPLO typedef struct { char logradouro[50]; char cep; int numero; char bairro[30]; char cidade[30]; char estado[2]; char pais[20]; } REGENDERECO; logradouro cep numero bairro cidade estado pais REGENDERECO campus[5];

VETOR DE REGISTROS Como referenciar este campo? [0] campus logradouro cep numero bairro cidade estado pais [1] logradouro cep numero bairro [2] cidade estado pais logradouro cep numero bairro cidade estado pais campus[0]. logradouro Como referenciar este campo? campus[1]. numero Como referenciar este campo? campus[2]. cidade

COMANDOS DE E/S

FUNÇÕES PARA E/S getchar() putchar() gets() puts() printf() scanf() Lê um caractere do teclado Escreve um caractere na tela Lê uma string (vetor de caracteres) do teclado Escreve uma string na tela seguido por uma nova linha Escreve dados na tela Lê dados do teclado Obs: Diferente de printf, puts pode escrever apenas strings de caractere, ou seja, não pode escrever números ou fazer conversões de formato

EXEMPLO #include <stdio.h> #include <string.h> biblioteca com funções sobre caracteres void main() { char str[80]; gets(str); printf( o comprimento é %d, strlen(str)); } O que esse programa faz?? Lê uma string para o vetor str e escreve seu comprimento

EXEMPLO - ALTERNATIVA #include <stdio.h> #include <string.h> biblioteca com funções sobre caracteres void main() { char str[80]; scanf( %s, str); printf( o comprimento é %d, strlen(str)); } O que esse programa faz?? Lê uma string para o vetor str e escreve seu comprimento

ATÉ AGORA... As estruturas são armazenadas na memória principal do computador Nem sempre é conveniente... Informação é perdida A quantidade de informação que pode ser armazenada para resolver o problema na memória principal é limitada

ARQUIVO Um arquivo é armazenado em um dispositivo de memória secundária Pode-se ler e guardar (escrever) dados em um arquivo Permite manter algumas informações para uso posterior Exemplo: cadastro de alunos, cadastro de vendas de uma empresa,

4 EXEMPLOS Arquivo de inteiros 1 56 0 23 Arquivo de reais 21.5-2.67 3.75 0.6 Arquivo de vetores de tamanho 4 composto por inteiros ( 1, 23, -12, 4) (56, 0, 65, 2) ( 0, 41, -7, 60) Arquivo de cadeia de caracteres Representação Simbólica Casa Lua Giz Rio

5 EXEMPLOS Arquivo de Registros HT 1 Nome CPF FGTS 1.1 FGTS 2.1 RG FGTS 1.1 Salário FGTS 2.1 FGTS 1.1 FGTS 1.2 HT 1 HT 2 HT 3 HT 4 HT 5 HT 2 HT 3 HT 4 HT 5 HT 6 FGTS 2.1 FGTS 2.2 HT 1 Nome CPF FGTS 1.1 FGTS 2.1 RG FGTS 1.1 Salário FGTS 2.1 FGTS 1.1 FGTS 1.2 HT 1 HT 2 HT 3 HT 4 HT 5 HT 2 HT 3 HT 4 HT 5 HT 6 FGTS 2.1 FGTS 2.2 Representação Simbólica HT 1 Nome CPF FGTS 1.1 FGTS 2.1 RG FGTS 1.1 Salário FGTS 2.1 FGTS 1.1 FGTS 1.2 HT 1 HT 2 HT 3 HT 4 HT 5 HT 2 HT 3 HT 4 HT 5 HT 6 FGTS 2.1 FGTS 2.2

COMPARAÇÃO Vetores/Matrizes Armazenam pequena quantidade de informação Ao término do programa, todas as informações armazenadas são perdidas Restrito as definições da linguagem de programação Tamanho da variável deve ser definida antes do uso Arquivo Armazenam grandes quantidades de informações Mantém informações armazenadas na memória secundária Variável do tipo file é um tipo de dado que existe independentemente de qualquer programa e pode ser acessado por outros programas Depende do espaço disponível do disco;

7 MANIPULAÇÃO DE ARQUIVOS Funções em C para arquivos fopen(), fclose(), ferror(), fputc(), fgetc(), fputs(), fgets(), fwrite(), fread(), fseek(), feof(), rewind() Biblioteca stdlib.h

8 CRIAR OU ABRIR ARQUIVO Definição de variável do tipo arquivo: FILE *arq; arq é uma variável que é capaz de identificar (apontar) para um arquivo no disco.

9 CRIAR OU ABRIR ARQUIVO Definição de variável do tipo arquivo: Função fopen(): abre ou cria um arquivo, retornando o ponteiro apontado para o mesmo. FILE *arq; arq = fopen(nome_arquivo, modo_abertura)

0 CRIAR OU ABRIR ARQUIVO Função fopen(): abre ou cria um arquivo, retornando o ponteiro apontado para o mesmo. arq = fopen(nome_arquivo, modo_abertura) nome_arquivo: string contendo o nome do arquivo para abrir ou criar, podendo incluir um path modo_abertura: string que representa como o arquivo será aberto: escrita, leitura...

CRIAR OU ABRIR ARQUIVO arq = fopen(nome_arquivo, modo_abertura) w r a wb rb ab Cria um arquivo texto para operações de escrita (apaga se ele já existir) Abre um arquivo texto para operações de leitura Abre um arquivo texto para anexar novos dados (no final) Cria um arquivo binário para operações de escrita (apaga se ele já existir) Abre um arquivo binário para operações de leitura Abre um arquivo binário para anexar novos dados (no final)

CRIAR OU ABRIR ARQUIVO w+ Cria um arquivo texto para operações de escrita e leitura (apaga se o arquivo já existir) r+ Abre um arquivo texto para operações de leitura e escrita (o arquivo deve existir) a+ Anexa novos dados ou cria um arquivo texto para operações de leitura e escrita (se o arquivo não existir, cria o arquivo) wb+ rb+ ab+ Cria um arquivo binário para operações de escrita e leitura (apaga se o arquivo já existir) Abre um arquivo binário para operações de leitura e escrita (o arquivo deve existir) Anexa novos dados ou cria um arquivo binário para operações de leitura e escrita (se o arquivo não existir, cria o arquivo)

3 CRIAR OU ABRIR ARQUIVO Exemplo: FILE *arq1, *arq2; arq1 = fopen( arquivo1.txt, w ); arq2 = fopen( texto.txt, a+ );

4 CRIAR OU ABRIR ARQUIVO Importante verificar se o arquivo foi criado ou aberto com sucesso! FILE *arq1, *arq2; arq1 = fopen( arquivo1.txt, w ); if (arq1==null) { printf( Erro na criação do arquivo); getch(); return(0); } else {...}

5 FECHAR ARQUIVO Função fclose(): fecha um arquivo. É importante que todo arquivo aberto seja fechado antes de terminar o programa. int fclose(arq); arq: ponteiro para um arquivo obtido pela função fopen()

6 ARQUIVO - MODO TEXTO Gravação e Leitura: função fputs(): escreve uma cadeia de caracteres em um arquivo fputs(cadeia_caracteres, arq) função fgets(): lê uma cadeia de caracteres de um arquivo até tam ou até encontrar LF fgets(cadeia_caracteres, tam, arq)

7 ARQUIVO - MODO TEXTO #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { FILE *arq; char texto[80]; arq = fopen("arquivo.txt", "a+"); if (arq == NULL) { printf("erro na abertura do arquivo\n"); return(0); } else { printf("grava linha a linha no arquivo\n"); printf("digite um texto ou <enter> para sair...\n"); gets(texto); while (strlen(texto) > 0) { fputs(texto, arq); fputs("\n", arq); gets(texto); } fclose(arq); } system("pause"); return 0; } O que faz esse programa??

8 ARQUIVO - MODO TEXTO #include <stdio.h> #include <stdlib.h> #include <string.h> //Gravar linhas em arquivo texto int main(int argc, char *argv[]) { FILE *arq; char texto[80]; arq = fopen("arquivo.txt", "r"); //w, a, r if (arq == NULL) { printf("arquivo nao encontrado...\n"); return(0); } else { printf("arquivo aberto com sucesso!! \n"); printf("leitura do arquivo\n"); O que faz esse programa?? while (fgets(texto, 80, arq)!= NULL) { printf("%s", texto); getch(); } fclose(arq); } system("pause"); return 0; }

9 ARQUIVO - MODO BINÁRIO Gravação: função fwrite(): escreve qualquer tipo de dados em um arquivo fwrite(&estrutura, tamanho, qtde, arq) Exemplos: fwrite(&agenda, sizeof(agenda), 1, arq) fwrite(&x, sizeof(int), 1, arq)

0 ARQUIVO - MODO BINÁRIO Leitura: função fread(): lê qualquer tipo de dados em um arquivo fread(&estrutura, tamanho, qtde, arq) Exemplos: fread(&agenda, sizeof(agenda), 1, arq) fread(&x, sizeof(int), 1, arq)

1 ARQUIVO - MODO BINÁRIO #include <stdio.h> #include <string.h> typedef struct { int placa; char nome[30]; char tipo[15]; } REG1; int main() { FILE *fptr = NULL, *fptr1=null; int op; do { printf("\t\tprograma Exemplo para Manipulacao de Arquivos\n\n"); printf("\t1 - Ler arquivo\n"); printf("\t2 - Gravar arquivo\n"); printf("\t3 - Sair do programa\n"); scanf("%d", &op); switch (op) { case 1: ler_arq(fptr); break; case 2: grava_arq(fptr); break; case 3: return(0); break; default: break; } } while (op!= 3); }

ARQUIVO - MODO BINÁRIO int grava_arq(file *fptr) { char conf; REG1 carro; if ((fptr = fopen("carro.arq", "ab+")) == NULL) { printf("nao posso abrir o arquivo\n"); getchar(); return(0); } fflush(stdin); printf(" \t\t Cadastro de Dados no Arquivo\n\n" ); printf("digite a placa do carro ou 0 para sair: "); scanf("%d", &carro.placa); while(carro.placa!= 0) { printf("proprietario= "); fflush(stdin); gets(carro.nome); printf("tipo= "); gets(carro.tipo); printf("confirma informacoes (S/N)?"); fflush(stdin); scanf("%c", &conf); if (conf == 's') fwrite(&carro, sizeof(carro), 1, fptr); fflush(stdin); printf("digite a placa do carro ou 0 para sair: "); scanf("%d", &carro.placa); } fclose(fptr); return(0); }

ARQUIVO - MODO BINÁRIO int ler_arq(file *fptr) { REG1 carro; if ((fptr = fopen("carro.arq", "rb")) == NULL) { printf("arquivo nao existente...\n"); getch(); return(0); } printf ("\t\tvisualizando informacoes do Arquivo...\n\n\n"); } while(fread(&carro, sizeof(carro),1,fptr) == 1) { printf("placa = %d\n",carro.placa); printf("proprietario = %s\n", carro.nome); printf("tipo = %s\n\n", carro.tipo); getch(); } fclose(fptr); return(0);