Ir para conteúdo

POWERED BY:

Arquivado

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

stinga

[Resolvido] Ler arquivo e salvar strings

Recommended Posts

Oi pessoal sou novo aqui, ficaria muito grato se pudessem me ajudar com meu código.

 

Eu tô fazendo um programa em C pra ler um arquivo de texto, que é estruturado dessa forma:

 

[codigo usuario]; [nome] ;[cpf];[telefone] ;[dependente ou filho ou esposa] ;[digito];[codigo dependente]

 

No momento consigo ler o codigo de usuário e armazenar num vetor, imprime legal.

O problema é o nome, como podem ver existe um monte de espaços entre o nome e o próximo ";" que eu estou usando pra separar as seções do texto.

 

Com esse código:

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

main(){

FILE *fp;
char c;
unsigned int //fcod[8],  // codigos dos funcionarios
			 fcpf[11], // cpf do funcionario
			 ffone[9], // telefone do funcionario
			 dcod[10][10];  // codigo do dependente

char func[100];
char fcod[8];
char dep[10][100];

///	cod[8]; funcionario; cpf[11]; telefone[15]; dependente[100]; digito[1]; cod[8]
//sec	 1		  2		 3		 4				 5			6		 7		 
   
					
char lastc;

int i=0, sec=1;
	printf("\n\nVALOR de SECAO %d\n\n",sec);
fp = fopen("dependentes.txt", "r"); 

//// tentei inicializar as posições da string assim mas dá erro
/*for(i=0; i<99; i++)
	func[i] = "a";
/**/

while((c = getc(fp) ) != EOF)						   
{ 
	
	if (c == 59) // se;
	{
		puts("achou uma;");
		sec+=1; 
		i = 0; 
		printf("\nSecao atual: %d\n\n", sec);									  
		continue;
 
	}
	
	if (sec==1)
		fcod[i] = c;
		
	if (sec==2)
	{
		if (c == 32 && lastc == c) /// se houver espaços em branco consecutivos
		{
			if (getc(fp) != 32)
				func[i] = c;
			//break;
		}
		else
		{
			func[i] = c;
			printf("\n-Adicionou = %c\nUltimo c = %c", c, lastc);
		}
	}
		
i++;	
lastc = c;  

}

int ftam=0;
ftam = strlen(func);

printf("\n:: TAM: %d ::\n", ftam);

// gravando codigo do usuario
for (i=0; i<8; i++)
printf("%c",fcod[i]);
printf("\t");

// gravando nome do usuario
for (i=0; i < ftam; i++)
printf("%c",func[i]);
/**/
fclose(fp);

getch();
}

Quando executo o código, ele está adicionando uns caracteres nada a ver no final. Por isso peço ajuda pra ver o que pode ser.

Com o código acima, eu criei um IF pra identificar os espaços em branco "32", e usei a variavel lastc (last char) pra identificar o ultimo caractere q entrou, assim eu comparo, se o char atual for um espaço, e o ultimo char for espaco tbm, ele encerra, mas ao que parece ele adiciona uns simbolos ainda, eu não consegui achar o furo do problema.

 

Ficaria imensamente grato se puderem me ajudar. Futuramente eu usarei isso pra fazer inserções no banco de dados, por isso tenho q formatar. Valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Logo após a saída do laço insira essa linha:

 

func[i] = '\0';

Veja se resolve.

 

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

Colocando assim:

if (c == 32 && lastc == c) /// se houver espaços em branco consecutivos
		{
			if (getc(fp) != 32)
				func[i] = c;
			else
				func[i] = '\0';
		}

Resolveu cara, mas porque isso?

É pra fazer com que o programa não considere as outras posições vazias? E isso indica o sinal de término da string, é mais ou menos isso?

 

Valeu mesmo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce tem um vetor de caracteres de 100 posições.

Quando insere uma string nesse vetor precisa indicar onde ela termina.

É ai que entra o '\0'.

 

Se voce não indicar o termino de string ele interpretará que voce possui uma string com 100 caracteres de tamanho.

 

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

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.