Boa tarde a todos, Estou em quase uma medida de loucura ou estranheza. Estou fazendo, obviamente, um programa progress que lê um arquivo texto qualquer e que tem como conteudo, uma linha com mais de 430 caracteres e, não tem padrão nenhum aparente para fazer um delimitador. Só que esta linha contendo mais de 430 caracteres dá pau no programa. Existe uma forma de ele ler ou armazenar em memória uma quantidade bem maior que isso? Por exemplo, 4000 caracteres? E vejam que nao tem nada para restringir o tamanho. Segue o meu código para ficar mais fácil a busca para a solução. /*-----------------------------------------------------------------*/ DEFINE VARIABLE cValorArquivo AS CHARACTER NO-UNDO FORMAT "x(4000)". INPUT FROM VALUE(SEARCH("C:\Temp\ems2.log2.txt")). DO WHILE TRUE ON ENDKEY UNDO, LEAVE: IMPORT UNFORMATTED cValorArquivo. MESSAGE LENGTH (cValorArquivo) VIEW-AS ALERT-BOX INFO BUTTONS OK. END. INPUT CLOSE. Estou tentando importar a linha abaixo: [13/04/03@17:48:40.217-0300] P-001940 T-002276 2 4GL 4GLTRACE Run verifica_integridade "xxxxxxxx xxxx x xxxx xx xxxxxxxxx xxxx 123456789 3 24/10/08 18 3 11011111111111101111111111101111110111111101110011101111010001011100000000000111111101011100110000000000000000000000000100010000000000000010010000000000000000000000000000000000000000000000000000000000 UYNLQZCOTWUHEHQ-SHQLUJYNW-ZWU-CWSCDRDHJQDUZRGQESLQLDNKABDLVLJFINNAVJALYYY" [find_registro - cdp/cdapi524.p @ 2421]
Seu código esta correto, acho que o problema é o arquivo que você esta importando, não deve ter um character terminador de linha. Eu tive um problema desse e a solução que encontrei foi colocar o terminador de linha no arquivo antes de fazer a importação. Tente fazer desta forma: Código: DEFINE VARIABLE cValorArquivo AS CHARACTER NO-UNDO FORMAT "x(4000)". output to VALUE(SEARCH("C:\Temp\ems2.log2.txt")) append. put unformatted chr(10). output close. INPUT FROM VALUE(SEARCH("C:\Temp\ems2.log2.txt")). DO WHILE TRUE ON ENDKEY UNDO, LEAVE: IMPORT UNFORMATTED cValorArquivo. MESSAGE LENGTH (cValorArquivo) VIEW-AS ALERT-BOX INFO BUTTONS OK. END. INPUT CLOSE.
assim deu certo aqui Código: DEFINE VARIABLE cValorArquivo AS CHARACTER NO-UNDO FORMAT "x(4000)". INPUT FROM VALUE(SEARCH("C:\Temp\ems2.log2.txt")). DO WHILE TRUE ON ENDKEY UNDO, LEAVE: IMPORT UNFORMATTED cValorArquivo. MESSAGE (cValorArquivo) VIEW-AS ALERT-BOX INFO BUTTONS OK. END. output to VALUE(SEARCH("C:\Temp\ems2.log2.txt")) append. put unformatted chr(4000). output close. INPUT CLOSE.
Pergunta, essa linha que dá problema é a última? Não sei o motivo certo, mas quando faz um input, você precisa ter a última linha em branco para conseguir importar todas corretamento, senão ele vai ignorar esta última linha. Se for assim, a solução do LeandroSantos é a melhor para o caso, pois ele coloca o chr(10) no final e quebra a última linha, então esse arquivo já ficou salvo e por isso você está conseguindo importar. Também, não precisa do put unformat chr(4000) que você fez no final, porque chr() exibe um caracter de acordo com o valor ascii e não existe o caracter 4000.