Estou fazendo uma procedure para ler arquivos com extensão .htm e dar saída em um arquivo txt.
Ocorre que os arquivos de origem tem <enter> (Dec: 13 Hex: 0D AscII: CR (carriage return) key: ctrl M) no final da linha, como no exemplo:
Prédio Com. V.Velha 1ª Locação^m
Lojão 240 m2 + Salão 180 m2 Pronto^m
p/ Split Exc. Imóvel Prox Móveis^m
R67577^m
Preciso exportar esse conteúdo para um arquivo txt, como uma tripa, ou seja sem quebra de linha,
Prédio Com. V.Velha 1ª Locação Lojão 240 m2 + Salão 180 m2 Pronto p/ Split Exc. Imóvel Prox Móveis R67577
Desde já agradeço a ajuda.
Sds,
Segue código para análise.
CREATE OR REPLACE PROCEDURE "LETEXTO" (PARAMETRO VARCHAR2) --Data no Formato yyyymmdd
IS
texto VARCHAR2(1024); -- cada linha de dados
arqin sys.utl_file.file_type; -- handle para o arquivo de entrada
arqout sys.utl_file.file_type; -- handle para o arquivo de saída
arqlog sys.utl_file.file_type; -- handle para o arquivo de LOG
HOJE VARCHAR2(20);
ARQUIVO VARCHAR2(1024);
DIRETORIO VARCHAR2(1024);
ARQ VARCHAR2(1024);
DIR VARCHAR2(1024);
TAMANHO VARCHAR2(1024);
CURSOR LISTA IS SELECT DISTINCT
LENGTH(C.FILENAME),C.FILENAME,C.FILENAME
FROM
PUB P, CLPRO C, AD A
WHERE
P.ADNO=C.ADNO AND
A.ADNO=P.ADNO AND
P.VNOFLAG='Y' AND
C.VNOFLAG='Y' AND
A.VNOFLAG='Y' AND
-- TO_CHAR(TRUNC(P.PDATE),'dd/mm/yyyy') = HOJE AND
P.ADRNO <> 31011 AND
P.STATE='VAR' AND
A.PRODTYPE='CO' AND
P.CLASS<>'99' AND
P.ADNO IN (4563051,4565219,4565220,4565221,4565222,4565223,4565225);
BEGIN
arqlog := sys.utl_file.fopen('/u02/ads/LOGIMPORT', 'LOG.TXT', 'w');
sys.UTL_FILE.PUT_LINE(arqlog, '** Problema ao gerar arquivo easyclass.txt **');
arqout := sys.utl_file.fopen('/u02/ads/LOGIMPORT', 'EXPORTA.TXT', 'w');
-- Data recebida como parametro
IF PARAMETRO='DEFAULT' THEN
SELECT TO_CHAR(SYSDATE-1,'dd/mm/yyyy') INTO HOJE FROM DUAL;
ELSE
HOJE:=parametro;
END IF;
OPEN LISTA;
LOOP
/* Devolve cada linha do resultado da consulta acima
em variáveis PL/SQL: */
FETCH LISTA INTO TAMANHO,DIRETORIO,ARQUIVO;
/* Se não houver mais linhas para buscar, sai do laço: */
EXIT WHEN LISTA%NOTFOUND;
IF TAMANHO = '13' THEN
DIR := '/u02/ads/'||SUBSTR(DIRETORIO, 1 , 1);
ARQ := SUBSTR(ARQUIVO, 3 , 7)|| '.HTM';
ELSE
DIR := '/u02/ads/'||SUBSTR(DIRETORIO, 1 , 2);
ARQ := SUBSTR(ARQUIVO, 4 , 7)|| '.HTM';
END IF;
arqin := sys.utl_file.fopen (DIR, ARQ, 'r');
LOOP
BEGIN
sys.utl_file.get_line(arqin, texto);
sys.utl_file.put_line(arqout, texto);
EXCEPTION
WHEN NO_DATA_FOUND THEN
EXIT;
END;
END LOOP;
sys.UTL_FILE.FCLOSE(arqin);
END LOOP;
CLOSE LISTA;
--fechando os arquivos abertos
sys.utl_file.fclose(arqin);
sys.utl_file.fclose(arqout);
EXCEPTION
WHEN UTL_FILE.INVALID_PATH THEN
DBMS_OUTPUT.PUT_LINE('Caminho invalido.');
UTL_FILE.FCLOSE(ARQLOG);
WHEN UTL_FILE.READ_ERROR THEN
DBMS_OUTPUT.PUT_LINE('Erro durante a leitura.');
UTL_FILE.FCLOSE(ARQLOG);
WHEN UTL_FILE.WRITE_ERROR THEN
DBMS_OUTPUT.PUT_LINE('Erro durante a escrita.');
UTL_FILE.FCLOSE(ARQLOG);
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Erro!!');
UTL_FILE.FCLOSE(ARQLOG);
END;
/