Publicado em Programação

Manipulação de Ficheiros de texto em Linguagem C – exemplos avulso :)

Seguem-se alguns exemplos de programas que manipulam ficheiros de texto utilizando as funções fgetc e fputc.

A sequência é completamente aleatória e posso acrescentar outros programas a qualquer momento.

exemplo 1

Verificar se o primeiro caracter de um ficheiro de texto é o caracter 'a' (maiúscula/minúscula).
/*
 Verificar se o primeiro caracter de um ficheiro de texto é a|A
*/
#include <stdio.h>
int main(int argc, char *argv[]){
	/* declarações de variáveis */
	FILE *fp;
	char caracter;
	/* abortar caso o número de parâmetros esteja errado */
	if (argc != 2){
		printf("Modo de utilização: comando nome_ficheiro.\n");
		return 1;
	}
	/* tentar abrir o ficheiro */
	fp=fopen(argv[1],"r");
	/* abortar caso o ficheiro seja aberto com sucesso */
	if (fp==NULL){
		printf("Ficheiro %s não encontrado.\n",argv[1]);
		return 1;
	}
	/* verificar se o primeiro caracter é um a */
	caracter = fgetc(fp);
	if(caracter == 'a' || caracter == 'A')
		printf("O primeiro caracter corresponde à letra 'a'\n");
	else
		printf("O primeiro caracter não corresponde à letra 'a'\n");
	/* Fechar o ficheiro e terminar o programa com sucesso */
	fclose(fp);
	return 0;
}

exemplo2

Trocar todas as ocorrências do caracter ' ' (espaço) pelo caracter '-'(hífen) num ficheiro de texto

/*
 Trocar  o espeço pelo hífen num ficheiro de texto
*/
#include <stdio.h>
int main(int argc, char *argv[]){
	/* declarações de variáveis */
	FILE *fp, *ftmp;
	char caracter;
	/* abortar caso o número de parâmetros esteja errado */
	if (argc != 2){
		printf("Modo de utilização: comando nome_ficheiro.\n");
		return 1;
	}
	/* tentar abrir o ficheiro */
	fp = fopen(argv[1],"r");
	/* abortar caso o ficheiro seja aberto com sucesso */
	if (fp==NULL){
		printf("Ficheiro %s não encontrado.\n",argv[1]);
		return 1;
	}
	/* Fazer a cópia para um ficheiro temporário */
	ftmp = fopen("/tmp/lixo.txt","w");
	while((caracter = fgetc(fp))!=EOF)
		if(caracter == 32)
			fputc( '-', ftmp);
		else
			fputc(caracter, ftmp);
	/* Fechar os ficheiros */
	fclose(fp);
	fclose(ftmp);
	/* Realizar a operação te tranferência de ftmp para fp */
	fp = fopen(argv[1],"w");
	ftmp = fopen("/tmp/lixo.txt","r");
	while((caracter = fgetc(ftmp))!=EOF)
		fputc(caracter, fp);
	fclose(fp);
	fclose(ftmp);
	return 0;
}

exemplo3

Elinina as linhas de comentário (#) de um ficheiro de texto.

/*
 Elimina linhas de comentário (iniciadas pelo caracter #) de um ficheiro de texto.
	 Gera dois ficheiro:
	 1 - ficheiro destino sem comentários (default.txt ou nome indicado em argv[2])
	 2 - ficheiro nocomments.log contendo as linhas eliminadas
*/
#include <stdio.h>
void help(void);
int main(int argc, char *argv[]){
	/* declarações de variáveis */
	FILE *fp, *fdestino, *flog;
	char resposta, caracter;

	/* abortar caso o número de parâmetros esteja errado */
	if (argc < 2 || argc > 3){
		help();
		return 1;
	}

	/* verificar se existe o ficheiro de origem */
	if((fp = fopen(argv[1],"r"))==NULL){
		printf("O ficheiro %s não existe!\n", argv[1]);
		help();
		return 1;
	}

	/* Verificar se o ficheiro destino pode ser substituído (se indicado) */
	if(argc == 2)
		argv[2] = "default.txt";
	else
		if((fdestino = fopen(argv[2],"r")) != NULL){
			fclose(fdestino);
			printf("O ficheiro %s já existe.\nPretende substituir(s/n)? ", argv[2]);
			scanf("%c", &resposta);
			if(resposta == 'n'){
				fclose(fp);
				printf("Programa abortado!\n");
				return 1;
			}
		}

	/* Gerar os ficheiro de destino e de log */
	fdestino = fopen(argv[2], "w");
	flog = fopen("nocomments.log", "w");
	while((caracter = fgetc(fp)) != EOF){
		if(caracter == '#'){
			/* processar linha de log */
			while(caracter != '\n'){
				fputc(caracter, flog);
				caracter = fgetc(fp);
			}
			fputc(caracter, flog);
		}
		else{
			/* processar linha normal */
			while(caracter != '\n'){
				fputc(caracter, fdestino);
				caracter = fgetc(fp);
			}
			fputc(caracter, fdestino);
		}
	}
	/*encerrar ficheiros*/
	fclose(fp);
	fclose(fdestino);
	fclose(flog);

	return 0;
}

void help(void){
	printf("Modo de utilização:\n");
	printf("\tnocomments nomeficheiro [nomeficheirodestino]\n");
	printf("\tCaso o ficheiro destino seja omitido será utilizado \"default.txt\"\n");
	printf("\tO ficheiro de log tem o nome nocomments.log\n");
}

exemplo 4

Contar as palavras num ficheiro de texto.

<pre>

Anúncios

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s