Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Identificar parte de un dato dentro de un campo (https://www.clubdelphi.com/foros/showthread.php?t=55090)

egostar 08-04-2008 19:49:41

Hola amigo Caral, y porque no usas un LIKE

Código Delphi [-]
   QTemp.SQL.Text := '......... WHERE Campo LIKE '+QuotedStr('%'+ColorL);

Salud OS

Caral 08-04-2008 20:09:36

Hola
El asunto es que es el mismo campo pero con diferentes datos.

Campo descripcion, Notas= LAMINA
1- Combobox1 = LAMINA 187 X 305 BONE

Campo descripcion, Notas= TERM
2- Combobox2 = IBIZA TERMOFORMADO BONE

La idea es que al conseguir el color (en un edit) que en ambos datos esta al final y es igual se capture la información en el segundo combobox pero solo los que sean de ese color.
Ya se que me lio.:D
Saludos

Caral 08-04-2008 20:23:11

Hola
Gracias amigo, ya me funciona, estoy embotado por eso seguro me cuesta tanto entender.
Gracias a todo por vuestra ayuda, me ha servido de mucho.
Gracias de corazón.
Saludos

Caral 12-04-2008 16:49:26

Hola
Retomando este tema.
La función devuelve el ultimo dato (usando cualquiera de las funciones).
Me preguntaba si seria posible que devolviera el dato que uno necesite, el primero o el segundo o el ultimo (como en este caso).
Lo He intentado pero al contar el dato de atrás para adelante me coloca todas las palabras según van.
Se podrá hacer la diferenciación? o se necesitara otra función.?
Gracias
Saludos

Delphius 12-04-2008 19:07:09

Mi buen amigo Carlos, ¿Por casualidad te refieres a esto?

Código Delphi [-]
TLaminaInfo = (liName, liDimension, liColor);

function GetLaminaInfo(LaminaText: string; Info: TLaminaInfo): string;
var PosIni, PosEnd: integer;
begin
  //preventiva
  PosIni := 0;
  PosEnd := 0;

  // Dependiendo de la info a pedir, calculamos posiciones
  // iniciales y finales
  case Info of
  liName: begin
            Posini := 1;
            PosEnd := Pos(' ',LaminaText);
          end;
  liDimension: begin
                 PosIni := Pos(' ',LaminaText) + 1;
                 PosEnd := Length(LaminaText) - Pos(' ',ReverseString(LaminaText)) + 2;
               end;
  liColor: begin
             PosIni := Length(LaminaText) - Pos(' ',ReverseString(LaminaText)) + 1;
             PosEnd := Length(LaminaText) + 1;
           end;
  end;

  // copiamos el texto que esté comprendido desde PosIni a PosEnd
  result := Copy(LaminaText,PosIni,PosEnd - PosIni);
end;

Saludos,

Caral 12-04-2008 22:10:21

Hola
Gracias Marcelo por contestar.
Tengo algunas preguntas:
Esta parte es una variable publica??:
Código Delphi [-]
TLaminaInfo = (liName, liDimension, liColor);
Ahora para llamar a la funcion que tengo lo hago asi:
En este caso solo devuelve el ultimo valor.
Código Delphi [-]
procedure TForm1.ComboBox1Change(Sender: TObject);
var
ColorL: string;
begin
 ColorL:= DameElTipo(ComboBox1.Text);
 showmessage(ColorL);
end;
Como haria para llamar a tu funcion???.
Supongo que tengo que indicar el tipo (Posin) o (PosEnd), pero no se como hacerlo.
Saludos

Delphius 12-04-2008 22:28:58

Perdón amigo, me olvidé de indicar que TLaminaInfo es un tipo de dato:

Código Delphi [-]
type
TTLaminaInfo = (liName, liDimension, liColor);

Y un ejemplo de uso de dicha función es el siguiente:

Código Delphi [-]
Edit1.Text := GetLaminaInfo(ComboBox1.Text,liName);
// con liName se obtiene el nombre, Por ejemplo: 'LAMINA'

Edit1.Text := GetLaminaInfo(ComboBox1.Text,liDimension);
// con liDimension se obtiene la dimensión. Por ejemplo: '132 X 185'

Edit1.Text := GetLaminaInfo(ComboBox1.Text,liColor);
// con liColor se obtiene el color, Por ejemplo: BONE.

El primer parámetro de la función es el texto completo. Por ejemplo: LAMINA 135 X 185 BONE. El segundo, el tipo de información a extraer.

Ahora que lo pienso y viendo lo que deseas hacer se debería modificar el tipo para mejorar el ejemplo:

Código Delphi [-]
type
TLaminaInfo = (liName = 0, liDimension = 1, liColor = 2);

De este modo puedes hacer coincidir los indices del Combo o de algún otro control con el tipo de dato. Por ejemplo:

Código Delphi [-]
Edit1.Text := GetLaminaText(Edit2.Text,ComboBox1.ItemIndex);

Suponiendo que en Edit2.Text estés guardando el texto completo e ItemIndex del combo represente el tipo de información que pide.

Mi función es probable que pueda ser mejorada para tus propósitos. La verdad es que la hice en 5 minutos, y no he pensado mucho en las posibilidades que necesitas. Mi intención era mostrar más o menos lo que entendía de tus requisitos.

Si es esto lo que andas buscando dimelo, y si no lo es, también dímelo (con tirón de orejas por no haber prestado demasiada atención).

Saludos,

Caral 12-04-2008 23:05:23

Hola
En tu ultimo ejemplo, que me parece genial ademas de practico me genera este error:
Cita:

[Error] Unit1.pas(166): Incompatible types: 'TLaminaInfo1' and 'Integer'
en esta linea:
Código Delphi [-]
Edit2.Text := GetLaminaText(Edit2.Text,ComboBox4.ItemIndex);
No se si tendra que ver con que tendria que devolver un integer y pide un string.
No entiendo el por que??.
Saludos

Delphius 12-04-2008 23:22:16

¡Ouch!
Como se nota que he perdido la práctica con los enumerados!:o:(

Entonces modifica a la función por esta otra:

Código Delphi [-]
function GetLaminaInfo(LaminaText: string; Info: integer): string;
var PosIni, PosEnd: integer;
begin
  //preventiva
  PosIni := 0;
  PosEnd := 0;

  // Dependiendo de la info a pedir, calculamos posiciones
  // iniciales y finales
  case Info of
  0: begin
            Posini := 1;
            PosEnd := Pos(' ',LaminaText);
          end;
  1: begin
                 PosIni := Pos(' ',LaminaText) + 1;
                 PosEnd := Length(LaminaText) - Pos(' ',ReverseString(LaminaText)) + 2;
               end;
  2: begin
             PosIni := Length(LaminaText) - Pos(' ',ReverseString(LaminaText)) + 1;
             PosEnd := Length(LaminaText) + 1;
           end;
  end;

  // copiamos el texto que esté comprendido desde PosIni a PosEnd
  result := Copy(LaminaText,PosIni,PosEnd - PosIni);
end;

Y te olvidas del tipo TLaminaInfo, borralo.
Y ya no deberías tener problemas.

Saludos,

Caral 12-04-2008 23:35:21

Hola
Muy interesante el concepto, Efectivamente funciona.
Gracias por el apoyo, me cuesta entender el concepto de las funciones pero con estas practicas voy aprendiendo.
Gracias de nuevo amigo.
Saludos

Delphius 13-04-2008 00:00:44

Hola Carlos, tal vez estos links te sean de ayuda para comprender el tema de funciones y procedimientos:

http://www.clubdelphi.com/foros/showthread.php?t=49698
http://www.clubdelphi.com/foros/showthread.php?t=49246

Hay más, solo los pongo de ejemplo. Básicamente:

La función devuelve un valor, un procedimiento no.
Ambos no necesariamente pueden pertenecer a una clase, pueden estar "sueltos" en las units.

Por ejemplo cuando uno hace:

Código Delphi [-]
TForm1 = class
  // bla
  // bla, bla,
  funcion Elegir(Numero: integer): String;
  // bla
end;

Lo que hace es indicar que la función elegir es parte de la clase TForm1. Y es por ello que al momento de escribir su código debemos indicarle su "dueño":

Código Delphi [-]
function TForm1.Elegir(Numero: integer): string;
begin
  //bla...
end;

Pero si no necesariamente debe tener un "dueño", Podemos tenerla libremente en una Unit:

Código Delphi [-]
Unit UCualquiera;

interface

funcion Elegir(Numero: integer): string;

// ...

implementation

function Elegir(Numero: integer): string;
begin
  // bla...
end;

Ejemplos de funciones sueltas son inc(), dec(), Length().
Un ejemplo de una función con dueño es CloseQuery, que le pertenece a la clase de la cual desciende los objetos TForm.

Espero que esto te haya servido para comprender mejor la diferencia entre funciones y procedimientos e igualmente para comprender a que se debe ese TForm1.XXXXXX.

Saludos,

Caral 13-04-2008 00:14:10

Hola
Gracias amigo, voy a revisar los link, si no entiendo algo ya te avisare (osea, lo mas seguro).
Saludos


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

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi