computação eletrônica aula 12 – arquivos texto e binárioluciano/cursos/ce/arquivos.pdf ·...

37
CIn.ufpe.br Computação Eletrônica Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa

Upload: others

Post on 07-Aug-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

ComputaçãoEletrônicaAula12–ArquivosTextoeBinárioProf:LucianoBarbosa

Page 2: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

RelembrandoaArquiteturaBásicadeumComputador

Atéagora,todaainformaçãoarmazenadapornossosprogramasestavanamemóriaRAM,queérápida,porém,volátil.

Hojeaprenderemosarmazenarinformaçãonamemóriasecundária(disco),queélenta,porém,persistente.

Page 3: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

Arquivo•  Definição:elementodeinformaçãoarmazenadonamemória

secundária(disco)docomputador•  Características:

–  Informaçõespersistemapósofechamentodosprogramaseatémesmoapósodesligamento(seguro)docomputador;

–  Atribuem-senomesaoselementosdeinformação(arquivosediretórios),emvezdeendereçosdememória;

–  Acessoàsinformaçõesémaislento.

Page 4: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

ModosdeAcessoaArquivos–  ModoTexto:

•  Caracteresquepodemserlidosporpessoas•  Ex.:Códigofontedeumprograma(Cubo.c)•  Outrosexemplos:.txt,.bat,.cpp,.h

–  ModoBinário:•  Valoresbinários•  Nãopodemserlidosquandoabertasemeditoresdetextosimples.

•  Ex.:Programaexecutável:(Cubo.exe)•  Outrosexemplos:.docx,.pdf,.xlsx,.jpg,.gif,.mp3

Ex.:códigofonte(texto)

Ex.:programaexecutável(binário)

Page 5: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

ModoBinário

•  Dadossãoarmazenadosdamesmaformaquesãoarmazenadosnamemóriaprincipal

•  Vantagens:–  Facilmenteinterpretadosporprogramas;–  Compactação–  Maiorvelocidadedemanipulação;

•  Desvantagens:–  Difícilleitura

Page 6: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

ModoTexto•  Sequênciadecaracteresagrupadosemlinhas•  Linhasseparadasporumcaracteredenovalinha(‘\n’,emC)•  Vantagens:

–  Podeserlidofacilmenteporumapessoa–  Editadoporeditoresdetextoconvencionais

•  Desvantagens–  Codificaçãodoscaracterespodevariar(ASCII,UTF-8,ISO-8859,etc)–  Arquivostendemasermaiores(todasosdadossãoconvertidospara

caracteres).•  Ex:número2147483647

–  Embinário:inteirode32bits–  Emtexto:10caracteres(80bits).

•  Pioraparareais:123456789,987654321podeserbemrepresentadoporumfloatde32bits.

Page 7: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

OperaçõesemArquivosemC•  Abertura(open):

–  SistemaOperacional(SO)encontraarquivopelonome–  Preparabuffernamemóriaparaarmazenaroarquivo

•  Leitura(read):–  SOrecuperaotrechosolicitadodoarquivo–  Partedoarquivoouoarquivotodopodevirdobuffer

•  Escrita(write):–  SOalteraconteúdodoarquivo–  Aalteraçãoéfeitaprimeironobufferparadepoissertransferidaparao

disco–  Pergunta:quando?Resposta:periodicamenteounofechamentodoarquivo

•  Fechamento(close):–  Ainformaçãodobufferéatualizadanodisco–  Áreadobufferutilizadanamemóriaéliberada

Page 8: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

AberturadeArquivos•  Afunçãodeaberturadearquivoséfopendastdio.h:

•  Nome:Nomedoarquivo•  FILE:PonteiroparaoarquivoabertoouNULL,sehouvererronaabertura•  Modo:

