Página 1 de 1

Manipular arquivos com acento

Enviado: 05 Fev 2024 09:42
por marco.prodata
Caros,
Estou fazendo um pequeno programa que recebe o nome de um arquivo como parametro para fazer algumas leituras, só que alguns arquivos com acentuação no nome do mesmo, não estão funcionando:
Exemplo: "MovimentaçãoPixBB (43).txt"

quando executo:
processa "MovimentaçãoPixBB (43).txt"

e dentro do aplicativo testo um if file(), retorna que o arquivo não existe.

Código: Selecionar todos

REQUEST HB_CODEPAGE_PTISO
REQUEST HB_CODEPAGE_PT850

function main 
*************
para wArquivo 

hb_SetCodepage("PT850")

altd()

if !file(wArquivo)
   return nil 
endif    

Imagem

Como resolver?

Manipular arquivos com acento

Enviado: 05 Fev 2024 10:56
por sygecom
Faça um teste usando o caminho completo do arquivo e, usando: hb_FileExists()

exemplo:

if hb_FileExists('c:\arquivo\MovimentaçãoPixBB (43).txt')
alert('achou')
else
alert('nao achou')
endif

Manipular arquivos com acento

Enviado: 05 Fev 2024 11:04
por Itamar M. Lins Jr.
Olá!
Tem que usar a mesma página de código do nome do arquivo.
No editor do prg usando pagina (x) no seu aplicativo 850 e foi criado o arquivo usando UTF8.(hipótese)

Saudações,
Itamar M. Lins Jr.

Manipular arquivos com acento

Enviado: 05 Fev 2024 11:39
por marco.prodata
Itamar M. Lins Jr. escreveu:Olá!
Tem que usar a mesma página de código do nome do arquivo.
No editor do prg usando pagina (x) no seu aplicativo 850 e foi criado o arquivo usando UTF8.(hipótese)

Saudações,
Itamar M. Lins Jr.
Abrindo o arquivo pelo VSCode indica que o mesmo foi feito em UTF8, o conteúdo dele está em UTF8, o problema está no parâmetro que passo do prompt, esse parâmetro que não estou conseguindo converter, se eu forçar um if file("Movimentação.txt") por exemplo funciona, o problema é que os acentos do nome do arquivo ele buga na conversão.

Manipular arquivos com acento

Enviado: 05 Fev 2024 11:40
por marco.prodata
sygecom escreveu:Faça um teste usando o caminho completo do arquivo e, usando: hb_FileExists()
Deu o mesmo erro, acusando que o arquivo não existe.

Manipular arquivos com acento

Enviado: 05 Fev 2024 11:43
por marco.prodata
Um teste, se eu usar a função directory("mov*.txt") ele pega o nome corretos dos arquivos, o problema esta quando chamo:
meuPrograma <nomeDoArquivo>.txt

Manipular arquivos com acento

Enviado: 05 Fev 2024 13:58
por Itamar M. Lins Jr.
Olá!

Código: Selecionar todos

IF hb_FileExists( hb_Translate(wArquivo,"PT850","UTF8EX") )
Saudações,
Itamar M. Lins Jr.

Manipular arquivos com acento

Enviado: 05 Fev 2024 14:43
por marco.prodata
Achei a solução em uma resposta antiga do Przmek na lista do harbour, por padrão as strings passadas pelo prompt de comando como argumentos sempre vem com o codepage EN, e os parametros recebidos antes de conseguir mudar o codepage no main, logo, buga os caracteres antes, o jeito é executar a mudança de codepage antes do main.
INIT PROCEDURE CLIPINIT
SET(_SET_CODEPAGE,"PT850")
RETURN
essa procedure é executada antes do main.

Manipular arquivos com acento

Enviado: 05 Fev 2024 14:57
por JoséQuintas
Talvez assim:

Código: Selecionar todos

FUNCTION Main( ... )

   LOCAL aParList

   Set( _SET_CODEPAGE, "PTISO" )
   aParList := hb_AParams()
Se der certo, pode passar a receber uma lista de arquivos, e não apenas um.