Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Mostrar texto de un DBMemo a partir de un caracter (https://www.clubdelphi.com/foros/showthread.php?t=83879)

exequielmatias1 09-08-2013 21:58:33

Mostrar texto de un DBMemo a partir de un caracter
 
Hola gente genia! ja les cuento, tengo un dbmemo conectada a una base de datos, en los campos memo, el texto, contiene muchos codigos y caracteres , yo solo quiero mostrar el texto en el memo que por ejemplo empieza despues de un caracter y termina con el mismo ej #texto texto texto# antes y despues se ven codigos que no me interesan, que codigo puedo usar?

ecfisa 09-08-2013 22:51:48

Hola exequielmatias1.

Podes usar el evento AfterScroll del TDataSet.
Código Delphi [-]
...
implementation

uses StrUtils;

const
   DELIM = '#';

procedure TForm1.DataSetAfterScroll(DataSet: TDataSet);
var
  p1, p2: Integer;
begin
  with DBMemo1 do  
  begin
    p1 := Pos(DELIM, Text) + 1;
    p2 := PosEx(DELIM, Text, p1);
    if (p1 > 0) and (p2 > 0) then
      Text := Copy(Text, p1, p2 - p1);
  end;
end;
...

Saludos :)

exequielmatias1 10-08-2013 20:48:39

Gracias ecfisa!! me salio perfecto, pero solo me recupera la primer linea que encuentra, quiero hacerlo con un while para que busque en todo el texto, pero algo mal estoy haciendo, no se me ocurre como poner el while en este codigo. gracias! :)

ecfisa 10-08-2013 22:31:29

Hola exequielmatias1.

Para que te muestre todos aquellos caracteres del texto que estén comprendidos entre dos delimitadores:
Código Delphi [-]
...
uses StrUtils;

const
   DELIM = '#';


procedure TForm1.DataSetAfterScroll(DataSet: TDataSet);
var
  p1, p2: Integer;
  s1, aux : string;
begin
  s1  := DBMemo1.Text;
  repeat
    p1 := Pos(DELIM, s1);
    p2 := PosEx(DELIM, s1, p1 + 1);
    if (p1 <> 0) then
    begin
      aux := aux + Copy(s1, p1+1, p2 - p1 -1) + ' ';
      Delete(s1, 1, p2);
    end;
  until (p1 = 0) or (p1 > p2);
  if Length(s1) <> Length(DBMemo1.Text) then
    DBMemo1.Text := aux;
end;

Saludos :)

exequielmatias1 20-08-2013 18:39:43

hola! gracias por tu respuesta, lamentablemente con el ultimo codigo solo me devuelve la primer linea..

te explico mas o menos lo que intento hacer..
tengo un dbmemo conectada desde un ADOQuery una base de datos en access.
En uno de los campos memo, contiene texto con muchos codigos y caracteres , yo solo quiero mostrar un codigo que esta dentro del memo que siempre empieza por ej. con SABxxxx luego son 4 letras diferentes pero siempre en total son 8 caracteres.
por ejemplo mi texto del memo es:
xtxtxtxtxtxtxtyxtxtxt #SABAEIOU#txtxtxtxtxtxt @@textotextotexto # SABUOIEA# textotextotextotexto (..)*100
y quiero que en mi dbmemo solo muestre
SABAEIOU
SABUOIEA

ademas otro dato este codigo de 8 caracteres antes tiene un # y termina con un #
luego este codigo lo comparo con otra tabla y me tiene que devolver en un edit el dato de referencia a ese codigo.. espero ser claro >

ecfisa 20-08-2013 22:54:03

1 Archivos Adjunto(s)
Hola exequielmatias1.

Supongo que algo no has copiado bien, ya que el código que te puse en el mensaje anterior hace exáctamente lo que buscas.

Te adjunto un demo con dos TDBMemos y un TDBNavigator para que puedas probar con tranquilidad. El primer DBMemo muestra el texto original y el segundo sólo las subcadenas.

Usé la tabla biolife.db con BDE dado que no uso Access y solo dispongo de las tablas que trae Delphi (ninguna con memo). Pero el código funcionará del mismo modo con los componentes ADO.

Recordá que al extraer las subcadenas en el evento AfterScroll, luego de modificado el texto, deberás mover el cursor para ver los cambios.

Saludos. :)

exequielmatias1 21-08-2013 16:01:04

Gracias ecfisa por tu paciencia!! logre hacer lo que me necesitaba, solo me falta comparar esas 8 letras con una tabla y mostrar el valor que corresponde, por ahora puedo validar solo del primer campo de 8 letras, pero cuando tengo mas campos seguidos no los puedo validar a todos.
voy a seguir buscando sino hare otro post.


La franja horaria es GMT +2. Ahora son las 11:42: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