o  “t”(text):Indicamodotexto(podeseromitido);o  “b”(binary):Indicamodobinário(obrigatórioseomodobinárioforopretendido);o  “r”(read):Indicaleitura(oarquivodeveexistir);o  “w”(write):Indicaescrita.Criaoarquivoseomesmonãoexistirouapagaoconteúdo

seexistir;o  “a”(append):Indicaescritasemprenofinaldoarquivo.Criaoarquivoseomesmo

nãoexistir;o  “r+”(read/update):Indicaaberturadeumarquivoexistenteparaatualizarseu

conteúdo;o  “w+”(write/update):Criaumarquivovazioparaescritaeleitura.Apagaoarquivoseo

mesmojáexistir;o  “a+”(append/update):Omesmoque“w+”,porémcomescritasapenasnofinaldo

arquivo.

Page 9: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

AberturadeArquivos

•  Exemplo:

•  Nome:“arqtext.txt”;•  Tipodeabertura:

–  “w”(write):Criaumarquivoparaescritaemmodotexto.Seoarquivoexistireleserádestruídoereinicializado.Senãoexistir,serácriadoumarquivovazio.

–  Senãoforpossívelaabertura,afunçãofopenretornaráNULLemfptr.–  OSOmantémum“cursor”queindicaaposiçãodetrabalhonoarquivo.

NomedoArquivo TipodeAbertura

Page 10: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  Exemplo:

•  Nome:“arqtext.txt”;•  Tipodeabertura:

–  “w+”(write/update):Criaumarquivoparaescritaeleituraemmodotexto.Seoarquivoexistireleserádestruídoereinicializado.Senãoexistir,serácriado.

–  Senãoforpossívelaabertura,afunçãofopenretornaráNULLemfptr.–  OSOmantémum“cursor”queindicaaposiçãodetrabalhonoarquivo.

AberturadeArquivos

Page 11: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  Exemplo:

•  Nome:“arqtext.txt”;•  Tipodeabertura:

–  “wb”(write/binary):Criaumarquivoparaescritaemmodobinário.Seoarquivoexistireleserádestruídoereinicializado.Senãoexistir,serácriado.

–  Senãoforpossívelaabertura,afunçãofopenretornaráNULLemfptr.–  OSOmantémum“cursor”queindicaaposiçãodetrabalhonoarquivo.

AberturadeArquivos

Page 12: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  Apósleitura/escritadoarquivo,devemosfechá-lo•  Garantequequalquerinformaçãonobuffernamemóriaseja

gravadanodisco•  Afunçãodefechamentodearquivoséfclosedastdio.h:

•  FILE*fp:ponteiroparaoarquivoaberto;•  Retorno(int):0(zero)seoarquivoforfechadocomsucesso.•  Exemplo:

FechamentodeArquivos

Page 13: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  Acadaoperaçãodeleitura:–  Dadoslidos–  Cursoravançaeapontaparaopróximodado

•  Funçãofscanfdabibliotecastdio.h–  Similarascanf,comumparâmetroamaisqueéoponteiroparao

arquivodoqualosdadosserãolidos.–  Lêdeumarquivopassadocomoparâmetroemvezdesomenteda

entradapadrão(teclado);–  Podelertambémdaentradapadrão(arquivostdin)

Leitura(ModoTexto)

Page 14: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  funçãofscanf:

•  fp:éoponteiroparaoarquivo•  formato:equivaleaoscódigosdeformatação(iguaisaodo

scanf)•  endereco_variaveis:correspondeàlistadeendereçosde

variáveisquearmazenarãoosdadoslidosdoarquivo,assimcomonoscanf

•  Retornanúmerodebyteslidoscomsucesso

Leitura(ModoTexto)

Page 15: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  Acadaoperaçãodeleitura,osdadoscorrespondentessãoconvertidosdecaracteresparaotipo(formato)especificadoemfscanf;

•  Arquivodevetersidopreviamentegravadoemmodotexto;

Leitura(ModoTexto)

Lêumastringdoarquivoapontadoporfpdeaté120caracteresearmazenaemprimeiraPalavra

