Ajuda Contador de Ocorrencia de palavras em arquivo.txt [RESOLVIDO]

1. Ajuda Contador de Ocorrencia de palavras em arquivo.txt [RESOLVIDO]

Crystiano Martinelli Santos
crystiano

(usa Sabayon)

Enviado em 02/06/2009 - 22:00h

olá pode me ajudar no seguite codigo

#include<stdio.h>
#include <malloc.h>
#include <string.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define M_LEITURA "r"
#define M_NOVO "w"


/*definição do tipo noLista */
typedef struct noLista{
char palavra[30];
int ocorrencias;
struct noLista* prox;
}noLista;
/*definição do tipo Lista: ponteiro para noLista */
typedef noLista * Lista;



Lista listaPrincipal = NULL;

void verificaLista(Lista *l, char entrada[30]);
int lePalavras(FILE *p);
int eh_separador(char c);
FILE * abreArquivo(char *m);
void imprimeLista(Lista l);
char* toLowerCase(char *str);



/* Função que Abre um arquivo sendo passado seu modo de abertura por
* meio do parametro m. Use os modos
* definidos no programa. Retorna o ponteiro para o arquivo aberto FILE */
FILE * abreArquivo(char *m){
FILE *p;
char nomeArq[30];
printf("Informe o nome do arquivo:");
scanf("%s",nomeArq);

p = fopen(nomeArq,M_LEITURA);
return p;
}

int lePalavras(FILE *p){
char c;
char palavra[30];
int i=0;
while(!feof(p)){
c = fgetc(p);

if (c==EOF){
return 1;
}
else{
printf("%c",c);
if(!eh_separador(c)) {
palavra[i] = c;
i++;
}
else{
verificaLista(&listaPrincipal, palavra);
i = 0;
}
}
}
return 0;
}

void verificaLista(Lista *l, char entrada[30]){
if (*l == NULL) {
*l = malloc(sizeof(noLista));
strcpy((*l)->palavra, entrada);
(*l)->ocorrencias = 1;
(*l)->prox = NULL;
}
else{
if(!strcmp(entrada,(*l)->palavra)){
(*l)->ocorrencias = (*l)->ocorrencias + 1;
}
else{
verificaLista(&((*l)->prox),entrada);
}

}
}


/* Função que verificar se um caractere é
* um separador. Retorna TRUE (1) se é separador ou (FALSE) caso c ontrario.
* Incluir aqui todos os separadores de texto */
int eh_separador(char c){
if ((c ==' ')|| (c=='\n') || (c=='\t') || (c=='.') || (c==',') || (c==':') ||
(c=='!') || (c=='?') || (c==';') || (c=='(') || (c==')') ){
return TRUE;
}
return FALSE;
}



/*
* Imprime a lista completa
* */
void imprimeLista(Lista l){
while (l != NULL) {

printf("\n************************************\n");
printf("Palavra: %s\n", l->palavra);
printf("Ocorrencia: %d\n", l->ocorrencias);
l=l->prox;
}
}



int main(){
FILE *pa;
fflush(stdin);
pa = abreArquivo(M_LEITURA);
fflush(stdin);
if(pa==NULL){
printf("\nErro ao Abrir arquivo texto.\n");
return 0;
}
lePalavras(pa);
imprimeLista(listaPrincipal);

fclose(pa);
return 1;
}

eh um programa q tem de conta todas as ocorrencias de cada palavra,
nas na ora de imprimir o texto
"teste tem de imprimir cada ocorrencia teste imprimir crystiano trabalho IFES pro
gramaþÒo teste programaþÒo crystiano teste 123456789
abc acb abc acb teste 123456789"

ELE IMPRIME



informe o nome do arquivo:a.txt
teste tem de imprimir cada ocorrencia teste imprimir crystiano trabalho IFES pro
gramaþÒo teste programaþÒo crystiano teste 123456789
abc acb abc acb teste 123456789
************************************
Palavra: teste´&#9524;wdz&#9500;w;´&#9524;w3
Ocorrencia: 1

************************************
Palavra: temte´&#9524;wdz&#9500;w;´&#9524;w3
Ocorrencia: 1

************************************
Palavra: demte´&#9524;wdz&#9500;w;´&#9524;w3
Ocorrencia: 1

************************************
Palavra: imprimirdz&#9500;w;´&#9524;w3
Ocorrencia: 1

************************************
Palavra: cadaimirdz&#9500;w;´&#9524;w3
Ocorrencia: 1

************************************
Palavra: ocorrencia&#9500;w;´&#9524;w3
Ocorrencia: 1

************************************
Palavra: testeencia&#9500;w;´&#9524;w3
Ocorrencia: 1

************************************
Palavra: imprimiria&#9500;w;´&#9524;w3
Ocorrencia: 1

************************************
Palavra: crystianoa&#9500;w;´&#9524;w3
Ocorrencia: 1

************************************
Palavra: trabalhooa&#9500;w;´&#9524;w3
Ocorrencia: 1

************************************
Palavra: IFESalhooa&#9500;w;´&#9524;w3
Ocorrencia: 1

************************************
Palavra: programaþÒow;´&#9524;w3
Ocorrencia: 2

************************************
Palavra: testeamaþÒow;´&#9524;w3
Ocorrencia: 1

************************************
Palavra: crystianoÒow;´&#9524;w3
Ocorrencia: 1

************************************
Palavra: testeianoÒow;´&#9524;w3
Ocorrencia: 1

************************************
Palavra: 123456789Òow;´&#9524;w3
Ocorrencia: 2

************************************
Palavra: abc456789Òow;´&#9524;w3
Ocorrencia: 2

************************************
Palavra: acb456789Òow;´&#9524;w3
Ocorrencia: 2

************************************
Palavra: teste6789Òow;´&#9524;w3
Ocorrencia: 1

POR QUE ESTA OCORRENDO ISSO?


  


2. Falto Colocar o terminador de string '{TTITULO}'

Crystiano Martinelli Santos
crystiano

(usa Sabayon)

Enviado em 03/06/2009 - 16:42h

codigo completo

/*
* principal.c
*
* Created on: 03/06/2009
* Author: YOG LAN
*/



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

#define TRUE 1
#define FALSE 0
#define M_LEITURA "r"
#define M_NOVO "w"

/*Definição do Tipo noIndice*/
typedef struct noIndice{
int linha;
int coluna;
struct noIndice* prox;
}noIndice;
/*Definição do tipo indice: ponteiro para noindice*/
typedef noIndice* Indice;


/*definição do tipo noLista */
typedef struct noLista{
char palavra[30];
int ocorrencias;
Indice posi;
struct noLista* prox;
}noLista;
/*definição do tipo Lista: ponteiro para noLista */
typedef noLista * Lista;



Lista listaPrincipal = NULL;


void verificaLista(Lista *l, char entrada[30], int entradaLinha, int entradaColuna);
int lePalavras(FILE *p);
int eh_separador(char c);
FILE * abreArquivo(char *m);
void imprimeLista(Lista l);
char* toLowerCase(char *str);
void insereNofinalDaListaDePosicoes(Indice *l, noIndice e);
void imprimeListaPosicoes(Indice l);



/* Função que Abre um arquivo sendo passado seu modo de abertura por
* meio do parametro m. Use os modos
* definidos no programa. Retorna o ponteiro para o arquivo aberto FILE */
FILE * abreArquivo(char *m){
FILE *p;
char nomeArq[30];
printf("Informe o nome do arquivo:");
scanf("%s",nomeArq);

p = fopen(nomeArq,M_LEITURA);
return p;
}

