file ini

Moderator: Rathinagiri

Post Reply
User avatar
danielcrocciari
Posts: 22
Joined: Thu Feb 11, 2010 12:56 am
DBs Used: DBF, MySQL, SQLite
Location: Nagano - Japão
Contact:

file ini

Post by danielcrocciari »

Olá caros amigos,

Localizei uma falha quando utilizo a versão UNICODE, com as configurações:

SET LANGUAGE TO PORTUGUESE
SET CODEPAGE TO UNICODE

Salvo no arquivo ini os textos:

Fabrica de Cafe Brasil
Fábrica de Cafe Brasil
Fábrica de Café Brasil

Quando faço a leitura, o retorno é o seguinte:

Fabrica de Cafe Brasil
não tem acentos, retorno correto

Fábrica de Cafe Brasi
possui um acento, retorna um caracter a menos

Fábrica de Café Bras
possui dois acentos, retorna dos caracteres a menos

Vejam o código abaixo:

Code: Select all

* arquivo main.prg
#include <hmg.ch>

Function Main

	SET LANGUAGE TO PORTUGUESE
	SET CODEPAGE TO UNICODE

	public pcFileIni := "config.ini"
	
	public pcEmpresa := "Fabrica de Cafe Brasil"
	public pcEmpresa1 := "Fábrica de Cafe Brasil"
	public pcEmpresa2 := "Fábrica de Café Brasil"
	public pcEmpresaNew := ""
	public pcEmpresaNew1 := ""
	public pcEmpresaNew2 := ""
	
	ini_save()
	
	ini_load()

    Load Window Main
    Main.Center
    Main.Activate

Return



function ini_save()

	BEGIN INI FILE pcFileIni	
		SET SECTION "config" ENTRY "business" TO pcEmpresa
		SET SECTION "config" ENTRY "business1" TO pcEmpresa1
		SET SECTION "config" ENTRY "business2" TO pcEmpresa2		
	END INI
	
return	

function ini_load() 

	BEGIN INI FILE pcFileIni
		GET pcEmpresaNew  SECTION "config" ENTRY "business"
		GET pcEmpresaNew1  SECTION "config" ENTRY "business1"
		GET pcEmpresaNew2  SECTION "config" ENTRY "business2"
	END INI

return

Vejam a imagem:
Attachments
erro_ini.rar
(1.46 MiB) Downloaded 92 times
erro_ini.png
erro_ini.png (7.05 KiB) Viewed 2436 times
Daniel Crocciari
Brasil - Japan
Projetos HMGLights

HMGLights Site
http://hmglights.wordpress.com/


Canal do YouTube
http://www.youtube.com/hmglights


Céu Azul Tecnologia & Software
http://www.ceuazul.net
User avatar
Claudio Ricardo
Posts: 367
Joined: Tue Oct 27, 2020 3:38 am
DBs Used: DBF, MySQL, MariaDB
Location: Bs. As. - Argentina

Re: file ini

Post by Claudio Ricardo »

Hola Daniel... puedes probar con las funciones HMG_Unicode_To_Ansi (cTextUtf) y HMG_Ansi_To_Unicode (cTextAnsi)
yo las uso cuando creo un archivo .txt y luego lo leo desde el programa, tambien puede ser el BOM (2 caracteres mas al comienzo)
para quitarlo: HMG_UTF8RemoveBOM (cTextWithBOM).
Corrige al sabio y lo harás más sabio, Corrige al necio y lo harás tu enemigo.
WhatsApp / Telegram: +54 911-63016162
User avatar
danielcrocciari
Posts: 22
Joined: Thu Feb 11, 2010 12:56 am
DBs Used: DBF, MySQL, SQLite
Location: Nagano - Japão
Contact:

Re: file ini

Post by danielcrocciari »

Claudio Ricardo wrote: Sun Aug 01, 2021 3:50 am Hola Daniel... puedes probar con las funciones HMG_Unicode_To_Ansi (cTextUtf) y HMG_Ansi_To_Unicode (cTextAnsi)
yo las uso cuando creo un archivo .txt y luego lo leo desde el programa, tambien puede ser el BOM (2 caracteres mas al comienzo)
para quitarlo: HMG_UTF8RemoveBOM (cTextWithBOM).
Tentei fazer essas alterações, para fazer a leitura do arquivo, mas infelizmente não deu certo.

O engraçado é que o programa salva corretamente, ao editar o arquivo ini em um editor de texto, está tudo correto, somente quando é feita a leitura no programa é que os dados voltam com problema.
Daniel Crocciari
Brasil - Japan
Projetos HMGLights

HMGLights Site
http://hmglights.wordpress.com/


Canal do YouTube
http://www.youtube.com/hmglights


Céu Azul Tecnologia & Software
http://www.ceuazul.net
User avatar
Claudio Ricardo
Posts: 367
Joined: Tue Oct 27, 2020 3:38 am
DBs Used: DBF, MySQL, MariaDB
Location: Bs. As. - Argentina

