Quero saber se tem como comparar as linhas de um arq .TXT

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
franklin_kunioshi
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 27
Registrado em: Qui, 03 Jan 2008 9:24 am
Localização: São Paulo

Quero saber se tem como comparar as linhas de um arq .TXT

Exemplo

Selecionar tudo

PROCEDURE PROC_TXT_TESTE IS
    v_nome_arq   varchar2(255);
    linebuf      varchar2(80);
    in_file      text_io.file_type;
    v_data_ini   date;

    
BEGIN
                                       

	 
	 
	 --A VARIÁVEL V_NOME_ARQ ARMAZENA O NOME DO DOCUMENTO QUE DEVE SER ABERTO
	 v_nome_arq := 'C:\TEXTO.TXT';
   v_data_ini := SYSDATE;
   in_file    := text_io.fopen(V_NOME_ARQ,'R') ;
   GO_BLOCK('CARTAO_FIDELIDADE_POLCOM');
   
    LOOP 
    	BEGIN
   	     text_io.get_line(IN_FILE,LINEBUF);
  	     
             //Se linha do Arquivo .TXT for igual a null então ele passa para a próxima
  	     if linebuf is not null then 
             	     
 	     	
  	   -- valida

	      LAST_RECORD;   	     
	      CREATE_RECORD;
	     :CARTAO_FIDELIDADE_POLCOM.FK_CFID_AD_CARTAO := linebuf;   	    
		    
	     END IF;		 			 	
      	EXCEPTION 
     	  	WHEN NO_DATA_FOUND THEN EXIT;
	    END;
    END LOOP; 
      first_record;
      TEXT_IO.FCLOSE(IN_FILE);
END;


O que acontece é o seguinte.... se no Arquivo TXT existir dois numeros iguais tipo



___________________________________________________________
ARQUIVO .TXT

linha 1 1234
linha 2 2344
linha 3 1234
linha 4 2344
____________________________________________________________


quando ocorrer isto ele deve somente inserir 1 codigo
será que tem como fazer uma comparação destas linhas??


Obrigado pessoal
cron_rj
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 25
Registrado em: Qua, 19 Dez 2007 9:10 am
Localização: Rio de Janeiro RJ

Cara,

Quando eu uso o TEXT.IO , no arquivo eu uso um ";" para serparar os valores, por exemplo:

Linha 1; 1 ; 1234
Linha 2; 2 ; 1234

E na hora em que abro a linha pelo comando linebuffer, uso as funções SQL SUBSTR e INSTR para determinar qual parte da linha eu vou associar a coluna o item indicado. Por exemplo:

Selecionar tudo

            INSERT INTO func_fred (nm_func,
                                   telefone,
                                   cargo,
                                   salario,
                                   depto
                                   )
                           VALUES (
                                (SUBSTR(registro,                                 -- Linha 
                                (INSTR(SUBSTR(registro,1,110),';',1,1) +1 ),      -- Pos. Inicial (nm_func)
                                (INSTR(SUBSTR(registro,1,110),';',1,2) -2 ))),    -- Pos. Final  
                                
                                (SUBSTR(registro,                                 
                                (INSTR(SUBSTR(registro,1,110),';',1,2) +1 ),    
                                (INSTR(SUBSTR(registro,1,110),';',1,3)) -        
                                (INSTR(SUBSTR(registro,1,110),';',1,2) +1 )
                                )),     
                                
                                (SUBSTR(registro,                                 
                                (INSTR(SUBSTR(registro,1,110),';',1,3) +1 ),      
                                (INSTR(SUBSTR(registro,1,110),';',1,4)) -
                                (INSTR(SUBSTR(registro,1,110),';',1,3) +1 )
                                )),                                                
                                
                                (SUBSTR(registro,                                 
                                (INSTR(SUBSTR(registro,1,110),';',1,4) +1 ),      
                                (INSTR(SUBSTR(registro,1,110),';',1,5)) -
                                (INSTR(SUBSTR(registro,1,110),';',1,4) +1 )
                                )),         
                                
                                (SUBSTR(registro,                                 
                                (INSTR(SUBSTR(registro,1,110),';',1,5) +1 ),      
                                (INSTR(SUBSTR(registro,1,110),';',1,6)) -
                                (INSTR(SUBSTR(registro,1,110),';',1,5) +1 )
                                ))
                                );  -- Fim dos values   
Isso é controlado por ponto e vírgula nesse caso vide os comandos SQL. Acho que a partir dai fica facil fazer a lógica que você quer, já que você tem controle do que quer recuperar, pode até usar outro caracter para indicar que a linha é nula.
franklin_kunioshi
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 27
Registrado em: Qui, 03 Jan 2008 9:24 am
Localização: São Paulo

Boa Tarde cron_rj

Ali onde coloquei o nome da linha na vdd é somente pra dizer q é primeira linha do Arquivo TXT e não que faiz parte do texto.

Eu preciso saber como diferenciar os codigos que estao no .TXT


Obrigado
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes