Ler Arquivo TXT ASCII

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Marsenne
Usuário Nível 1
Usuário Nível 1
Mensagens: 16
Registrado em: 14 Fev 2008 14:14
Localização: Brasília

Ler Arquivo TXT ASCII

Mensagem por Marsenne »

Eu crio um arquivo .TXT no VB6 com o padrão ASCII. Quando abro no bloco de notas todos os caracteres estão corretos inclusive os acentos e cedilhas. Estou importando para o CLIPPER com a opção APPEND FROM ... DELIMITED e quando é importado os acentos e cedilhas ficam truncados. O que fazer?
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Re: LER ARQUIVO TXT ASCII

Mensagem por Eolo »

O Windows (Bloco de Notas, Word, etc) usa o set de caracteres ANSI, enquanto que o DOS (Clipper) usa o OEM, por isso a "bagunça". O xHarbour tem funções prontas pra converter de um set pra outro, mas o Clipper - até onde eu sei - não tem. O jeito é você montar uma função sua (usando o STRTRAN() ou STUFF() etc.) e usá-la depois do APPEND pra acertar a acentuação.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: LER ARQUIVO TXT ASCII

Mensagem por sygecom »

Com a dica do Colega Eolo, você pode usar a função do link abaixo:
viewtopic.php?f=43&t=4374
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Marsenne
Usuário Nível 1
Usuário Nível 1
Mensagens: 16
Registrado em: 14 Fev 2008 14:14
Localização: Brasília

Re: LER ARQUIVO TXT ASCII

Mensagem por Marsenne »

Obrigado. A função resolveu. Alterei um pouco para ficar mais rápida e não utilizar matrizes que consomem muita memória no Clipper. Segue abaixo a função que troca caracteres truncados do Windows para DOS utilizando a função nativa do Clipper STRTRAN():

// Converte Caracteres Windows para DOS

Código: Selecionar todos

FUNCTION VWinDos(pString)
wCarWin="áéíóúãõâêîôûàèìòùäëïöüçñÁÉÍÓÚÃÕÂÊÎÔÛÀÈÌÒÙÄËÏÖÜÇÑ"
wCarDos=" ‚¡¢£ÆäƒˆŒ“–…Š•—„‰‹”‡¤µÖàéÇå¶Ò×âê·ÔÞãëŽÓØ™š€¥"
wNovaStr=ALLTRIM(pString)
wRetorno=""
FOR wCont=1 TO 48
    wNovaStr=STRTRAN(wNovaStr,SUBSTR(wCarWin,wCont,1),SUBSTR(wCarDos,wCont,1))
    wRetorno=wNovaStr
NEXT
RETURN(wRetorno)
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: LER ARQUIVO TXT ASCII

Mensagem por Maligno »

e não utilizar matrizes que consomem muita memória no Clipper
Se fosse em outra situação, até discordaria de você. Mas na função que foi usada de exemplo, realmente o consumo de memória da matriz é maior. Agora, pra quem utiliza muitas variáveis de memória, matriz é o ideal pra economizar memória, simplificar código e acelerar o processamento. Apenas a título de observação: tenho listas de GETs que podem contar com centenas de campos. Só uso matrizes. Até por questão de codificação, o uso de variáveis poderia até inviabilizar o recurso.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Responder