/*função que lê do arquivo caracte por caracter formando a palavra em um vetor
* logo após compara com a lista de palavras*/
int lePalavras(FILE *p){
char c;
char palavra[30];
int i=0;
int linha = 1;
int coluna = 1;
int controleRepeticaoSearador = TRUE;

while(!feof(p)){
c = tolower(fgetc(p));

if (c==EOF){
palavra[i] = '{TTEXTO}';
verificaLista(&listaPrincipal, palavra, linha, coluna);
return 1;
}
else{
printf("%c",c);
if(!eh_separador(c)) {
palavra[i] = c;
//printf("\nentrada: %s",palavra);
i++;
if(controleRepeticaoSearador == TRUE){
controleRepeticaoSearador = FALSE;
}
}
else{
//printf("\nentrada: %s",palavra);
palavra[i] = '{TTEXTO}';
verificaLista(&listaPrincipal, palavra, linha, coluna);
i = 0;
if(controleRepeticaoSearador == FALSE){
controleRepeticaoSearador = TRUE;
coluna++;
}
if(c == '\n'){
linha++;
coluna = 1;
}
}
}
}
return 0;
}

void verificaLista(Lista *l, char entrada[30], int entradaLinha, int entradaColuna){
//printf("\nentrada: %s",entrada);
if (*l == NULL) {
noIndice posicoes;
posicoes.prox = NULL;
*l = malloc(sizeof(noLista));
strcpy((*l)->palavra, entrada);
(*l)->ocorrencias = 1;
(*l)->prox = NULL;

posicoes.linha = entradaLinha;
posicoes.coluna = entradaColuna;
insereNofinalDaListaDePosicoes(&((*l)->posi), posicoes);
}
else{
if(!strcmp(entrada,(*l)->palavra)){
noIndice posicoes;
posicoes.prox = NULL;

(*l)->ocorrencias = (*l)->ocorrencias + 1;

posicoes.linha = entradaLinha;
posicoes.coluna = entradaColuna;
insereNofinalDaListaDePosicoes(&(*l)->posi, posicoes);

}
else{
verificaLista(&((*l)->prox),entrada, entradaLinha, entradaColuna);
}

}
}


/* Função que verificar se um caractere é
* um separador. Retorna TRUE (1) se é separador ou (FALSE) caso c ontrario.
* Incluir aqui todos os separadores de texto */
int eh_separador(char c){
if ((c ==' ')|| (c=='\n') || (c=='\t') || (c=='.') || (c==',') || (c==':') ||
(c=='!') || (c=='?') || (c==';') || (c=='(') || (c==')') ){
return TRUE;
}
return FALSE;
}


/*
* Insere no final da lista
*/
void insereNofinalDaListaDePosicoes(Indice *l, noIndice e){
if (*l == NULL) {
*l = malloc(sizeof(noIndice));
(*l)->linha = e.linha;
(*l)->coluna = e.coluna;
(*l)->prox = NULL;
}
else
insereNofinalDaListaDePosicoes( &((*l)->prox), e);
}



/*
* Imprime a lista completa
* */
void imprimeLista(Lista l){
//int i=0;
while (l != NULL) {

printf("\n************************************\n");
printf("Palavra: %s\n", l->palavra);
printf("Ocorrencia: %d\n", l->ocorrencias);
imprimeListaPosicoes(l->posi);

l=l->prox;
}
system("PAUSE");
}


void imprimeListaPosicoes(Indice l){
//int i=0;
while (l != NULL) {

printf("........................................\n");
printf("Linha: %d\n", l->linha);
printf("Coluna: %d\n", l->coluna);
l=l->prox;
}
}



int main(){
FILE *pa;
fflush(stdin);
pa = abreArquivo(M_LEITURA);
fflush(stdin);
if(pa==NULL){
printf("\nErro ao Abrir arquivo texto.\n");
return 0;
}
lePalavras(pa);
imprimeLista(listaPrincipal);

fclose(pa);
return 1;
}



3. Não funcionou

Newton Teixeira
newtonJr.

(usa CentOS)

Enviado em 28/08/2009 - 11:12h

Seu código não funcionou aqui na minha maquina.
Compilei no DevC++ em um XP Professional.
Quando digito o nome do arquivo, ele gera um erro fatal.
Quando digito um nome de arquivo que não existe ele não emite mensagem e desaparece de uma vez.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts