• Viernes 29 de Marzo de 2024, 13:40

Autor Tema:  Convertir De Int A Char O Viceversa??  (Leído 11894 veces)

Ziara

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Convertir De Int A Char O Viceversa??
« en: Martes 1 de Abril de 2008, 20:12 »
0
Hola a todos, a ver si me pueden echar una mano.

tengo un ListView en vsReport, donde con:
Código: Text
  1.  
  2. int index = this->ListView->ItemIndex;
  3. index = index + 1;
  4.  
  5.  
pinchando en cada fila/renglón del ListView, puedo saber a cuál pertenece, si pincho en la fila 1, index = 1 y así sucesivamente.

por otra tengo un .txt donde guardo información sobre cada renglón de la manera:

Código: Text
  1. 1
  2. nombre:pepe
  3. edad:14
  4. ciudad:madrid
  5.  
  6. 2
  7. nombre:pepa
  8. edad:25
  9. ciudad:madrid
  10.  

para leer del fichero uso:
Código: Text
  1.  
  2. FILE *OFile = fopen("fichero.txt","r");
  3. char linea[50];
  4. char c;
  5.  
  6. if (OFile == NULL)
  7. {
  8.  ShowMessage("Error al abrir el fichero");
  9. }
  10.  
  11. c = fgetc(OutFile);
  12.  

donde fgetc devuelve el primer caracter leido, en este caso sería c = 1 ya que es el primer caracter del texto.

Lo que quiero es que cuando pinche sobre un renglón me lea justo la información que le toca, es decir, si pincho sobre el renglón 2, empiece a leer desde:

2
nombre:pepa
edad:25
ciudad:madrid

del fichero.txt

para ello he probado con:
Código: Text
  1.  
  2. if (c == index)
  3.       {
  4.        //fgets(linea, 50, OutFile);
  5.        ShowMessage("son iguales");
  6.                 //while
  7.  
  8.         }
  9. else ShowMessage("ein??");
  10.  

pero nunca se mete en el if, aunque c = 1 y index = 1, he pensando que era por que uno es del tipo char y otro es int, pero al forzar la conversión tampoco funciona.

como puedo convertir un int a un char o viceversa?

gracias.

Elforious

  • Miembro activo
  • **
  • Mensajes: 44
    • Ver Perfil
Re: Convertir De Int A Char O Viceversa??
« Respuesta #1 en: Martes 1 de Abril de 2008, 21:12 »
0
Puedes probar las funciones:

StrToInt( <variable String> ); Devuelve entero.

IntToStr( <variable String> ); Devuelve string.

Pero son de Borland; para más información acerca de estas funciones fijate en la ayuda.

Espero haber ayudado.

AnimaSubtilis

  • Miembro MUY activo
  • ***
  • Mensajes: 172
  • Nacionalidad: co
    • Ver Perfil
Re: Convertir De Int A Char O Viceversa??
« Respuesta #2 en: Martes 1 de Abril de 2008, 22:42 »
0
que me acerde la funcion para convertir de entero a char es la atoi

n = atoi(str);

y funciona con la libreria stdlib.h o la stdio.h...


Espero que sirva de algo.....
A menudo unas pocas horas de «prueba y ensayo» podrán ahorrarte minutos de leer manuales.
[size=150]
Dios nos Otorgo el uno y el cero....y con eso creamos un universo....[/size]

[size=109]↑°°°°ÄNÍMÄ §ÛBTÍLͧ°°°°↓[/size]


Ziara

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: Convertir De Int A Char O Viceversa??
« Respuesta #3 en: Miércoles 2 de Abril de 2008, 20:31 »
0
Hola de nuevo, ante todo gracias por contestar, he probado con las funciones.

La de StrToInt funciona muy bien:

Código: Text
  1. int cline = StrToInt(linea[0]); //asi convierto el primer caracter de la linea a leer
  2.  

