Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Pregunta sobrelistbox (https://www.clubdelphi.com/foros/showthread.php?t=78479)

moise094 23-04-2012 19:53:32

Pregunta sobrelistbox
 
Tengo en un listbox un item mixto es decir por ejmplo JUAN 45, y quiero sumar un numero cualquiera con el numero 45 que puse de ejemplo, como se haria para extraer el numero 45 en un edit o algo por el estilo...????

moise094 23-04-2012 19:56:06

mas conciso: como haria para extraer de un item mixto de un listbox el numero, por ejemplo teniendo en el item juan 45, extraerlo en un edit o cualquier cosa???

ecfisa 23-04-2012 20:12:19

Hola moise094 y bienvenido a Club Delphi :)

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo.

Una opción puede ser:
Código Delphi [-]
function ExtraerNum(cad:string): string;
var
  i: Integer;
begin
  i:=0;
  while not (cad[i] in ['0'..'9']) do Inc(i);
  repeat
    Result:= Result + cad[i];
    Inc(i);
  until not (cad[i] in ['0'..'9']);
end;

Ejemplo de uso:
Código Delphi [-]
procedure TForm1.ListBox1Click(Sender: TObject);
begin
  with TListBox(Sender) do
    Caption:= ExtraerNum(Items[ItemIndex]);
end;

Saludos.

Caro 23-04-2012 20:24:49

Hola moise094, otra opción, si el número va a estar siempre al final separado por un espacio, podemos utilizar las funciones Pos y Copy.

Código Delphi [-]
var
 PosIni : Integer;
 Valor, item : String;
begin
 item := ListBox1.Items[ListBox1.ItemIndex];
 PosIni := Pos(' ', item);
 Valor := Copy(item, PosIni+1, Length(item)-PosIni);
 Showmessage(Valor);

en el caso de que haya mas espacios, primero encontramos el ultimo espacio para hacer el copy.

Saluditos

moise094 23-04-2012 20:24:58

esa function de extraer numero la pongo en la parte private o public de la unidad del form???

moise094 23-04-2012 20:28:37

El caso es el siguiente, voy a abrir un documento .txt en un listbox y este tiene:
JUAN 45
JOSE 56

y quiero que al abrir el archivo, me aparezca en un edit cualquiera el numero 45
es decir el listbox va siempre a tener varios items...

ecfisa 23-04-2012 20:35:00

Cita:

Empezado por moise094 (Mensaje 430726)
esa function de extraer numero la pongo en la parte private o public de la unidad del form???

Son funciónes no métodos por lo que básta con que las situes en la sección de implementación (implementation), aunque también podés hacerlas como un método privado o público.

Cualquiera de las funciones (la de Caro o la que te puse) van a realizar la tarea. Pero si el número siempre está al final y existe al menos un espacio entre nombre y número, es mejor que utilices la que te propuso Caro.

Saludos.

ecfisa 23-04-2012 20:42:06

Cita:

Empezado por moise094 (Mensaje 430728)
El caso es el siguiente, voy a abrir un documento .txt en un listbox y este tiene:
JUAN 45
JOSE 56

y quiero que al abrir el archivo, me aparezca en un edit cualquiera el numero 45
es decir el listbox va siempre a tener varios items...

Entonces sería:
Código Delphi [-]
procedure TForm1.ListBox1Click(Sender: TObject);
begin
  with TListBox(Sender) do
    Edit1.Text := ExtraerNum(Items[ItemIndex]);
end;
O dependiendo de lo que desees, también podrías hacer:
Código Delphi [-]
procedure TForm1.Edit1Enter(Sender: TObject);
begin
  with ListBox1 do
    Edit1.Text := ExtraerNum(Items[ItemIndex]);
end;
Siendo el código de la función ExtraerNum el que elijas.

Saludos.

Caro 23-04-2012 20:53:39

Cita:

Empezado por moise094 (Mensaje 430728)
El caso es el siguiente, voy a abrir un documento .txt en un listbox y este tiene:
JUAN 45
JOSE 56

y quiero que al abrir el archivo, me aparezca en un edit cualquiera el numero 45
es decir el listbox va siempre a tener varios items...

Lo mio sería parecido al de ecfisa:

Código Delphi [-]
//el codigo que te puse lo colocamos en una función
function ExtraerNum(Item : String) : String;
var
 PosIni : Integer;
 Valor : String;
begin
 PosIni := Pos(' ', item);
 Valor := Copy(item, PosIni+1, Length(item)-PosIni);
 Result := Valor;
end;

//ahora para llamar
//despues de cargar el archivo en el listbox, mostramos el número
//del item que esta en la posión 0

 ListBox1.Items.LoadFromFile('c:\xxx\file.txt');
 Edit1.Text := ExtraerNumero(ListBox1.Items[0]);

