Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

Dowa

Comparando sequências em arquivos

Mensagens Recomendadas

Dowa    0
Dowa

Boa tarde, preciso de uma ajuda. São dois arquivos diferentes que contem uma sequencia de números (CPF) preciso compara-los e retornar quando são iguais. Fiz o seguinte código:

SET SERVEROUTPUT ON
set pagesize 0
set linesize 300
set term off
--spool C:\TAREFAS\Ergon_510_ufa\PMMxPCRJ\consulta_pcrj.txt
declare
   v_linha_1 varchar2(2000);
   v_linha_2 varchar2(2000);
   v_arquivo_1 utl_file.file_type;
   v_arquivo_2 utl_file.file_type;
   v_nome_arquivo_1    varchar2(15) := 'teste1.txt';
   v_nome_arquivo_2    varchar2(15) := 'teste2.txt';
   v_dir			   varchar(40);

  WL_CPF_1		   VARCHAR2(11);
  WL_CPF_2		   VARCHAR2(11);

 begin
 dbms_output.enable(1000000);
 v_dir := '/u03/EERGON/CARGAS';
 v_arquivo_1 := utl_file.fopen(v_dir, v_nome_arquivo_1, 'R'); -- abertura do arquivo 1
 v_arquivo_2 := utl_file.fopen(v_dir, v_nome_arquivo_2, 'R'); -- abertura do arquivo 2

 loop
   begin
  utl_file.get_line(v_arquivo_1, v_linha_1); -- leitura do arquivo 1
  WL_CPF_1 := SUBSTR(v_linha_1, 1, 11);
  dbms_output.put_line('CPF1=' || WL_CPF_1); -- ver CPF1
  loop
    begin
	  utl_file.get_line(v_arquivo_2, v_linha_2); -- leitura do arquivo 2
	  WL_CPF_2 := SUBSTR(v_linha_2, 1, 11);
	  dbms_output.put_line('CPF2=' || WL_CPF_2); -- ver CPF2
		   if (WL_CPF_1 = WL_CPF_2) then
			  dbms_output.put_line('OK!'); -- se os cpfs forem iguais OK!
			  exit;
	  --	 else
	    --	  continue;
		  end if;
    exception
	  when no_data_found then
	  exit;	
    end;
  end loop;
   exception
  when no_data_found then
    exit;
   end;
 end loop;
end;

Só que ele não está me atendendo. Vou postar o resultado:

CPF1=5206477770

CPF2=5206477770

OK!

CPF1=9509319775

CPF2=9509319775

OK!

CPF1=5450638760

CPF2=54506387601

CPF2=48562126734

CPF2=8225488792

CPF2=15319933743

CPF2=81254997768

CPF2=8452115792

CPF1=46362126734

CPF1=8225488792

CPF1=2319933743

CPF1=81254997768

CPF1=8452115792

Percebe-se que na 3º linha ele lê a sequencia e compara com todos do arquivo 2 e não encontra iguais. Volta e ao invés de comparar a 4° linha com todo o arquivo 2 ele varre todo o arquivo 1. Alguém pode me ajudar?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    96
pmg

Ordena os dois grupos de numeros antes de verificares a igualdade.

Depois, com os grupos ordenados, fica tudo mais facil :)


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jsWizard    6
jsWizard

não me parece a maneira mais eficiente de fazer isto.. eu diria que se calhar era melhor carregares os ficheiros para duas tabelas (temporárias) e depois fazias a pesquisa pelos valores nas tabelas.. mas adiante..

o primeiro LOOP varre o primeiro ficheiro todo, mas no segundo LOOP precisas de começar do inicio sempre, ou seja, por cada ciclo do LOOP 1, tens de voltar ao inicio do LOOP 2, neste caso, voltar ao inicio do arquivo 2, só assim poderás comparar os valores todos entre o arquivo 1 e 2, isto tendo em conta que os valores nos arquivos não têm um ordem definida.

Inté!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.