Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Duda Función IntToStr (https://www.clubdelphi.com/foros/showthread.php?t=69241)

P0werBurn 03-08-2010 23:42:39

Duda Función IntToStr
 
Buenas noches a todos.

Antes que nada, disculparme por tantas dudas y tan pocos aportes, la razón es que estoy aprendiendo y quiero que las cosas se me queden bastante claras, y a partir de ahí, poder aportar más con esta comunidad (es lo mínimo que puedo hacer, ya que me estáis prestando tanta ayuda).

Bueno, ayer estuve haciendo un programa muy simple, que era un contador de líneas, pero más que nada era para asimilar la propiedad count.

Yo creía que todo iba bien, hasta que le di a compilar. El código era el siguiente:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text:= Memo1.Lines.count
end;

No funcionó.
Busqué información por internet y leí que había que poner así el código:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text:= IntToStr(Memo1.Lines.count);
end;

Tampoco sabía nada de la propiedad IntToStr, y me vino a la cabeza el consejo que me distéis: que mirara la ayuda de Delphi.

Eso hice, y averigué que IntToStr signficaba Integer To String, y que se podía usar con todo tipos de variables.

Que había que cambiar el TEdit a String lo entendí, porque estaba contando líneas de un Memo, el cual es un String, según tengo entendido (si estoy confundido, por favor, corríjanme). Pero lo que no entendí fue el Integer. A caso el TEdit es un Integer?

Esperando que me saquen de dudas,

Un saludo.

P0werBurn.

delphi.com.ar 03-08-2010 23:54:46

Estas un poco confundido, mezclando todo. A ver si este resumen te ayuda, leelo pausado e intentá comprender línea a línea:

TEdit es una clase
Edit1 es una instancia de la clase TEdit

Cuando utilizas Edit1.Text estas accediendo a la propiedad Text de la clase TEdit
La propiedad Text de la clase TEdit es del tipo string

Supongo que Memo1 es una instancia de la clase TMemo.
TMemo tiene una propiedad Lines y esta propiedad es del tipo TStrings

TStrings <> string
TStrings es una clase, que funciona como una colección de strings
Count es una propiedad de TStrings que es del tipo Integer

Como Count es un Integer no puedes igualarlo directamente a la propiedad Text de la clase TEdit que es del tipo string, para eso necesitas utilizar alguna función que te convierta el tipo de dato, y la mas indicada es IntToStr (Integer to string).

Saludos!

AzidRain 03-08-2010 23:55:21

haz esto pa' pronto:

Código Delphi [-]
 Edit1.Text:=Format('%d',[Memo1.Lines.count]);


E inclusive puedes hacer esto también si te quieres ver muy elegante:

Código Delphi [-]
 Edit1.Text:=Format('%d Líneas',[Memo1.Lines.count]);

P0werBurn 04-08-2010 00:00:11

Cita:

Empezado por delphi.com.ar (Mensaje 372493)
Estas un poco confundido, mezclando todo. A ver si este resumen te ayuda, leelo pausado e intentá comprender línea a línea:

TEdit es una clase
Edit1 es una instancia de la clase TEdit

Cuando utilizas Edit1.Text estas accediendo a la propiedad Text de la clase TEdit
La propiedad Text de la clase TEdit es del tipo string

Supongo que Memo1 es una instancia de la clase TMemo.
TMemo tiene una propiedad Lines y esta propiedad es del tipo TStrings

TStrings <> string
TStrings es una clase, que funciona como una colección de strings
Count es una propiedad de TStrings que es del tipo Integer

Como Count es un Integer no puedes igualarlo directamente a la propiedad Text de la clase TEdit que es del tipo string, para eso necesitas utilizar alguna función que te convierta el tipo de dato, y la mas indicada es IntToStr (Integer to string).

Saludos!

Bueno, antes que nada, muchas gracias por el tiempo que has tomado respondiéndome y aclarándome todo.

Según he entendido, es más que nada por lógica, porque sería como sumar una pera con una manzana, ¿no?.

Con eso quiero decir que no se pueden sumar un Integer y un String, sino que para sumar o hacer cualquier acción en la que se junten dos variables, estas tienen que ser iguales.

Corrígeme si me equivoco por favor.

Un saludo, y gracias otra vez.

P0werBurn.

P0werBurn 04-08-2010 00:03:19

Cita:

Empezado por AzidRain (Mensaje 372494)
haz esto pa' pronto:

Código Delphi [-]
 Edit1.Text:=Format('%d',[Memo1.Lines.count]);


E inclusive puedes hacer esto también si te quieres ver muy elegante:

Código Delphi [-]
 Edit1.Text:=Format('%d Líneas',[Memo1.Lines.count]);

Muchas gracias por tu respuesta, AzidRain,

pero el problema no era que no me funcionara, el problema estaba en que no entendía la lógica que se estaba aplicando en mi código.

Aún así, te vuelvo a repetir, muchas gracias por tu respuesta, en cuanto tenga tiempo intentaré buscar información del método que has puesto tú, para ampliar mis pobres conocimientos.

Un saludo,

P0werBurn.

rgstuamigo 04-08-2010 00:09:02

Primero que nada "IntToStr" es una Funcion y no una propiedad, ésta funcion lo que hace es convertir una Variable del tipo Integer a String(Cadenas de cracteres). Siguiendo tu ejemplo para entenderlo te hago así:
Código Delphi [-]
var
Cantidad_en_Integer:Integer;
Cantidad_en_String:String;
begin
Cantidad_en_Integer:=Memo1.Lines.count;//<- Aqui no tengo problema ya que mi variable "Cantidad_en_Integer" es de tipo
// Integer al Igual que la Propiedad "Count", son compatibles
Cantidad_en_String:=Memo1.Lines.count;//<- Aqui va dar un Error ya que la propiedad "Count" es de
// tipo Integer y  la variable "Cantidad_en_String" es del tipo String
//Ahora la pregunta es: ¿Cómo puedo asignar una variable del tipo Integer a otra del tipo String?
//SOLUCION: Utilizando la conversion de tipo, es este caso la Funcion "IntToStr"  quedando así:
Cantidad_en_String:=IntToStr(Memo1.Lines.count);
//Como ahora ya lo tengo en una varible String, pues tranquilamente lo puedo mostrar en un EDIT
Edit1.Text:=Cantidad_en_String;
end;
Nada mas que es tu caso todo lo estas haciendo directamente, es decir no estas haciendo uso de ninguna variable Auxiliar.
Tambien existe una Funcion inversa, que te hace lo contrario, es decir te convierte un String a Entero (StrToInt).;).
Saludos...:)