Page 16: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  Funçãofgetc:

–  Lêumcaracteredeumarquivo–  Retornaocódigodocaracterelido–  RetornaaconstanteEOFseofimdoarquivoforalcançado

•  Funçãofgets:

–  Lêumasequênciadecaracteresatéque‘\n’sejaencontradoouquencaracterestenhamsidolidos

–  séacadeiadecaracteresquearmazenaráoqueforlido–  néonúmeromáximodecaracteresaseremlidos–  fppodeserumponteiroparaoarquivodaentradapadrão(teclado)

stdin–  Retornaponteiroparaacadeias

Leitura(ModoTexto)

Page 17: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  Exemplo:–  Programacontanúmerodecaracteresenúmerodelinhasdeumarquivo

Leitura(ModoTexto)

Lêcaractereeaindaverificasechegounofimdoarquivo

Page 18: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  Exemplo:–  Programainformaalinhadaprimeiraocorrênciadeumapalavranoarquivo

Leitura(ModoTexto)

Lêcaractereeaindaverificasechegounofimdoarquivo

strstrverificaseumastringésubstringdeoutra(string.h)

Page 19: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  Operaçãodeescrita–  Dadossãogravadosnamemória–  Posteriormentenodisco–  Cursoravançaparaapróximaposiçãodoarquivo

•  Funçãofprintfdabibliotecastdio.h–  Similaraprintf,comumparâmetroamaisqueéoponteiroparao

arquivo–  Escreveemumarquivopassadocomoparâmetroemvezdesomentena

saídapadrão(monitor)–  Podeescrevertambémnasaídapadrão(arquivostdout)

Escrita(ModoTexto)

Page 20: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  Funçãofprintf:

–  fp:éoponteiroparaoarquivo–  formato:equivaleaoscódigosdeformatação(iguaisaodoprintf)–  variáveis:correspondeàlistadevariáveis,cujosconteúdosserãoescritos

noarquivo–  Retorna:númerodebytesescritoscomsucesso

•  Acadaoperaçãodeescrita,osdadoscorrespondentessãoconvertidosdotipoespecificadoemformatoparacaracteres.

Escrita(ModoTexto)

Page 21: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  Exemplo:–  Programaescreveumapalavradenomáximo120caracteresemum

arquivotexto:

Escrita(ModoTexto)

Page 22: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  Funçãofputc:

–  Escreveumcaractereemumarquivo;–  Retornaocódigodocaractereescrito.

•  Funçãofputs:

–  séacadeiadecaracteresqueseráescrita;–  Retornaponteiroparaacadeias.

Escrita(ModoTexto)

Page 23: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

Escrita(ModoTexto)–Exemplo:Programaquelêumarquivoegeraoutrocomtodasasletrasconvertidasparamaiúsculas

Usuárioforneceonomedoarquivo

toupper:funçãodefinidaemctype.hqueconverteumcaractereparamaiúsculo.

Page 24: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

OutrasFunçõesÚteis(stdio.h)

•  ftell:–  Retornaaposiçãoatualdocursordoarquivo–  Correspondeàdistânciaembytesemrelaçãoaocomeçodoarquivo

•  fseek:–  Utilizadaparaposicionamentodocursoremumarquivo;–  dist-onúmerodebytesemrelaçãoàorigem;–  origem-umaposiçãodocursordoarquivoembytes;–  Constantes:SEEK_CUR:posiçãocorrente;SEEK_SET:iníciodoarquivo;

SEEK_END:finaldoarquivo;–  Retornaanovaposiçãodocursor;

•  rewind:–  Utilizadaparaposicionamentodocursornoiníciodoarquivo.

Page 25: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

Escrita(ModoTexto)–Exemplo:Programaqueescreveumavariável(aluno1)dotipoAluno(struct)emumarquivotexto,retornaparaoiníciodoarquivo(rewind)elêainformaçãodoalunoemoutravariável(copia)

