Dowa Posted May 2, 2013 at 07:35 PM Report #505648 Posted May 2, 2013 at 07:35 PM 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?
pmg Posted May 2, 2013 at 10:27 PM Report #505670 Posted May 2, 2013 at 10:27 PM 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!
jsWizard Posted May 3, 2013 at 08:48 AM Report #505682 Posted May 3, 2013 at 08:48 AM 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é!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now