Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-04-2012
Avatar de ZayDun
ZayDun ZayDun is offline
Miembro
 
Registrado: mar 2007
Posts: 129
Poder: 18
ZayDun Va por buen camino
Thumbs up Buscar Mayusculas dentro de un string

Hola, tengo un string que recibe muchos datos, pero los que me interesan estan en mayuscula y son de 5 caracteres, el texto del string no siempre es el mismo por lo que no puedo buscar ninguna relacion en las palabras. mi idea es buscar por mayuscula o por numero de caracteres ya que siempre son 5. alguna posible solucion? Gracias.

Ejemplo: caracteresaleatorios FGHJK continuaeltexto
Responder Con Cita
  #2  
Antiguo 19-04-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y siempre hay un espacio antes de los 5 caracteres en mayúsculas?
Responder Con Cita
  #3  
Antiguo 19-04-2012
Avatar de ZayDun
ZayDun ZayDun is offline
Miembro
 
Registrado: mar 2007
Posts: 129
Poder: 18
ZayDun Va por buen camino
si,siempre hay un espacio tanto al empezar como al terminar.
Responder Con Cita
  #4  
Antiguo 19-04-2012
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola ZayDun, si esta entre espacios puedes pasarlo a un StringList y preguntar si el primer caracter es mayuscula.

Código Delphi [-]
var
 sl :TStringList;
begin
 cad := 'caracteresaleatorios FGHJK continuaeltexto KJGTU';
 sl := TStringList.Create;
 sl.Delimiter := #32;
 sl.DelimitedText := cad;
 for i:=0 to sl.Count-1 do
  begin
   if sl[i][1] in [#65..#90] then
    showmessage(sl[i]);
  end;
end;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 19-04-2012
Avatar de ZayDun
ZayDun ZayDun is offline
Miembro
 
Registrado: mar 2007
Posts: 129
Poder: 18
ZayDun Va por buen camino
Funciona como queria el unico "problema" que encuentro es que si la palabra empieza por un numero no la detecta, (1GHRT) pero aun asi gracias por la ayuda!.
Responder Con Cita
  #6  
Antiguo 19-04-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Hola: No se si te sirve o es lo que andas buscando pero lo siguiente te muestra que es lo que esta en mayuscula

Código Delphi [-]
function Mayuscula(Cad: string): string;
var
  i: Integer;
begin
  for i:= 1 to Length(Cad) do
    if (Cad[i] in ['A'..'Z']) or (Cad[i] in ['0'..'9']) then
     Result:= Result + Cad[i];
end;

procedure TForm1.Button1Click(Sender: TObject);
Var Texto : String;
begin
   Texto := MAyuscula(Edit1.Text);
   ShowMessage(Texto);
end;

Saludos

Última edición por MartinS fecha: 19-04-2012 a las 17:31:35. Razón: Actualice función por lo de los numeros
Responder Con Cita
  #7  
Antiguo 19-04-2012
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por MartinS Ver Mensaje
Hola: No se si te sirve o es lo que andas buscando pero lo siguiente te muestra que es lo que esta en mayuscula

Código Delphi [-]function Mayuscula(Cad: string): string; var i: Integer; begin for i:= 1 to Length(Cad) do if (Cad[i] in ['A'..'Z']) or (Cad[i] in ['0'..'9']) then Result:= Result + Cad[i]; end;

Hola Martins, en caso de que una palabra sin mayúsculas tenga algún número, también lo tomaría en cuenta.

ZayDu, todo depende de las condiciones que tengas en tu cadena para hacer los controles, tomando en cuenta que dices que son de 5 caracteres, podríamos tomar en cuenta solo esas palabras:

Código Delphi [-]
 sl := TStringList.Create;
 sl.Delimiter := #32;
 sl.DelimitedText := cad;
 for i:=0 to sl.Count-1 do
  begin
   if (Length(sl[i])=5) then
    begin
     if (sl[i][1] in ['A'..'Z']) then
      showmessage(sl[i])
     else
      for j:=1 to 5 do
       begin
        if (sl[i][j] in ['A'..'Z']) then
         begin
          showmessage(sl[i]);
          break; //si ya ha encontrado una mayuscula nos salimos del for
         end;
       end;
    end;
  end;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #8  
Antiguo 19-04-2012
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola de nuevo y si es caso es de que tienes que tomar solo los de 5 caracteres y no habrá ninguno que este mezclado con minúsculas:

Código Delphi [-]
 sl := TStringList.Create;
 sl.Delimiter := #32;
 sl.DelimitedText := cad;
 for i:=0 to sl.Count-1 do
  begin
   if Length(sl[i])=5 then
    showmessage(sl[i])
  end;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #9  
Antiguo 19-04-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Otra opción:
Código Delphi [-]
function CincoMayusculas(Cad: string): TStrings;
var
  c, p: Integer;
begin
  c:= 1;
  Result:= TStringList.Create;
  while c < Length(Cad) do
  begin
    if Cad[c] in ['A'..'Z','Ñ','Á','É','Í','Ó','Ú'] then
    begin
      p:= 1;
      while (Cad[c+p] in ['A'..'Z','Ñ','Á','É','Í','Ó','Ú'])and(p < 5) do
         Inc(p);
      if p = 5 then
      begin
        Result.Add(Copy(Cad,c,5));
        c:= c + p;
      end;
    end;
    Inc(c);
  end;
end;

Ejemplo de llamada:
Código Delphi [-]
var
  Cad: string;
begin
  Cad:= 'XBTCD carUVUAactENTEReresÑÁUTÍaleatorios FGHJK continuaeltexto UITXL';
  ListBox1.Items:= CincoMayusculas(Cad);
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 19-04-2012
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Hola ZayDun. La solución que te traigo podrá no ser la mejor, pero está bastante modularizada y se entiende, así que la podés modificar para que se ajuste a lo que precisás.
No tengo un compilador acá en el trabajo así que no pude probarlo.
Código Delphi [-]
function OnlyNums(Str: String): Boolean;
const
  NUMS = [#48 .. #57]; //'0' .. '9'
var
  I: Integer;
begin
  Result := True;
  for I := 1 to Length(Str) do
  begin
    if not(Str[i] IN NUMS) then
    begin
      Result := False;
      Exit;
    end,
  end;
end;

function OnlyCaps(Str: String): Boolean;
const
  CAPS = [#65 .. #90]; //'A' .. 'Z'
var
  I: Integer;
begin
  Result := True;
  for I := 1 to Length(Str) do
  begin
    if not(Str[i] IN Caps) then
    begin
      Result := False;
      Exit;
    end,
  end;
end;


function OnlyNumsOrCaps(Str: String): Boolean;
begin
  Result := OnlyNums(Str) or OnlyCaps(Str);
end;

procedure ParseStr(MyStr: String);
//MyStr := 'abc DEF ghi JKL MNÑ oPq RS1 2TUV xzc2 hn2d AJ7J kekgnwo'
var
  SList: TStringList;
  I: Integer;
begin
  SList := TStringList.Create;
  SList.Delimiter := #32;
  SList.DelimitedText := MyStr;
  for I := 0 to SList.Count-1 do
    if (OnlyNumsOrCaps(SList[i]) and Length(SList[i]) = 5) then
      ShowMessage(SList[i]);
end;

Saludos!!
Responder Con Cita
  #11  
Antiguo 19-04-2012
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Conseguí acceso a un compilador y vi la asquerosidad de código que escribí
En fin, acá tenés algo que te puede servir.
Código Delphi [-]
function OnlyNumsCaps(Str: String): Boolean;
const
  VALID = [#48 .. #57, #65 .. #90, 'Ñ']; //'0' .. '9' + 'A' .. 'Z' + 'Ñ'
var
  I: Integer;
begin
  Result := True;
  for I := 1 to Length(Str) do
  begin
    if not(Str[i] IN VALID) then
    begin
      Result := False;
      Exit;
    end;
  end;
end;

procedure ParseStr(MyStr: String);
//MyStr := 'abc DE32F ghi JKL MNÑAS oPq RS1 2TFFU xzc2 hn2d AJwd7J kekgnwo'
var
  SList: TStringList;
  I: Integer;
begin
  SList := TStringList.Create;
  SList.DelimitedText := MyStr;
  SList.Delimiter := ' ';
  for I := 0 to SList.Count-1 do
    if (OnlyNumsCaps(SList[i])) and (Length(SList[i]) = 5) then
      ShowMessage(SList[i]);
  SList.Free;
end;

Saludos.
Responder Con Cita
  #12  
Antiguo 20-04-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola ZayDun

Por favor, recuerda leer el punto 13 de la guía de estilo.

Saludos y gracias por tu colaboración.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #13  
Antiguo 21-04-2012
Avatar de ZayDun
ZayDun ZayDun is offline
Miembro
 
Registrado: mar 2007
Posts: 129
Poder: 18
ZayDun Va por buen camino
Perdonar que no haya escrito nada antes, tengo que decir que me he quedado con la solución que me dio Caro que funciona sin problemas, y agradeceros a todos la ayuda tan rapida que dais en cuanto tenemos algunda duda. un saludo!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Buscar sin diferenciar mayusculas de minusculas DARK_WARRIOR Conexión con bases de datos 5 09-12-2007 06:59:51
Buscar string dentro de un archivo de texto didier Varios 4 13-04-2007 21:14:00
Buscar un string dentro de otro FunBit Varios 2 27-01-2006 14:45:16
Buscar texto en mayusculas y minusculas (SQL). Tecnic2 SQL 7 20-04-2005 19:09:35
Buscar texto indistintamente en Mayusculas o minusculas Jose Manuel SQL 3 24-04-2004 09:57:43


La franja horaria es GMT +2. Ahora son las 23:09:35.


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
Copyright 1996-2007 Club Delphi