rrf 04-08-2010 00:10:00

Hola.

Inttostr solo funciona con variables tipo integer y no te va a servir con todo tipo de variables. Por ejemplo. si lo intentas con variables que admitan números decimales, deberías usar Floattostr, sin con variables que acepten fechas, deberías usar Datetostr.

Los edit solo admiten texto.

Los Memo son algo así como "muchos edit, uno debajo del otro, pero en un mismo componente". Son TStrings (nota la "s" final, para diferenciarlo de un TString, que es lo que contiene un Edit). Y tienen muchas más posibilidades que los Edit. Por ejemplo, puedes leer su contenido desde un archivo de texto ( Memo1.lines.loadfromfile ('c:\archivo.txt') ) o grabar su contenido a un archivo de texto ( Memo1.lines.savetofile ('c:\archivo.txt') ), etc.

Ahora bien, si quieres conocer el número de líneas que tiene un Memo, debes obtener un número (aunque se trate de un componente que maneja texto), por ello Memo1.Lines.Count devuelve el número de líneas de Memo1.

Si quieres guardar el número de líneas de un Memo en un Edit, primero debes transformar el número de líneas en texto con InttoStr, si luego ese texto (por ejemplo '27') lo vas a utilizar en una operación matemática, lo puedes convertir con StrtoInt (que hace lo contrario a InttoStr).

Bueno, con un poco de práctica seguro que lo dominarás con facilidad.

Saludos.

Ramón

P0werBurn 04-08-2010 00:18:11

Cita:

Empezado por rgstuamigo (Mensaje 372501)
Primero que nada "IntToStr" es una Funcion y no una propiedad, ésta funcion lo que hace es convertir una Variable del tipo Integer a String(Cadenas de cracteres). Siguiendo tu ejemplo para entenderlo te hago así:
Código Delphi [-]
var
Cantidad_en_Integer:Integer;
Cantidad_en_String:String;
begin
Cantidad_en_Integer:=Memo1.Lines.count;//<- Aqui no tengo problema ya que mi variable "Cantidad_en_Integer" es de tipo
// Integer al Igual que la Propiedad "Count", son compatibles
Cantidad_en_String:=Memo1.Lines.count;//<- Aqui va dar un Error ya que la propiedad "Count" es de
// tipo Integer y  la variable "Cantidad_en_String" es del tipo String
//Ahora la pregunta es: ¿Cómo puedo asignar una variable del tipo Integer a otra del tipo String?
//SOLUCION: Utilizando la conversion de tipo, es este caso la Funcion "IntToStr"  quedando así:
Cantidad_en_String:=IntToStr(Memo1.Lines.count);
//Como ahora ya lo tengo en una varible String, pues tranquilamente lo puedo mostrar en un EDIT
Edit1.Text:=Cantidad_en_String;
end;
Nada mas que es tu caso todo lo estas haciendo directamente, es decir no estas haciendo uso de ninguna variable Auxiliar.
Tambien existe una Funcion inversa, que te hace lo contrario, es decir te convierte un String a Entero (StrToInt).;).
Saludos...:)