//ahora cada ves que selecciones un nuevo item utilizas el evento Onclick
procedure TForm1.ListBox1Click(Sender: TObject);
begin
 Edit1.Text := ExtraerNumero(ListBox1.Items[ListBox1.ItemIndex]);
end;

Saluditos

moise094 23-04-2012 22:16:20

Muchas gracias ya pude extraer el numero,
AHORA LO QUE PASA ES ESTO
se extrajo el numero pero al sumarlo con el numero que voy a meter no me suma sino que hace esto:
1+45=145

Caro 23-04-2012 22:22:18

Cita:

Empezado por moise094 (Mensaje 430749)
Muchas gracias ya pude extraer el numero,
AHORA LO QUE PASA ES ESTO
se extrajo el numero pero al sumarlo con el numero que voy a meter no me suma sino que hace esto:
1+45=145

Hola, tienes que convertir a entero el número que has extraido para hacer la suma.

Código Delphi [-]
var
 Numero : Integer;
begin
 Numero := StrToInt(ExtraerNumero(ListBox1.Items[ListBox1.ItemIndex]))+1;
 Edit1.Text := IntToStr(Numero);

Saluditos

moise094 23-04-2012 22:28:06

Me sigue pasando lo mismo, sigue sumando 1+45=145

Caro 23-04-2012 22:31:25

Cita:

Empezado por moise094 (Mensaje 430751)
Me sigue pasando lo mismo, sigue sumando 1+45=145

Muestranos el codigo que estas utilizando, porque lo que estas haciendo es concatenar los dos numeros.

Saluditos

moise094 23-04-2012 22:37:14

primero que todo puse el codigo de ecfisa
function TForm3.ExtraerNum(cad:string): string;
var
i: Integer;
begin
i:=0;
while not (cad[i] in ['0'..'9']) do Inc(i);
repeat
Result:= Result + cad[i];
Inc(i);
until not (cad[i] in ['0'..'9']);
end;

Luego pongo

var
Numero : Integer;

begin
Numero:=StrToInt(ExtraerNum(Listbox1.Items[1]));
Edit1.text:=IntToStr(Numero);
end;


Despues como quiero que lo sume con un numero que meto en un edit,
y pongo

Listbox1.Items.add('Ventas: '+(Intttostr(va.sumaing))+(Edit6.Text));

moise094 23-04-2012 22:38:38

puse el codigo de ecfisa por que fue el que me dejo apenas el numero, que es lo que queria

Casimiro Notevi 23-04-2012 22:41:32

Recuerda poner los tags al código fuente, ejemplo:

Caro 23-04-2012 22:44:24

Hola, es lo que te decía estas concatenando, prueba así:

Código Delphi [-]
 Listbox1.Items.add('Ventas:  '+Inttostr(va.sumaing+StrtoInt(Edit6.Text)));

Saluditos

ecfisa 23-04-2012 22:56:58

Cita:

Empezado por moise094 (Mensaje 430749)
Muchas gracias ya pude extraer el numero,
AHORA LO QUE PASA ES ESTO
se extrajo el numero pero al sumarlo con el numero que voy a meter no me suma sino que hace esto:
1+45=145

Hola.

La función te devuelve una cadena de caracteres, como por ejemplo '32', que de ningún modo es lo mismo que el número 32. Por ejemplo:
Código Delphi [-]
   Edit1.Text:= ExtraerNumero('RANINQUEO 15')+ExtraerNumero('ROBUSTIANA 80');
No esperes ver en el edit el número 95, lo que verás es '1580' que resulta de concatenar '15' y '80'. Para poder obtener el número 95 tenes que realizar las conversiones correspondientes tál como te indica Caro.

Retomando el ejemplo que te puse arriba, para obtener 15+80 sería:
Código Delphi [-]
  Edit1.Text:= IntToStr(StrToInt(ExtraerNumero('RANINQUEO 15'))+StrToInt(ExtraerNumero('ROBUSTIANA 80')));

Saludos.

Edito: Si no le gustan los nombres... Escucho sugerencias :D

moise094 23-04-2012 23:02:23

Muchas gracias a todos, Dios me los bendiga, cualquier otra pregunta del tema, se las estare informando...

Caro 23-04-2012 23:10:06

Cita:

Empezado por ecfisa (Mensaje 430759)
Edito: Si no le gustan los nombres... Escucho sugerencias :D

Hola ecfisa, el de Robustiana me gusta :D, el otro podría ser Saturnino o también Casimiro :D.

Saluditos


La franja horaria es GMT +2. Ahora son las 13:56:05.

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