Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-04-2015
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Después de toda la mañana dando vueltas y probando diferentes códigos he encontardo, más o menos. una solución.
Código:
TIniFile *fIni = new TIniFile(cIniFile);
TStringList *Entorno  = new TStringList();
fIni->ReadSectionValues("Datos", Entorno);

Entorno->Strings[0] = Entorno->Strings[0].SubString(Entorno->Strings[0].Pos("=") + 1, Entorno->Strings[0].Length());
Entorno->Strings[1] = Entorno->Strings[1].SubString(Entorno->Strings[1].Pos("=") + 1, Entorno->Strings[1].Length());
Entorno->Strings[2] = Entorno->Strings[2].SubString(Entorno->Strings[2].Pos("=") + 1, Entorno->Strings[2].Length());
delete fIni;
No es la forma que más me seduce pero no he encontrado otra ya que si trato de hacer esto:
Código:
UnicodeString cEntorno = Entorno->Strings[0].SubString(Entorno->Strings[0].Pos("=") + 1, Entorno->Strings[0].Length());
dentro de la variable me devuelve siempre una cadena vacía.
Responder Con Cita
  #2  
Antiguo 01-04-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 Angel.Matilla

Cita:
Empezado por Angel.Matilla Ver Mensaje
...
Sin embargo si trato de leerlo con este otro código:
Código:
TIniFile *fIni = new TIniFile(ChangeFileExt(Application->ExeName, ".ini"));
cEntorno = fIni->ReadString("Datos", "Entorno", cEntorno);
cAcceso  = fIni->ReadString("Datos", "Acceso" , cAcceso);
cTablas  = fIni->ReadString("Datos", "Tablas" , cTablas);
delete fIni;
Siempre me devuelve cadenas vacías y no entiendo el motivo. Y me da lo mismo hacerlo sobre Builde 6 que sobre Builder XE3.
En C++ Builder 6 ese código no devuelve cadenas vacías (#7).

Cita:
Empezado por Angel.Matilla Ver Mensaje
...
Me he dado cuenta que si pongo esto:
Código:
TStringList *slIniFile = new TStringList();
TIniFile *fIni = new TIniFile(ChangeFileExt(Application->ExeName, ".ini"));
fIni->ReadSectionValues(UnicodeString("DATOS"), slIniFile);
cAux = slIniFile->Text;
en este slIniFile->Text aparece esto mirando con el depurador:
Cita:
"Entorno=C:\\DatAfi21\\Gia.ini\r\nAcceso=C:\\DatAfi21\\Acceso\r\nTablas=C:\\DatAfi21\\Tablas\r\n "
lo que significa que estar la información está, pero si hago esto:
Código:
cEntorno = slIniFile->Strings[0];
que en teoría debería valer Entorno=C:\\DatAfi21\\Gia.ini, ¡no hay ningún valor en la variable!Me devuelve NULL.
Me tiene total y aboslutamente despistado.
En C++ Builder 6, slIniFile->Strings[0] tiene el valor: Entorno=C:\DatAfi21\DatAfi21\Gia.ini

En resumen, tal como ya te comente en el mensaje #7, en C++ Builder 6 ambos casos funcionan.

Cita:
Empezado por Angel.Matilla Ver Mensaje
Después de toda la mañana dando vueltas y probando diferentes códigos he encontardo, más o menos. una solución.
Código:
TIniFile *fIni = new TIniFile(cIniFile);
TStringList *Entorno  = new TStringList();
fIni->ReadSectionValues("Datos", Entorno);

Entorno->Strings[0] = Entorno->Strings[0].SubString(Entorno->Strings[0].Pos("=") + 1, Entorno->Strings[0].Length());
Entorno->Strings[1] = Entorno->Strings[1].SubString(Entorno->Strings[1].Pos("=") + 1, Entorno->Strings[1].Length());
Entorno->Strings[2] = Entorno->Strings[2].SubString(Entorno->Strings[2].Pos("=") + 1, Entorno->Strings[2].Length());
delete fIni;
...
Pero eso es otra cosa que lo que mencionas en el primer mensaje. Ahora de lo obtenido con ReadSectionValues queres obtener la parte de la cadena posterior al "="...

La forma que expones es correcta, aunque podes ahorrar un poco de código usando un ciclo:
Código PHP:
void __fastcall TForm1::afterEqual(TObject *Sender) {
  
TIniFileini = new TIniFile (iniName);
  
TStringssl = new TStringList;

  
ini->ReadSectionValues("Datos"sl);
  for(
int i 0sl->Counti++)
    
sl->Strings[i] = sl->Strings[i].SubString(sl->Strings[i].Pos("=")+1MaxInt);

  
Memo2->Clear();
  
Memo2->Lines->Assign(sl);

  
// (*)
  
AnsiString Entorno sl->Strings[0].SubString(sl->Strings[0].Pos("=")+1MaxInt);
  
ShowMessage(Entorno);

  
delete ini;
  
delete sl;

Cita:
Empezado por Angel.Matilla Ver Mensaje
...
No es la forma que más me seduce pero no he encontrado otra ya que si trato de hacer esto:
Código:
UnicodeString cEntorno = Entorno->Strings[0].SubString(Entorno->Strings[0].Pos("=") + 1, Entorno->Strings[0].Length());
dentro de la variable me devuelve siempre una cadena vacía.
Como muestro bajo el comentario (*), en C++ Builder 6 no devuelve cadena vacía

Sobre si C++ Builder XE3 o el comportamiento de la función UnicodeString varían de algún modo el resultado lo ignoro, ya que mi versión de C++ Builder no la incluye.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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
Leer fichero XML itsi Internet 1 23-10-2008 22:50:15
Leer parte de un fichero .RTf Tonio Varios 2 27-03-2008 11:25:53
leer de fichero machingol Varios 7 09-05-2007 17:22:42
Leer fichero rocio84 Varios 1 21-05-2006 10:45:06
Leer un fichero .ini oesteve OOP 6 16-06-2003 16:40:20


La franja horaria es GMT +2. Ahora son las 18:42:08.


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