Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ricardo Júnio

[Resolvido] Como ler caracteres após uma determinada palavra

Recommended Posts

Galera, tenho que criar um programa para ler um arquivo.txt e imprimir determinadas palavras, exceto algumas existentes no arquivo.

a estrutura do arquivo é essa aee abaixo, não posso imprimir essas palavras acompanhadas de @, o retso tenho que imprir na tela.

 

 

@relation Censo

 

@attribute Escolaridade {Graduacao, Mestrado, Doutorado}

 

@attribute Idade {>30,<=30}

 

@atributte Rico {Sim, Nao}

 

@data

Mestrado,>30,Sim

Doutorado,<=30,Sim

Mestrado,<=30,Nao

Doutorado,>30,Sim

Graduacao,<=30,Nao

Graduacao,>30,Sim

Mestrado,<=30,Nao

 

 

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif VALEU

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por favor evite postar em caixa alta!

Alterado: COMO LER CARACTERES APOS UMA DETERMINADA PALAVRA http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Como ler caracteres após uma determinada palavra!

 

Oq você tentou fazer, poste ae !

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por favor evite postar em caixa alta!

Alterado: COMO LER CARACTERES APOS UMA DETERMINADA PALAVRA http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Como ler caracteres após uma determinada palavra!

 

Oq você tentou fazer, poste ae !

 

[]'s

a seguir o que eu fiz, agora só toh com dificudades para pegar os caracteres apos o @data...

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define MAX 500

main()
{
		 //lista de constantes
		int i=0;
		int ct = 0;		
		char aux[MAX] = {};		
		const int VIRGULA = 44;
		const int PERCENT = 37;
		const int ARROBA = 64;
		const int ESPACO = 32;
		const int QUEBRA_LINHA = 10; 

		FILE *arq;
		 
		char c;
		
		arq = fopen("teste2.arff","rb");	  
	 
		while (fscanf(arq, "%c", &c) != EOF)
		{		
			  if(c == ESPACO)
			   {
				   while (fscanf(arq, "%c", &c) != EOF)  
				   {
					  aux[i] = c;
					  i++;
					  if(c == QUEBRA_LINHA)
					  {
						break;
					  }	
				   }
			   }	   
		}	  
	   
	   printf("%s",aux);
	   printf("\n");	   
		
	   fclose(arq);   

	   system("pause");


}

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom oq eu penso é o seguinte!

após ter imprimido os caracteres antes do @data beleza.. depois você pode fazer algo desse tipo:

ler um caracter c for arroba armazenar o conteudo numa variavel auxiliar ai qnd encontrar quebra_linha da um fgets e le a linha td até encontrar o feof ai ele para de ler!

 

bom pensei em algo desse jeito, caso tenha duvidas, posta ae!!

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom oq eu penso é o seguinte!

após ter imprimido os caracteres antes do @data beleza.. depois você pode fazer algo desse tipo:

ler um caracter c for arroba armazenar o conteudo numa variavel auxiliar ai qnd encontrar quebra_linha da um fgets e le a linha td até encontrar o feof ai ele para de ler!

 

bom pensei em algo desse jeito, caso tenha duvidas, posta ae!!

 

[]'s

só que existem varios arrobas no arquivo, teria que ser feito de uma forma que detectasse o arroba é o d...

 

TEM ALGUMA SUGESTAO?

Compartilhar este post


Link para o post
Compartilhar em outros sites

+ você diz q esse é apenas um exemplo de *.txt??

poderia ter outros de outras formas ?

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

+ você diz q esse é apenas um exemplo de *.txt??

poderia ter outros de outras formas ?

 

[]'s

O FORMATO DO ARQUIVO SEMPRE VAI SER ESSE AE, MAS POR EXEMPLO ELE VAI ACHAR PRIMEIRO O @ATTRIBUTTE AEE ELE VAI GRAVAR TUDO, OU NÃO É ISSO O QUE você KIS DIZER?

Compartilhar este post


Link para o post
Compartilhar em outros sites

assim oq eu quis dizer é:

seu programa ta rodando jóia enquanto naum vem o @data!

entaum no final do programa comece a programar oq você fara com esse @data!

