Visualizar:
▼ Postagens (3)14
Dez14
Dezhttp://goulart.pro.br/arquivos.html
ARQUIVOS EM DISCO
Entrada e Saída
STREAMS são usados para ler e escrever em C.
Um STREAM pode ser uma dispositivo padrão do sistema ou um arquivo específico.
STREAM texto, quando o sistema operacional manipula os dados antes de entregar ao programa C
STREAM binário, não tem transformação pelo sistema operacional o que vem do Programa e vai para o arquivo é igual.
Existem uma associação do STREAM ao arquivo na hora do open. Nem todos os arquivos suportam todas as operações.
O Close desassocia o STREAM do arquivo e força a transferência da área de buffer para o arquivo.
Funções que realizam E/S em console
Getchar() Lê um caracter do teclado; aguarda um enter
Getche() Lê um caracter com eco; não aguarda enter
Getch() Lê um caracter sem eco; não aguarda enter
Putchar() Escreve um caracter na tela
Gets() Lê um string do teclado
Puts() Escreve um string para a tela
E/S Formatada
Printf()
Scanf()
E/S ANSI -- Stream/ Arquivo
fopen() Abre um STREAM (arquivo)
fclose fecha um STREAM (arquivo)
putc() Escreve um caracter
getc() Lê um caracter
fseek() Procura por um byte específico
fprintf() Igual ao printf() do console.
fscanf() Igual ao scanf() do console
feof() Retorna verdadeiro se encontrou fim arquivo
ferror() Retorna verdadeiro se ocorreu erro
fread() le um bloco de dados
fwrite escreve um bloco de dados
rewind() reposiciona o lacalizador no inicio do arquivo
remove() apaga um arquivo
No Open de arquivos, Valores legais para o modo:
"r" abre um arquivo para leitura
"w" cria uma arquivo para escrita
"a" acrescenta dados a um arquivo já existente
"rb" abre um arquivo binário para leitura
"wb" cria um arquivo binário para escrita
"ab" acrescenta dados a um arq binário existente
"r+" abre um arquivo para leitura/escrita
"w+" cria um arquivo para leitura/escrita
"a+" acrescenta dados/cria um arq para leit/escrita
"r+b" abre um arquivo binario para leitura/escrita
"w+b" cria um arquivo binário para leitura/escrita
"a+b" acrescenta ou cria um arq bin para leit/escrita
"rt" abre um arquivo texto para leitura
"wt" cria um arquivo texto para leitura
"at" acrescenta dados a um arquivo texto
"r+t" abre um arquivo texto para leitura/escrita
"w+t" cria um arquivo texto para leitura/escrita
"a+t" acrescenta ou cria arq. texto para leit/escrita
Open de Arquivos
protótipo da função: FILE *fopen(char *nome_de_arquivo, char *modo)
FILE *fp;
if ((fp=fopen("teste", "w")) == NULL)
{ puts("nao posso abrir o arquivon");
exit(1);
}
Escrevendo um Caracter
protótipo da função : int putc(int ch, FILE *fp);
Lendo um Caracter
protótipo da função : int getc(FILE *fp);
ch = getc(fp);
while (ch!=EOF) {
ch = getc(fp);
}
Encontrando fim de Arquivo
Determina fim de arquivos para leitura binária (em especial).
protótipo da função: int feof(FILE *fp);
while (!feof(fp)) ch = getc(fp);
Fechando um Arquivo
protótipo da função: int fclose(FILE *fp);
Função Erro e Rewind
protótipo da função: int ferror(FILE *fp);
void rewinf(FILE *fp);
Exemplo de uso da funções de E/S
/* Ktod - cria arquivo em disco.. */
#include <stdio.h>
#include <stdlib.h>
main (int argc, char *argv[])
{
FILE *fp;
char ch;
if (argc !=2) { printf ("Falta nome do arquivo n");
exit (1);
}
if ((fp=fopen (argv[1], "w")) == NULL)
{
printf ("o arquivo naopode ser aberton");
exit (1);
}
do
{
ch = getchar ();
if (EOF == putc(ch,fp))
{
printf("Erro no arquivo durante gravacao");
break;
}
}
while (ch!= '$');
fclose (fp);
return 0;
}
Exemplo de cópia de arquivos - disco
/* Copia de um arquivo */
/* COPYARQ copia arquivo em disco.. */
#include <stdio.h>
#include <stdlib.h>
main (int argc, char *argv[])
{
FILE *entr, *saida;
char ch;
if (argc !=3) { printf ("Falta nome do arquivo n");
exit (1);
}
if ((entr=fopen (argv[1], "rb")) == NULL)
{
printf ("o arquivo entrada nao pode ser aberton");
exit (1);
}
if ((saida=fopen (argv[2], "wb")) == NULL)
{
printf ("o arquivo saida nao pode ser aberton");
exit (1);
}
/* copiando o arquivo */
while(!feof(entr))
{
ch = getc (entr);
if(ferror(entr)) {
printf("erro lendo o arquivo");f
break;
}
putc (ch, saida);
if(ferror(saida)) {
printf("erro na gravacao do arquivo");
break;
}
}
fclose (entr);
fclose (saida);
return 0;
}
Funções getw() e putw()
São funções não padrão ANSI usadas para ler e escrever inteiros de e para arquivos em disco.
protótipos: int putw(int i, FILE *fp);
int getw(FILE *fp);
Funções fgets() e fputs()
São funções para ler e escrever strings.
protótipo : char *fputs(char *str, FILE *fp);
char *fgets(char *str, int tamanho, FILE *fp);
Funções fread() e fwrite()
São funções que permitem ler e gravar blocos de dados.
protótipo : unsigned fread(void *buffer, int num_bytes
int count,FILE *fp);
unsigned fwrite(void *buffer, int num_bytes,
int count,FILE *fp);
Função fseek()
Para acesso randomico.
protótipo : int fseek(FILE *fp, long numbytes, int origem);
origem pode ser:
Começo do arquivo SEEK_SET 0
Posição corrente SEEK_CUR 1
Fim do arquivo SEEK_END 2
Exemplo: Programa DUMP
/* DUMP : Um utilitario para visualizar disco
usando fseek - do livro Turbo C , Schildt
pag. 228 */
#include <stdio.h>
#include <ctype.h> /* devido ao isprint() */
#include <stdlib.h> /* devido ao exit() */
#define TAMANHO 128
char buf [TAMANHO];
void display (int numlido);
main (int argc, char *argv[])
{
FILE *fp;
int setor, numlido;
/* verifica num de argumentos */
if (argc != 2)
{
printf("use: dump nome do arquivon");
exit(1);
}
if ((fp=fopen(argv[1], "rb")) == NULL)
{
printf("o arquivo nao pode ser aberto n");
exit (1);
}
for(;;)
{
printf("informe o setor (-1 para terminar): ");
scanf("%ld", &setor);
if(setor < 0) break;
if(fseek(fp, setor*TAMANHO, SEEK_SET))
printf("erro de buscan");
if((numlido=fread(buf, 1, TAMANHO, fp)) != TAMANHO)
printf("EOF encontrado n");
display(numlido);
}
return 0;
}
/* funcao para exibir arquivo */
void display(int numlido)
{
int i, j;
for(i=0; i< numlido/16; i++)
{
for (j=0; j<16; j++) printf("%3X", buf [i*16+j]);
printf("|");
for (j=0; j<16; j++)
{
if (isprint (buf [i*16 + j])) printf("%c",
buf[i*16+j]);
else printf(".");
}
printf("n");
}
}
Site de origem: http://goulart.pro.br/arquivos.html
04
AbrAlgoritmo diz se você é maior ou menor de idade:
// Função : diz se voce é maior ou menor de idade
// Autor : Thaysa
// Data : 17/4/2008
// Seção de Declarações
var
idade1 : real
nome : caractere
inicio
// Seção de comandos
escreva(“Qual é o seu nome? “)
leia (nome)
escreva(“Digite sua idade : “)
leia (idade1)
se idade1 <=18 entao
escreva(nome, ” você é menor de idade”)
senao
escreva(nome, ” você é maior de idade”)
fimse
fimalgoritmo
Algoritmo calcula peso de bois:
// Função : calcula peso entre bois
// Autor : Thaysa
// Data : 24/5/2009
// Seção de Declarações
// Seção de Declarações
var
menor, maior, peso: real
i, cod_menor, cod_maior: inteiro
inicio
// Seção de Comandos
limpatela
menor<-10000
maior<-0
para i de 1 ate 9 faca
escreva(“Digite o peso do boi”,i,”: “)
leia(peso)
se (peso
menor<-peso
cod_menor<-i fimse se (peso>maior)entao
maior<-peso
cod_maior<-i
fimse
fimpara
escreval(“O boi”,cod_menor,”com”,menor,” Kg foi o mais leve”)
escreval(“O boi”,cod_maior,”com”,maior,” Kg foi o mais pesado”)
fimalgoritmo
Algoritmo lê um nome e diz se corresponde ao seu:
// Função : le um nome do teclado e diz sé igual ao seu nome.
// Autor : THAYSA
// Data : 1/5/2009
// Seção de Declarações
var
nome : caractere
inicio
// Seção de Comandos
Escreva (“Digite seu nome: “)
leia (nome)
se (nome) = “Thaysa” entao
escreva (“Correto”)
senao
escreva (“Incorreto”)
fimse
fimalgoritmo
Algoritmo identifica o tipo de triângulo:
// Função : triangulos
// Autor : Thaysa
// Data : 13/5/2009
// Seção de Declarações
var
a,b,c : real
inicio
// Seção de Comandos
escreva(“entre com o valor de a: “)
leia(a)
escreva(“entre com o valor de b: “)
leia(b)
escreva(“entre com o valor de c: “)
leia(c)
se (A
escreval(“Estes valores formam um triangulo”)
se (A=B) e (B=C) entao
escreva (“Triangulo Equilátero”)
senao
se (A=B) ou (B=C) ou (A=C) entao
escreva (“Triângulo Isósceles”)
senao
escreva (“Triangulo Escaleno”)
fimse
fimse
senao
escreva (“Estes valores não formam um triângulo”)
fimse
fimalgoritmo
Algoritmo calcula IMC:
// Função : calcula IMC
// Autor : Thaysa
// Data : 29/4/2009
// Seção de Declarações
var
numimc, peso, altura, somapesos : numerico
inicio
// Seção de Comandos
Escreval (“Entre com o seu peso: “)
leia (peso)
Escreval (“Entre com a sua altura: “)
leia (altura)
somapesos <- (peso/altura^2)
escreval (“seu imc é”, somapesos)
fimalgoritmo
Algoritmo lê três numeros reais e diz se ele é maior que a soma dos outros dois:
// Função : Lê 3 numeros reais e verifica se o primeiro é maior que a soma dos outros dois
// Autor : Thaysa
// Data : 29/4/2009
// Seção de Declarações
var
num1, num2, num3, total : numerico
inicio
// Seção de Comandos
Escreva (“Digite um número : “)
leia (num1)
Escreva (“Digite outro número : “)
leia (num2)
Escreva (“Digite mais um número : “)
leia (num3)
total <- (num2+num3)
se total <= num1 entao
escreva (” Maior “)
senao
escreva (” Menor “)
fimse
fimalgoritmo
Algoritmo que descobre a sua idade:
// Função : descobre idade
// Autor : Thaysa
// Data : 24/5/2009
// Seção de Declarações
var
nome : caractere
idade, ano1, ano2 : numerico
inicio
// Seção de Comandos
repita
escreval (” digite o nome: “)
leia (nome)
escreval (“digite o ano de nascimento: “)
leia (ano1)
escreval (“digite o ano atual: “)
leia (ano2)
idade <-ano2 – ano1
escreval (nome, idade)
escreva
ate idade=25
fimalgoritmo
Algoritmo que diz quanto você gastou comprando cigarros:
// Função : diz quanto você gastou comprando cigarros
// Autor : Thaysa
// Data : 28/04/2009
// Seção de Declarações
var
anos, cigdia : numerico
cart, gasto : real
inicio
// Seção de Comandos
Escreva (“N° de cigarros fumados por dia”)
leia (numcigdia)
Escreva (“Quantidade de anos que você fuma”)
leia (numeanos)
Escreva (“Preço do maço de cigarros”)
leia (precocart)
gastototal<- ((anos*365)*cigdia)*cart/20
Escreva (“Você ja gastou um total de R$ “)
Escreva (gasto)
Escreva (” em maço de cigarros!”)
fimalgoritmo
Algoritmo calcula média entre alunos:
// Função : calcula media
// Autor : Thaysa
// Data : 17/6/2009
// Seção de Declarações
var
idade, Cont_H, Cont_M, idade_H, idade_M : inteiro
sexo : caractere
inicio
idade 0 faca
escreva (“Digite o Sexo, [H] ou [M]: “)
leia(sexo)
escreva (“Digite a idade: “)
leia(idade)
se sexo=”H” entao
idade_H <- idade_H + idade
Cont_H <- Cont_H + 1
senao
se sexo="M" entao
idade_M <- idade_M + idade
Cont_M <- Cont_M + 1
fimse
fimse
fimenquanto
escreval ("A media dos alunos de Sexo H é ", Idade_H/Cont_H)
escreva ("A media dos alunos de Sexo M é ", Idade_M/Cont_M)
fimalgoritmo
Algoritmo calcula média de um aluno e dá resultado:
// Função : calcula media e da resultado
// Autor : Thaysa
// Data : 13/4/2008
// Seção de Declarações
var
n1, n2, n3, M : numerico
nome : caractere
inicio
// Seção de Comandos
escreva (“Qual seu nome? “)
leia (nome)
escreva (“Digite a primeira nota “)
Leia (n1)
escreva (“Digite a segunda nota “)
Leia (n2)
escreva (“Digite a terceira nota “)
Leia (n3)
Escreva (“As notas são”, n1)
Escreva (“,”, n2)
Escreva (” e”, n3)
M =7 entao
escreval (“Condição do aluno: Aprovado”)
senao
escreval (“Condição do aluno: Reprovado”)
fimse
Escreva (“”)
fimalgoritmo
Algoritmo lê um número e diz seu sucessor:
// Função : le numero e diz sucessor
// Autor : Thaysa
// Data : 28/04/2009
// Seção de Declarações
var
num, total : numerico
inicio
// Seção de Comandos
escreva (“Digite um numero: “)
leia (num)
total <- (num+1)
escreva (total)
escreva (" é o seu sucessor")
fimalgoritmo
Algoritmo lê três números e põe em ordem crescente:
// Função : ler 3 numeros e por em ordem crescente!
// Autor :
// Data : 19/05/2009
// Seção de Declarações
var
a,b,c : numerico
inicio
// Seção de Comandos
leia (a,b,c)
se (a=b) ou (b=c) entao
escreva (“Alguns ou todos os numeros sao iguais “)
senao
se (a<b) e (a<c) entao//a é menor
se (b<c) entao
escreva (a,b,c)
senao escreva (a,c,b)
fimse;
fimse;
se (b<a) e (b<c) entao//b é menor
se (a<c) entao
escreva (b,a,c)
senao escreva (b,c,a)
fimse
fimse
se (c<a) e (c<b) entao//c é menor
se (a<b) entao
escreva (c,a,b)
senao escreva (c,b,a)
fimse
fimse
fimse
fimalgoritmo
Algoritmo lê número e acrescenta 30% sobre ele:
// Função : acrescenta 30% a um numero
// Autor : Thaysa
// Data : 07/05/2009
// Seção de Declarações
var
num, percent: numerico
inicio
// Seção de Comandos
escreva (“Digite um Valor “)
leia (num)
percent <- (num*(30/100))
escreva ("Seu valor é ",percent)
fimalgoritmo