Deve-seleregravarcampoporcampo

Page 26: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  Funçãofeofemstdio.hrealizaaverificaçãodefimdearquivo:

•  Retorna1seofimdoarquivofoiatingidoou0casocontrário

VerificandooFinaldoArquivo

Page 27: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  Exemplo:

VerificandooFinaldoArquivo

Page 28: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  funçãofread:

•  p-endereçodememóriaondeseráarmazenadooqueforlidodoarquivo;

•  tam-tamanhoembytesdecadaelementolido;•  nelem-númerodeelementosdetamanhotamlidos;•  Retornaaquantidadedebyteslidoscomsucesso(tam*nelem);

Leitura(ModoBinário)

p->

tam=5bytes

nelem=3elementos

Page 29: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

Leitura(ModoBinário)

•  Exemplo:Abreoarquivoemmodobinário

paraleitura

LêumaestruturaPontodoarquivo:tam:sizeof(Ponto)nelem:1

Page 30: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  Emcadaoperaçãodeescrita,osdadossãogravadosnamemóriaeposteriormentenodisco,eocursoravançaparaapróximaposiçãodoarquivo;

•  Afunçãofwritedabibliotecastdio.hpodeserutilizadaparaescritadeblocosdedadosemumarquivobinário.

Escrita(ModoBinário)

Page 31: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  Funçãowrite:

–  péoendereçodememóriacujoconteúdodeseja-sesalvaremarquivo;

–  taméotamanhoembytesdecadaelementoescrito;–  neleméonúmerodeelementosdetamanhotamescritos;–  Retornaaquantidadedebytesescritoscomsucesso(tam*nelem)

Escrita(ModoBinário)

p->

tam=5bytes

nelem=3elementos

Page 32: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

•  Exemplo:

Escrita(ModoBinário)

Abreoarquivoemmodobinárioparaescrita

GravaumaestruturaPontonoarquivo:tam:sizeof(Ponto)nelem:1

Page 33: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

fread/fwrite:

•  Ler/escrevergrandesblocosdedadosemumarquivo;•  Úteisparaler/escreverestruturasouvetoresemumarquivo

numaúnicachamadadefunção.

Page 34: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

Exemplo

Page 35: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

Exemplo

Page 36: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

Atividade•  Façaumprograma“Agenda”paracadastraraté1000contatos.•  Cadacontatodeveconter:Nome,telefone,e-maileprofissão;•  Aoiniciaroprogramadeveserlidooarquivo“contatos.txt”contendo

oscontatospreviamentesalvosemumvetordeponteirosparaestruturas;

•  Emumlaçooprogramadeveexibirummenucomquatroopções:1.  Cadastrarcontato;2.  Listarcontatoscadastrados;3.  Removercontato;4.  Salvar;5.  Terminaroprograma;

•  Quandoousuárioescolherumaopção,oprogramadeveexecutaraopçãoselecionadaeexibiromenunovamente,atéqueaopção5(Terminaroprograma)sejaselecionada.

Page 37: Computação Eletrônica Aula 12 – Arquivos Texto e Binárioluciano/cursos/ce/arquivos.pdf · Aula 12 – Arquivos Texto e Binário Prof: Luciano Barbosa CIn.ufpe.br Relembrando

CIn.ufpe.br

Atividade•  Cadastrarcontato:

–  Solicitaosdadosdocontatoeinsereemumaposiçãolivredovetor•  Listarcontatos:

–  Exibetodosdadosdetodososcontatoscadastrados,oíndicedasuaposiçãonovetor.

•  Removecontato:–  Solicitaoíndicedocontatoqueseráremovido–  Removeocontatodovetor,liberandosuamemória–  Marcaaposiçãodovetorcomolivre(NULL)

•  Salvar:–  Salvaosdadosdovetornoarquivotexto:contatos.txt

•  Terminaoprograma:–  Finalizaaexecuçãodoprograma.