pero luego he visto que cuando leo la segunda linea de mi fichero, que el primer carácter ya no es del tipo 1,2,3 sino una letra, la función me dice que no puede convertirlo a un entero. Con lo cual por ahi no puedo seguir.

Luego he probado con la función IntToStr de la siguiente manera:

Código: Text
  1. int index = this-&#62;ListView-&#62;ItemIndex;
  2. index = index + 1;
  3.  
  4. String s = IntToStr (index);
  5.  
  6. //leer desde fichero
  7. FILE *OutFile = fopen(&#34;PAQUETES.txt&#34;,&#34;r&#34;);
  8. char linea[50];
  9.  
  10. if (OutFile == NULL)
  11. {
  12.  ShowMessage(&#34;Error al abrir el fichero&#34;);
  13. }
  14.  
  15. fgets(linea, 50, OutFile);
  16.  
  17.  if (linea[0] == s)
  18.  {
  19.        ShowMessage(&#34;encontrado&#34;);
  20.        ShowMessage(linea);
  21.  
  22.  }
  23.  else ShowMessage(&#34;error&#34;);
  24.  
  25. fclose(OutFile);
  26.  

pero aqui en el if no entra nunca, aunque linea[0] y s sean iguales... saben porque??

Elforious

  • Miembro activo
  • **
  • Mensajes: 44
    • Ver Perfil
Re: Convertir De Int A Char O Viceversa??
« Respuesta #4 en: Martes 8 de Abril de 2008, 17:11 »
0
Lo que pasa es que estás comparando un String con un char.

Tienes que poner la función "c_str()" en el if así:

Código: Text
  1.  
  2. if (linea[0] == s.c_str())
  3.  
  4.  

c_str() te devuelve una cadena de carácteres que obtiene de un string, y en este caso  te devuelve una cadena de 1, y así ya lo pudes comparar.

Pos si acaso, tu comparación está bien por que compara un solo caracter, pero para comparar una cadena de más de un caracter con otra, está la función "strcmp(<string1>,<string2>)" que devuelve 0 si son iguales los dos string.

Para más información chekea la ayuda.

Espero haber ayudado...

Ziara

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: Convertir De Int A Char O Viceversa??
« Respuesta #5 en: Martes 8 de Abril de 2008, 19:48 »
0
Hola, gracias por contestar, he probado con c_str(), y al compilar builder me lanza el siguiente error:

cannot convert char to *char

así que he puesto:
Código: Text
  1.  
  2. if ((char*)linea[0] == s.c_str())
  3.  

al compilar no me da ningún error, pero aún así no entra en el if. por qué?

Elforious

  • Miembro activo
  • **
  • Mensajes: 44
    • Ver Perfil
Re: Convertir De Int A Char O Viceversa??
« Respuesta #6 en: Martes 8 de Abril de 2008, 22:51 »
0
mmm, me había olvidau de que el c_str() devuelve un puntero de cadena  :whistling:  y en este momento no se me ocurre como arreglar eso, pero analizando bien tu algoritmo, creo que le primero que posteaste estaba mejor, pero con el StrToInt:

Código: Text
  1.  
  2. if (StrToInt(c) == index)
  3.  
  4.  

Espero haber ayudado...

Ziara

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: Convertir De Int A Char O Viceversa??
« Respuesta #7 en: Miércoles 9 de Abril de 2008, 18:59 »
0
Ok, ya he encontrado la solución, con la ultima forma de convertir el string a int ya lo había probado, pero no podía continuar por ese camino ya que en el fichero tengo letras también, y cuando llegan a ellas builder me lanza un error de que no se puede convertir.

Al final he vuelto a mirar la funcion IntToStr y en vez de poner la condición:

Código: Text
  1. if (linea[0] == IntToStr(index))
  2.  

antes creo otra variable

Código: Text
  1. String c = linea[0];
  2.  
  3. if (c == IntToStr(index))
  4.  

así comparo string con string y no char con string que es lo que pasaba cuando ponia linea[0] en el if.  :o)