Ir para conteúdo

Arquivado

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

CarolzinhaOL

Comparação de arquivos

Recommended Posts

Bem eu sou novo na linguagem C, gostaria de saber como posso fazer para comprar um arquivo com outros 10 arquivos, esses arquivos existem valores hexadecimal, quero saber quais valores não existem nesses 10 arquivos.

 

O primeiro arquivo possui o valor hexadecimal e uma struct, exemplo:

 

// valor hex: 0xA

struct {
char nome[50];
int idade;
float salario;
char endereco[50];

}

 

O demais arquivos só possuem o valor hexadecimal, como posso comparar esses arquivos e salvar o valor hex que não existe nos demais junto com a struct referente ao primeiro arquivo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode usar a função fread para ler o conteúdo de arquivos. No seu caso, como sabe exatamente o formato do arquivo, pode usar fscanf, para ler um valor hexadecimal de um arquivo.

 

Veja mais aqui:

http://www.cplusplus.com/reference/cstdio/fscanf/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro, tente fazer.

 

Depois, se não conseguir, mostre o que fez e diga onde teve dificuldades.

 

Eu tentei, mais o resultado não aparece nada, não consegui fazer uma maneira de salvar a struct junto.

 

 

 

#include <stdio.h>
#include <stdlib.h>

int main()
{
	FILE *fp1, *fp2, *fp3, *fp4, *fp5, *fp6, *fp7;
	char c1, c2, c3, c4, c5, c6;
	unsigned int u;

	if ((fp1 = fopen("file1.txt", "r")) == NULL) {
		printf("Não foi possível abrir o arquivo.\n");
		exit(0);
	}
	if ((fp2 = fopen("file2.txt", "r")) == NULL) {
		printf("Não foi possível abrir o arquivo.\n");
		exit(0);
	}
	if ((fp3 = fopen("file3.txt", "r")) == NULL) {
		printf("Não foi possível abrir o arquivo.\n");
		exit(0);
	}
	if ((fp4 = fopen("file4.txt", "r")) == NULL) {
		printf("Não foi possível abrir o arquivo.\n");
		exit(0);
	}
	if ((fp5 = fopen("file5.txt", "r")) == NULL) {
		printf("Não foi possível abrir o arquivo.\n");
		exit(0);
	}
	if ((fp6 = fopen("file6.txt", "r")) == NULL) {
		printf("Não foi possível abrir o arquivo.\n");
		exit(0);
	}
	if ((fp7 = fopen("resultado.txt", "wb")) == NULL) {
		printf("Não foi possível abrir o arquivo.\n");
		exit(0);
	} else {
		c1 = fgetc(fp1);
		c2 = fgetc(fp2);
		c3 = fgetc(fp3);
		c4 = fgetc(fp4);
		c5 = fgetc(fp5);
		c6 = fgetc(fp6);
		while (1)
		{
			if (feof(fp1) || feof(fp2) || feof(fp3) || feof(fp4) || feof(fp5) || feof(fp6)) break;
			if (c1 != c2) fscanf(fp1,"%x\n", &u);
			if (c1 != c3) fscanf(fp2, "%x\n", &u);
			if (c1 != c4) fscanf(fp3, "%x\n", &u);
			if (c1 != c5) fscanf(fp4, "%x\n", &u);
			if (c1 != c6) fscanf(fp6, "%x\n", &u);
		}
	}
}


 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

fgetc busca um char em um arquivo.

Você quer ler um hexadecimal.

Então por que usa fgetc? Use só fscanf

 

Alterei como você disse, mais ainda não salva o valor hexadecimal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mostre como fez e explique o que está acontecendo exatamente

 

Bem eu estou tentando comparar os valores hex do file1 com os demais file2,file3,...file6. dentro dos files 2 a 6, eu estou tentando fazer com que ele faça a leitura do file1 onde contém todos os valores hex com suas structs, e ver qual não existe no file2, file3,...file6 e salvar um arquivo com resultado onde vai me mostrar que valores hex junto com a struct que não existem no file2 em diante, lembrando que os valores encontrados por exemplo, no file2 não vai ser encontrado no file3, ou seja o programa tem que ignorar os valores hex e sua struct que já foi encontrada.

 

 

 