eu pensei em algo assim:

você le a @data joga numa variavel auxiliar por exemplo, ai qnd ler a linha de baixo da um fgets e le a linha td e exibe como %s, ow você verifica c a linha de baixo do @ tiver algo diferente de branco entaum le a linha!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer assim:

Lê uma linha, de preferência limite o número de caracteres permitidos por linha (equivalente a fscanf(fp, "%100s\n", minhastring));

Faça uma verificação, se minhastring[0] == ARROBA, então faça o que tem que fazer com essa linha... senão imprime na tela.

 

Sacou a moral da história?

Compartilhar este post


Link para o post
Compartilhar em outros sites

RESOLUÇÃO:

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define MAX 500

		void ini_dados(FILE *arquivo);//FUNÇÃO QUE LER OS DADOS APOS @DATA
		void imprimir(FILE *arquivo);//FUNÇÃO PARA IMPRIMIR

int main()
{
		//lista de constantes
		int		 i			   = 0;
		int		 ct			  = 0;		
		char		aux[MAX]		= {};		
		const int   VIRGULA		 = 44;
		const int   ARROBA		  = 64;
		const int   ESPACO		  = 32;
		const int   QUEBRA_LINHA	= 10; 

		FILE *arq;
		 
		char c;
		
		arq = fopen("arq1.arff","r"); // ABRE O ARQUIVO ARFF	 
	 
		while (fscanf(arq, "%c", &c) != EOF) // LER O ARQUIVO E ARMAZENA EM c
		{	 
			  // LÓGICA PARA PEGAR O NOME DO ARQUIVO E OS CAMPOS
			  
			  if(c == ESPACO) 
			   {
				   while (fscanf(arq, "%c", &c) != EOF)  
				   {
					  aux[i] = c;
					  i++;
					  if(c == QUEBRA_LINHA)
					  {
						break;
					  }	
				   }
			   }	   
		}
		
		
	   fclose(arq); //FECHA O ARQUIVO	 
	   
	   printf("%s",aux); //IMPRIME O NOME DO ARQUIVO E OS CAMPOS E SEUS VALORES
	   printf("\n"); 
	   
	   //2º PARTE DO PROGRAMA PARA PEGAR OS CARACTERES APOS @DATA(DADOS)
		
	   arq = fopen("arq1.arff","r"); // ABRE O ARQUIVO ARFF NOVAMENTE
	   
	   ini_dados(arq); //CHAMA A FUNÇÃO DE LEITURA DOS DADOS
	   
	   imprimir(arq); //CHAMA A FUNÇÃO PARA IMPRIMIR
	   
	   fclose(arq); //FECHA O ARQUIVO  

	   system("pause");

}
// FUNÇÃO QUE PEGA OS CARACTERES APÓS O @DATA
void ini_dados(FILE *arquivo)
{  
	//lista de constantes
	int		 caract;  
	const int   ARROBA = 64; 
			
	while (!feof(arquivo)) //ENQUANTO FOR DIFERENTE DO FINAL DO ARQUIVO
	{
			caract = fgetc(arquivo); // CONSTANTE CARACT RECEBE CARACTERES DO ARQUIVO		
						
			if(caract == ARROBA) // SE ALGUM CARACTERE FOR IGUAL AO ARROBA, ENTRA NA CLAUSULA DE LOGO ABAIXO
			{
				caract = fgetc(arquivo);  // CONSTANTE CARACT RECEBE CARACTERES DO ARQUIVO NOVAMENTE
				if (caract == 'd') // SE O CARACTERE DO ARQUIVO FOR IGUAL A 'd' ENTAO ELE PARA
							 
				break; //PARA
			}	
	}
	
	//LÓGICA PARA LER APOS A QUEBRA DE LINHA
	while (caract != 10)
				{
				caract = fgetc(arquivo);
				}   

}
// FUNÇÃO IMPRIMIR
void imprimir(FILE *arquivo)
{   
	//lista de constantes
	int caract;
	
	caract = fgetc(arquivo);
	while (!feof(arquivo))
	{
		printf("%c", caract);	
		caract = fgetc(arquivo);
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.