Re: file ini

Post by Claudio Ricardo »

Hola... Estuve probando tu codigo con el mismo resultado que tú, pero vi que al archivo .ini lo crea
codificado en formato UCS-2 Little Endian, tal vez ese sea el problema.
Tuve el mismo problema hace mucho con un juego (Lineage 2) que el .ini no admitia "ñ" ni acentos.
Corrige al sabio y lo harás más sabio, Corrige al necio y lo harás tu enemigo.
WhatsApp / Telegram: +54 911-63016162
huiyi_ch
Posts: 172
Joined: Sat May 21, 2016 5:27 am

Re: file ini

Post by huiyi_ch »

Hello,friend
please look at the post,perhaps can solved you question.


https://www.hmgforum.com/viewtopic.php?f=20&t=5594
User avatar
Claudio Ricardo
Posts: 367
Joined: Tue Oct 27, 2020 3:38 am
DBs Used: DBF, MySQL, MariaDB
Location: Bs. As. - Argentina

Re: file ini

Post by Claudio Ricardo »

Hi... Work fine with this patch !!! Thanks to Edward for patch and Huiyi_ch for the link !!!!
Corrige al sabio y lo harás más sabio, Corrige al necio y lo harás tu enemigo.
WhatsApp / Telegram: +54 911-63016162
User avatar
danielcrocciari
Posts: 22
Joined: Thu Feb 11, 2010 12:56 am
DBs Used: DBF, MySQL, SQLite
Location: Nagano - Japão
Contact:

Re: file ini

Post by danielcrocciari »

Claudio Ricardo wrote: Sun Aug 01, 2021 12:34 pm Hola... Estuve probando tu codigo con el mismo resultado que tú, pero vi que al archivo .ini lo crea
codificado en formato UCS-2 Little Endian, tal vez ese sea el problema.
Tuve el mismo problema hace mucho con un juego (Lineage 2) que el .ini no admitia "ñ" ni acentos.
Exatamente o que percebi aqui, ontem fiz alguns testes e verifiquei o arquivo criado e realmente o mesmo está sendo criado com "UCS-2 Little Endian".
Daniel Crocciari
Brasil - Japan
Projetos HMGLights

HMGLights Site
http://hmglights.wordpress.com/


Canal do YouTube
http://www.youtube.com/hmglights


Céu Azul Tecnologia & Software
http://www.ceuazul.net
User avatar
Claudio Ricardo
Posts: 367
Joined: Tue Oct 27, 2020 3:38 am
DBs Used: DBF, MySQL, MariaDB
Location: Bs. As. - Argentina

Re: file ini

Post by Claudio Ricardo »

Hola... Yo cambie el archivo c_ini.c por el de Edward del post que indica Huiyi_ch arriba, recompilé la
librería y funcionó perfecto, con acentos y letra Ñ.
Corrige al sabio y lo harás más sabio, Corrige al necio y lo harás tu enemigo.
WhatsApp / Telegram: +54 911-63016162
User avatar
danielcrocciari
Posts: 22
Joined: Thu Feb 11, 2010 12:56 am
DBs Used: DBF, MySQL, SQLite
Location: Nagano - Japão
Contact:

Re: file ini

Post by danielcrocciari »

Uma maneira fácil, porém não elegante é por exemplo salvar os dados como código ASCII, ao restaurar as informações, converte de ASCII e aí obtemos o valor inicial.

É possível fazer isso, caso não queira recompilar nenhuma da funções.

Veja exemplo de uma função de conversão

Code: Select all

// ********************************************************
// converte um texto em ascii para o texto original
function converte_ascii_string( texto )
local i, count, newtexto, ord

	count := len(texto)
	
	newtexto := ""
	
	For i := 1 To count
	
		ord = chr( val( substr( texto, i, 3 ) ) )
		
		i := i + 2
		
		newtexto := newtexto + ord
	
	Next

return newtexto

// ********************************************************
// converte um texto em ascii para o texto original
function converte_string_ascii( texto )
local i, count, newtexto, ascii

	count := len(texto)
	
	newtexto := ""
	
	For i := 1 To count
	
		ascii := asc( substr(texto,i,1) )
	
		newtexto += strzero(ascii,3)
		
	Next

return newtexto

Com estas funções, basta executá-las ao salvar e depois aplicar o reverso ao ler as informações do arquivo ini, como disse não é elegante, mas funciona muito bem.

Obrigado à todos os colaboradores e amigos.
Daniel Crocciari
Brasil - Japan
Projetos HMGLights

HMGLights Site
http://hmglights.wordpress.com/


Canal do YouTube
http://www.youtube.com/hmglights


Céu Azul Tecnologia & Software
http://www.ceuazul.net
Post Reply