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 Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-09-2012
LuisMiguel LuisMiguel is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 33
Poder: 0
LuisMiguel Va por buen camino
convertir unicode string to char en c++ builder

Saludos a todos
Necesito convertir un String 'o UnicodeString a un char *

char * a = "Ejemplo"; // El resultado de esto es: "Ejemplo";
String a = "Ejemplo"; // El resultado de esto es: L"Ejemplo";

Como ven la (L) esta delante de lo que me da como resultado,cosa que quisiera eliminar porque asi me da error en lo que estoy haciendo.
Responder Con Cita
  #2  
Antiguo 01-10-2012
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 204
Poder: 16
lmpadron Va por buen camino
Cita:
Empezado por LuisMiguel Ver Mensaje
Saludos a todos
Necesito convertir un String 'o UnicodeString a un char *

char * a = "Ejemplo"; // El resultado de esto es: "Ejemplo";
String a = "Ejemplo"; // El resultado de esto es: L"Ejemplo";

Como ven la (L) esta delante de lo que me da como resultado,cosa que quisiera eliminar porque asi me da error en lo que estoy haciendo.
Saludos

Revisa este link puede que te sirva
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código.


Cuando miras fijamente al abismo, este te devuelve la mirada


oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________
Responder Con Cita
  #3  
Antiguo 01-10-2012
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por LuisMiguel Ver Mensaje
Saludos a todos
Necesito convertir un String 'o UnicodeString a un char *

char * a = "Ejemplo"; // El resultado de esto es: "Ejemplo";
String a = "Ejemplo"; // El resultado de esto es: L"Ejemplo";

Como ven la (L) esta delante de lo que me da como resultado,cosa que quisiera eliminar porque asi me da error en lo que estoy haciendo.
La "L" es una notación, no aparece en la cadena.
1.- Si tienes activada en las opciones del proyecto: _TCHAR maps to = char entonces y partiendo un un String Unicode, la función t_str() te devuelve una cadena tipo char*.
2.- Si tienes activada en las opciones del proyecto: _TCHAR maps to = wchar_t entonces y partiendo un un String Unicode, la función t_str() te devuelve una cadena tipo wchar_t*.
3.- c_str() siempre devuelve un wchar_t si se aplica a un UnicodeString.
4.- Siempre puedes forzar la conversión a AnsiString y aplicar c_str():
Código Delphi [-]
char *c = AnsiString(L"HOLA").c_str();


Saludos.
Responder Con Cita
  #4  
Antiguo 01-10-2012
LuisMiguel LuisMiguel is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 33
Poder: 0
LuisMiguel Va por buen camino
Gracias amigos por contestar
Estuve probando las variantes que me dieron pero aun sigue mi el problema
Voy a explicar mejor lo que quiero lograr,quizas este cometiendo algun error,
En la exportacion de un excel quiero dar la opcion de que se escoja la carpeta donde se va a guardar ese excel,para ello obtengo la direccion de un DirectoryListBox1 y lo paso a un Edit,en otro Edit doy la opcion para ponerle el nombre al excel
Código:
   String Direccion = Edit1->Text;
   String Nombre = Edit2->Text;
   String Barras = "\\";
   String Salvar = Direccion + Barras+ Nombre + ".xlsx";
   char *c = AnsiString (Salvar).c_str();
cuando trato de salvarlo en esta linea me da error:no se puede tener acceso al archivo,intente lo siguiente: ....... y pone unas cuantas cosas.
Código:
Excel.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).OleProcedure("SaveAs", c);
Si le pongo la direccion donde quiero salvar el excel directamente funciona perfectamente
Código:
Excel.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).OleProcedure("SaveAs","D:\\prueba.xlsx");
En si lo que quisiera lograr es que : c tuviera ese valor("D:\\prueba.xlsx")
Gracias por su tiempo!!
Responder Con Cita
  #5  
Antiguo 01-10-2012
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
Cita:
Empezado por LuisMiguel Ver Mensaje
En si lo que quisiera lograr es que : c tuviera ese valor("D:\\prueba.xlsx")
Hola.

Entonces creo que podrías simplemente hacer:
Código:
  String Salvar = Edit1->Text + "\\\\" + Edit2->Text + ".xlsx";
  char *c = Salvar.c_str();
  ...
Saludos.

Edito: Y se puede reducir el código un poco más:
Código:
  char *c = AnsiString(Edit1->Text + "\\\\" + Edit2->Text + ".xlsx").c_str();
  ...
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 01-10-2012 a las 23:32:30. Razón: Agregar ejemplo
Responder Con Cita
  #6  
