quinta-feira, 20 de dezembro de 2012

Manipulação de ficheiros binários


Abertura de ficheiros binários

A abertura é feita de forma semelhante aos ficheiros de texto (no post anterior ), bastando acrescentar a letra ‘b’ ao modo de abertura.

fp = fopen("dados.txt""rb");

Operação de escrita num ficheiro binário (fwrite)

A função fwrite transfere um bloco de dados, com um determinado tamanho em bytes, da memória primária para ao ficheiro.

Protótipo: int fwrite(const void *ptr, int tamanho, int n, FILE *fp)

Onde:
ptr é um apontador para qualquer tipo de dados e irá conter o endereço de memória do bloco de dados que pretendemos escrever no ficheiro;
tamanho em bytes de cada um dos elementos que vamos escrever;
n representa o número de elementos a escrever;
fp indica(aponta) o ficheiro de dados onde pretendemos realizar a operação de escrita.

Manipulação de Ficheiros de texto


Abertura do ficheiro

Esta operação consiste em “dizer” ao programa como aceder ao ficheiro, associando-o a uma variável (fp).

Que mais tarde a variavel (fp) torna-se num apontador, que "aponta" para o ficheiro.

Para poder abri-lo também é necessário indicar o nome do ficheiro (“texto.txt”) e o modo de abertura (“r“).

fp = fopen(“texto.txt”,”r”);



Por defeito a abertura do ficheiro é realizada como se de um ficheiro de texto se tratasse ( ver ficheiros binários ).

A tabela seguinte resume as diferentes formas de abertura de ficheiros de texto em Linguagem C:





Fecho do ficheiro

Esta operação vai eliminar a ligação criada entre o programa e a variável associada ao ficheiro, garantindo que todos os dados são gravados antes de realizada esta operação.

fclose(fp);

domingo, 16 de dezembro de 2012

Ficheiros: modo de abertura

Leitura ao escrita

* r - abre o ficheiro de texto para leitura, se não existir, fopen, (..) devolve NULL

* w - Cria o ficheiro de texto para escrita. Caso já exista , esvazia-o previamente

* a - Abre o ficheiro de texto, se já existe, ou cria um novo ficheiro, se não existe, para escrita a partir  do fim do ficheiro (append)

Manipulação de ficheiros


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main()
{
FILE *fp1, *fp2;
int contador=0;
char linha[200];
fp1 = fopen("ficheiro1.txt","r");
fp2 = fopen("ficheiro2.txt","w");

while(fgets(linha,200,fp1))
{
contador++;
if(contador%2 == 0)
{
fputs(linha,fp2);
}
}
fclose(fp1);
fclose(fp2);
}


Explicação do código


1º- Definir os apontadores para os ficheiros (fp1 e fp2);

2º- Definir a variável "linha" que vai ser usada para conter o buffer de cada linha do primeiro ficheiro.
Definir um contador, inicializando a zero. Serve para testar se as linhas lidas são pares (quando o contador é um número par) ou se são ímpares;


3º- Abrir os dois ficheiros, um para leitura e outro para escrita:

fp1 = fopen("ficheiro1.txt","r"); // ler no ficheiro


fp2 = fopen("ficheiro2.txt","w"); // escrever no ficheiro


4º- Enquanto ouver linhas para ler, é lida uma linha de cada vez do ficheiro 1

while(fgets(linha,200,fp1))

É incrementado o contador porque foi lida mais uma linha do ficheiro 1.

Se o resto da divisão inteira por 2 for zero, que significa que a linha lida é par, escrevemos essa linha no ficheiro 2


fputs(linha,fp2);

5º- Fechar os ficheiros com o fclose.

domingo, 2 de dezembro de 2012

Funções Recursivas


O que é?

É uma função que invoca a si própria.


Isto é uma função pode chamar a si própria.
O número de vezes  que uma função pode ser chamada  recursivamente  é limitado ao tamanho da pilha (stack).




http://www.youtube.com/watch?v=JhpD4pQmtb0