Jump to content
Dowa

Comparando sequências em arquivos

Recommended Posts

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?

Share this post


Link to post
Share on other sites
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!

Share this post


Link to post
Share on other sites
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é!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.