Antiguo 01-10-2012
LuisMiguel LuisMiguel is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 33
Poder: 0
LuisMiguel Va por buen camino
saludos ecfisa
Me sigue dando el mismo error:
Compruebe que la carpeta especificada existe. Compruebe que la carpeta que contiene el archivo no es de solo lectura. Compruebe que el archivo no contiene ninguno de los siguientes caracteres: < > ? [ ] : | o * Compruebe que el nombre del archivo o de la ruta no tienen mas de 218 caracteres.

Sin embargo como le decia cuando lo pongo directamente funciona
Código:
Excel.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).OleProcedure("SaveAs","D:\\prueba.xlsx");
Responder Con Cita
  #7  
Antiguo 01-10-2012
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 LuisMiguel.

Pero ese eror no proviene de la composición de la cadena, cuyo valor es fácilmente comprobable:
Código:
void __fastcall TForm1::Button1Click(TObject *Sender) {
  TCaption a = "D:",
           b = "\\\\",
           c = "prueba",
           d = ".xlsx";
  ShowMessage(AnsiString(a+b+c+d).c_str());
}
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 02-10-2012
LuisMiguel LuisMiguel is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 33
Poder: 0
LuisMiguel Va por buen camino
Hice la siguiente prueba con lo que usted me dijo:
Código:
  char *b = AnsiString(Edit1->Text + "\\\\" + Edit2->Text + ".xlsx").c_str();//  resultado D:\backups\\prueba.xlsx
  char *c = "D:\\backups\\prueba.xlsx"; // resultado D:\backups\prueba.xlsx
  ShowMessage(b);
  ShowMessage(c);
Como ve el resultado de las 2 cadenas son diferentes.
Quizas el detalle este en las \\\\ que tiene
Código:
char *b = AnsiString(Edit1->Text + "\\\\" + Edit2->Text + ".xlsx").c_str();
Responder Con Cita
  #9  
Antiguo 02-10-2012
LuisMiguel LuisMiguel is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 33
Poder: 0
LuisMiguel Va por buen camino
probe como me dijo y devuelve: Tipo de variable incorrecto
Responder Con Cita
  #10  
Antiguo 02-10-2012
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 LuisMiguel
.
Cita:
Quizas el detalle este en las \\\\ que tiene
Si claro, de ese modo agrega "\\", eso interpreté cuando dijiste
Cita:
lo que quisiera lograr es que : c tuviera ese valor("D:\\prueba.xlsx")
Te hago una consulta, ¿ Que valores tienen Edit1->Text y Edit2->Text exáctamente ? (no lo que muestra sino lo que le ingresas)

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 02-10-2012
LuisMiguel LuisMiguel is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 33
Poder: 0
LuisMiguel Va por buen camino
Lo que ingreso
Edit1 D:\backups
Edit2 prueba
Responder Con Cita
  #12  
Antiguo 02-10-2012
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
Cita:
Empezado por LuisMiguel Ver Mensaje
Lo que ingreso
Edit1 D:\backups
Edit2 prueba
Hola.

Dado tu ingreso, si deseas como resultado: "D:\backups\Prueba.xlsx" podés hacer:
Código:
  String s = Edit1->Text;

  char *c = AnsiString(IncludeTrailingPathDelimiter(s)+
                       Edit2->Text+".xlsx").c_str();
Si deseas como resultado: "D:\\bakcups\\Prueba.xlsx":
Código:
 AnsiString s = Edit1->Text;

  s = s.SubString(0,s.Pos("\\")) + "\\" +
      s.SubString(s.Pos("\\")+1,s.Length()) +
      + "\\\\" + Edit2->Text + ".xlsx";
 char *c = AnsiString(s).c_str();
Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 02-10-2012 a las 01:03:34. Razón: corregir identado
Responder Con Cita
  #13  
Antiguo 02-10-2012
LuisMiguel LuisMiguel is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 33
Poder: 0
LuisMiguel Va por buen camino
Finalmente la solucion para exportarlo es con:
Código:
String s = Edit1->Text;
  char *c = AnsiString(IncludeTrailingPathDelimiter(s)+
                       Edit2->Text+".xlsx").c_str();
Muchismas gracias por su tiempo y por su ayuda.Funciona perfectamente!!!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Convertir char*, char[], string lmpadron C++ Builder 2 29-10-2010 10:08:45
convertir int o char a hexadecimal. bactering C++ Builder 2 05-10-2008 22:18:45
convertir un int a string en builder c++ BC++ C++ Builder 3 25-07-2008 16:24:50
Convertir un Single en 4 char cmurua71 Varios 4 15-06-2007 12:25:26
String, PChar y UNICODE Ñuño Martínez Varios 5 04-06-2007 20:39:20


La franja horaria es GMT +2. Ahora son las 19:50:29.


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