Muchas gracias por la ayuda y por los ejemplos. Ya me va quedando mucho más claro, gracias.

Espero que pronto pueda ayudar yo también a la gente que lo necesite, pero bueno, paso por paso... :)

P0werBurn 04-08-2010 00:20:27

Cita:

Empezado por rrf (Mensaje 372502)
Hola.

Inttostr solo funciona con variables tipo integer y no te va a servir con todo tipo de variables. Por ejemplo. si lo intentas con variables que admitan números decimales, deberías usar Floattostr, sin con variables que acepten fechas, deberías usar Datetostr.

Los edit solo admiten texto.

Los Memo son algo así como "muchos edit, uno debajo del otro, pero en un mismo componente". Son TStrings (nota la "s" final, para diferenciarlo de un TString, que es lo que contiene un Edit). Y tienen muchas más posibilidades que los Edit. Por ejemplo, puedes leer su contenido desde un archivo de texto ( Memo1.lines.loadfromfile ('c:\archivo.txt') ) o grabar su contenido a un archivo de texto ( Memo1.lines.savetofile ('c:\archivo.txt') ), etc.

Ahora bien, si quieres conocer el número de líneas que tiene un Memo, debes obtener un número (aunque se trate de un componente que maneja texto), por ello Memo1.Lines.Count devuelve el número de líneas de Memo1.

Si quieres guardar el número de líneas de un Memo en un Edit, primero debes transformar el número de líneas en texto con InttoStr, si luego ese texto (por ejemplo '27') lo vas a utilizar en una operación matemática, lo puedes convertir con StrtoInt (que hace lo contrario a InttoStr).

Bueno, con un poco de práctica seguro que lo dominarás con facilidad.

Saludos.

Ramón

Gracias a ti también por la respuesta, Ramón.

Tu respuesta me ha llamado especialmente la atención (no porque sea ni mejor ni peor que otras, al contrario, todas son muy buenas), porque la lección anterior a esta di las funciones LoadFromFile y SaveToFile.

A ti también decirte que me has aclarado bastante las dudas, ahora, como tú has dicho, sólo queda practicar y practicar, hasta que al final lo domine sin dudas.

Un saludo,

P0werBurn.

delphi.com.ar 04-08-2010 02:26:48

P0werBurn, estuve leyendo tus comentarios, e intentando responder alguna duda sin marearte, pero entre tantas respuestas, solo se me ocurre recomendarte que busques algún libro Online de Delphi y leas al menos los capítulos iniciales, donde se refiera propiamente al lenguaje y no al uso de objetos particulares. Me parece muy importante que si ambicionas algún proyecto tengas a bien conocer los principios básicos de programación. Tus dudas son demasiado básicas y creo que vas a perder mucho mas tiempo preguntando en lugar invertir tiempo leyendo. No es que no quiera ayudar, por el contrario, pero pienso que no puedes correr si no sabes caminar, y estas recomendaciones van a ser de mucha ayuda.
Te recomiendo bajarte La cara oculta de Delphi 4 de Ian Marteens, si bien se trata de una versión antigüa de Delphi todos los conceptos básicos se conservan actualmente, es un libro muy ameno de leer.

Espero no ser inoportuno con mis comentarios, solo pretendo ayudar y no confundir.

Saludos!

P0werBurn 04-08-2010 15:40:39

Cita:

Empezado por delphi.com.ar (Mensaje 372519)
P0werBurn, estuve leyendo tus comentarios, e intentando responder alguna duda sin marearte, pero entre tantas respuestas, solo se me ocurre recomendarte que busques algún libro Online de Delphi y leas al menos los capítulos iniciales, donde se refiera propiamente al lenguaje y no al uso de objetos particulares. Me parece muy importante que si ambicionas algún proyecto tengas a bien conocer los principios básicos de programación. Tus dudas son demasiado básicas y creo que vas a perder mucho mas tiempo preguntando en lugar invertir tiempo leyendo. No es que no quiera ayudar, por el contrario, pero pienso que no puedes correr si no sabes caminar, y estas recomendaciones van a ser de mucha ayuda.
Te recomiendo bajarte La cara oculta de Delphi 4 de Ian Marteens, si bien se trata de una versión antigüa de Delphi todos los conceptos básicos se conservan actualmente, es un libro muy ameno de leer.


Espero no ser inoportuno con mis comentarios, solo pretendo ayudar y no confundir.

Saludos!


Muchas gracias por tu consejo, de veras.

Te voy a hacer caso, me descargaré el libro e iré leyéndolo poco a poco. Una vez leído eso retomaré el curso que estoy haciendo (que es un curso de la Universidad Nacional de La Plata), y ya iré entrando en conceptos más teóricos y más complejos.

Muchas gracias, ahora empiezo a leerlo, ya que tengo tiempo libre.

Un saludo,

P0werBurn.


La franja horaria es GMT +2. Ahora son las 04:04:04.

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