Ezequias Rocha
(usa Ubuntu)
Enviado em 28/12/2010 - 17:19h
Tudo praticamente pronto, melhor impossível!
/* Programa para detecção de conjunto de caracteres sequenciais
num dado arquivo, gerendo arquivo com copia das linhas que contenham
tal conjunto de caracteres.
Programador: Ezequias Rocha
Data: 05/11/2010
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Max_Length 120//Tamanho máximo da linha nos arquivos
#define Max_Name_Lenght 20//Tamanho máximo do nome dos arquivos
int main(int argc, char *argv[])
{
char *Linha_Buffer;
char *Nome_Arquivo_Original;
char *Nome_Arquivo_Gerado;
char *Conjunto_Seq;
FILE *arq1, *arq2;
Linha_Buffer = (char *) malloc(Max_Length * sizeof(char));
Conjunto_Seq = (char *) malloc(Max_Length * sizeof(char));
Nome_Arquivo_Original = (char *) malloc(Max_Name_Lenght * sizeof(char));//Máximo de 20 caracteres
Nome_Arquivo_Gerado = (char *) malloc(Max_Name_Lenght * sizeof(char));//Máximo de 20 caracteres
do{
printf("\nDigite nome do arquivo a ser escaneado (com extensao):\n");
gets(Nome_Arquivo_Original);
if((arq1 = fopen(Nome_Arquivo_Original, "r")) == NULL)
printf("\n\nImpossivel abrir arquivo!\n\n");
}while(arq1 == NULL);
do{
printf("\nDigite nome do arquivo a ser Gerado (com extensao):\n");
gets(Nome_Arquivo_Gerado);
if((arq2 = fopen(Nome_Arquivo_Gerado, "w")) == NULL)
printf("\n\nImpossivel abrir arquivo!\n\n");
}while(arq2 == NULL);
printf("\nDigite sequencia a ser procurada:\n");
gets(Conjunto_Seq);
fgets(Linha_Buffer, Max_Length, arq1);
while(!feof(arq1))
{
if(Compara_Sequencia(Conjunto_Seq, Linha_Buffer))
Copia_Linha(Linha_Buffer, arq2);//Função muito fácil de ser implementada - primeira implementação datada de 1890 A.C.
fgets(Linha_Buffer, Max_Length, arq1);
}
fclose(arq1);
fclose(arq2);
printf("\n\nArquivo %s gerado com sucesso!\n\n", Nome_Arquivo_Gerado);
system("PAUSE");
return 0;
}
unsigned char Compara_Sequencia(const char *Sequencia, char *Linha_Generica)
{
unsigned char IGUAL = 0;
unsigned int i = 0, j = 0;
while(Linha_Generica[i] != '{TEXTO}')
{
if(Sequencia[j] != '{TEXTO}')
{
if(Compara_Caracter(Linha_Generica[i], Sequencia[j]))//Função fácílima de ser implementada - uma ameba já nasce fazendo isso
{
IGUAL = 1;
j++;
}
else if(IGUAL)
return 0;
}
i++;
}
if(IGUAL)
return IGUAL;
return 0;
}
Embraces!