#include <stdio.h>
#include <stdlib.h>

int main()
{
	FILE *fp1, *fp2, *fp3, *fp4, *fp5, *fp6, *fp7;
	char c1 = 0, c2 = 0, c3 = 0, c4 = 0, c5 = 0, c6 = 0;
	unsigned int u;

	if ((fp1 = fopen("file1.txt", "r")) == NULL) {
		printf("Não foi possível abrir o arquivo.\n");
		exit(0);
	}
	if ((fp2 = fopen("file2.txt", "r")) == NULL) {
		printf("Não foi possível abrir o arquivo.\n");
		exit(0);
	}
	if ((fp3 = fopen("file3.txt", "r")) == NULL) {
		printf("Não foi possível abrir o arquivo.\n");
		exit(0);
	}
	if ((fp4 = fopen("file4.txt", "r")) == NULL) {
		printf("Não foi possível abrir o arquivo.\n");
		exit(0);
	}
	if ((fp5 = fopen("file5.txt", "r")) == NULL) {
		printf("Não foi possível abrir o arquivo.\n");
		exit(0);
	}
	if ((fp6 = fopen("file6.txt", "r")) == NULL) {
		printf("Não foi possível abrir o arquivo.\n");
		exit(0);
	}
	if ((fp7 = fopen("resultado.txt", "wb")) == NULL) {
		printf("Não foi possível abrir o arquivo.\n");
		exit(0);
	} else if (feof(fp1) || feof(fp2) || feof(fp3) || feof(fp4) || feof(fp5) || feof(fp6)) {
		if (c1 != c2)
			fscanf(fp1, "%x\n", &u);
		if (c1 != c3)
			fscanf(fp2, "%x\n", &u);
		if (c1 != c4)
			fscanf(fp3, "%x\n", &u);
		if (c1 != c5)
			fscanf(fp4, "%x\n", &u);
		if (c1 != c6)
			fscanf(fp6, "%x\n", &u);
		}
}

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está executando dentro do if que verifica se é o fim do arquivo (eof). Nunca será executado assim.

 

Além disso, c1, c2 etc são todos 0. Nunca serão diferentes. Logo, não entrará em nenhum if

 

E você poderia usar arrays para diminuir o número de variáveis. Ficaria bem mais prático

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está executando dentro do if que verifica se é o fim do arquivo (eof). Nunca será executado assim.

 

Além disso, c1, c2 etc são todos 0. Nunca serão diferentes. Logo, não entrará em nenhum if

 

E você poderia usar arrays para diminuir o número de variáveis. Ficaria bem mais prático

 

Poderia me dar um exemplo para facilitar ? Como eu disse estou começando aprender agora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Arquivo hex1.txt

 

ff

 

Exemplo do código C

 

#include <stdio.h>
int main()
{
    FILE *fp1;
    unsigned int hex = 0xff, hex1;
 
    fp1 = fopen( "hex1.txt", "r" );
    fscanf( fp1, "%x", &hex1 );
    fclose( fp1 );
 
    if ( hex == hex1 )
    {
        printf( "Valor igual\n" );
    }
 
    return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Arquivo hex1.txt

ff

Exemplo do código C

#include <stdio.h>
int main()
{
    FILE *fp1;
    unsigned int hex = 0xff, hex1;
 
    fp1 = fopen( "hex1.txt", "r" );
    fscanf( fp1, "%x", &hex1 );
    fclose( fp1 );
 
    if ( hex == hex1 )
    {
        printf( "Valor igual\n" );
    }
 
    return 0;
}

 

Eu entendi esse seu exemplo, ele verifica o valor da variável hex, se for igual o valor do arquivo hex1 ele imprime a mensagem, porém meu arquivo existe mais de 600 valores hex, valores como: 0x10, 0xA, 0xF1A, e assim por diante então eu teria que fazer uma forma de identificar todas os valores e comparar com os files 2 a 6 e salvar todas do arquivo 1 que não existam nos demais, tem alguma forma de pegar esses valores hexadecimais ?

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.