Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-02-2015
euMesmo euMesmo is offline
Registrado
 
Registrado: may 2008
Posts: 7
Poder: 0
euMesmo Va por buen camino
Lazarus: TStringList.LoadFromFile error cuando la ruta tiene eñes/acentos

Hola a todos/as.

He estado buscando por varios foros de delphi/lazarus pero no encuentro nada que funcione.

El problema es el siguiente, un programa simple en Windows:

Cargo un archivo de texto, que se encuentra en la misma ruta que el ejecutable, a un stringlist mediante loadfromfile, pues bien, si el ejecutable está en una carpeta (o ruta) cuyo nombre no tiene eñes ni acentos funciona sin más problema. En cuanto cambio el nombre de carpeta por otro que tenga acentos deja de funcionar (si cambio el nombre de carpeta por otro sin acentos funciona).

El código lo podemos resumir en algo como:
Código Delphi [-]
ruta:=AnsiToUtf8(ExtractFilePath(Application.ExeName));
fichero:=TStringList.Create;
fichero.LoadFromFile(ruta+'app.cfg');
Ya he probado, creo que todos, los utf8encode, decode utf8toansi.

¿ Alguna idea?.

Gracias por vuestro tiempo.

Última edición por nlsgarcia fecha: 25-02-2015 a las 21:19:04. Razón: Sintaxis Delphi
Responder Con Cita
  #2  
Antiguo 25-02-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola euMesmo, bienvenido a Club Delphi

Cuando incluyas código en tus mensajes usa las etiquetas de este modo:


Y como es costumbre con los iniciados te invitamos a leer nuestra guía de estilo.

En cuanto a tu consulta, intenta de este modo:
Código Delphi [-]
var
  fichero: TStringList;
begin
  fichero:= TStringList.Create;
  try
    fichero.LoadFromFile(UTF8ToAnsi(ExtractFilePath(Application.ExeName)+'app.cfg'));
    Memo1.Lines.Assign(fichero); // Acción de ejemplo
  finally
    fichero.Free;
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 25-02-2015 a las 19:22:35.
Responder Con Cita
  #3  
Antiguo 25-02-2015
euMesmo euMesmo is offline
Registrado
 
Registrado: may 2008
Posts: 7
Poder: 0
euMesmo Va por buen camino
Gracias ecfisa.

Lo primero mis disculpas por lo del código y gracias por tu respuesta.

Ya había intentando esto sin conseguir el éxito. Intentaré explicar mejor el problema.

En una aplicación, en el evento "FormCreate" creo el stringlist y lo cargo mediante loadfromfile, si el ejecutable y el cfg (es un fichero de texto utf-8) están en la carpeta "Aplicacion" funciona (carga el archivo de configuración), si pongo cualquier nombre a esa carpeta que no tenga eñes o acentos sigue funcionando, pero si lo cambio por "Aplicación" aparece el error que de que no puede cargar el archivo (Unable to open file) aunque la ruta que aparece en el mensaje es la correcta, acento incluido.

De momento todo me hace pensar que es un bug de lazarus en windows ya que en linux el mismo código no genera el error.

¿ Alguna idea?. Muchas gracias.
Responder Con Cita
  #4  
Antiguo 25-02-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola euMesmo.

Es verdaderamente extraño... En mi código original de prueba funciona correctamente:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  fichero: TStringList;
begin
  fichero:= TStringList.Create;
  try
    fichero.LoadFromFile(UTF8ToAnsi('C:\tmp\ÁéíóúÑñ\ÁéíóúÑñ.txt'));
    Memo1.Lines.Assign(fichero);
  finally
    fichero.Free;
  end;
end;
Muestra:


Prueba realizada en Windows 7 y Lazarus Ver: 1.2.6 - Revisión SVN: 46529

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 25-02-2015
euMesmo euMesmo is offline
Registrado
 
Registrado: may 2008
Posts: 7
Poder: 0
euMesmo Va por buen camino
Si efectivamente funciona, pero si ejecutable y archivo de texto lo mueves a una carpeta cuyo nombre no tenga acentos sigue funcionando, pero al cambiar el nombre de esa carpeta con un acento deja de funcionar, no por el nombre del archivo (eñé.cfg en mi prueba) si no por el de la carpeta que lo contiene.

Pongo el código con el que he probado (uso W7 y Lazarus 1.2.6):

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  fichero: TStringList;
begin
  fichero:= TStringList.Create;
  try
    fichero.LoadFromFile(UTF8ToAnsi(ExtractFilePath(Application.ExeName)+'eñé.cfg'));
    Memo1.Lines.Assign(fichero);
  finally
    fichero.Free;
  end;
end;

Como dices es muy extraño. De momento estoy diciendo a los usuarios de windows que coloquen la carpeta con el programa en "c:" para evitar problemas pero, al ser una aplicación que no necesita ningún tipo de instalación, la verdad queda mal.

Última edición por euMesmo fecha: 25-02-2015 a las 20:45:07. Razón: Completar datos
Responder Con Cita
  #6  
Antiguo 26-02-2015
euMesmo euMesmo is offline
Registrado
 
Registrado: may 2008
Posts: 7
Poder: 0
euMesmo Va por buen camino
Bien, creo que encontré el problema.
El código funciona si quito "UTF8ToAnsi"

Gracias a todos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Memo + LoadFromFile = no coje acentos, ñ, etc Firewind Lazarus, FreePascal, Kylix, etc. 5 26-05-2010 10:46:38
TJpegImage.LoadFromFile repite parte de mi ruta!! Garry Gráficos 15 02-09-2008 10:41:04
TStringList.LoadFromFile y líneas con caracteres #0 Lord Delfos Varios 4 11-04-2008 14:48:52
Acentos y eñes llonigualker Varios 3 20-11-2004 14:25:35
Ordernar a acentos y eñes (tablas dbase) Jose_Pérez SQL 2 17-11-2003 15:49:20


La franja horaria es GMT +2. Ahora son las 09:51:20.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi