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 09-04-2015
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Verificar que el contenido de un String este dentro de cierto rango

Hola!

Con este codigo (que no he probado aun) intento ver que el string solo tenga numeros, el caracter de espacio y el punto decimal

Código Delphi [-]
procedure TfrmPrincipal.UpdateCaptura1;
var
  sTemp,sFinal: string;
  i: Integer;
  rPeso: Real;
begin
  
  sTemp := MidStr(dmComPort.NuevaCaptura1,10,7);

  for i := 0 to length(stemp)  do
    if sTemp[i] in ['0'..'9',#32,'.'] then
      sFinal := sFinal + sTemp[i];

  try
    rValor := StrToFloat(sFinal);
  except
    on Exception : EConvertError do
      ShowMessage(Exception.Message);
  end;

end;

Es correcto el enfoque? No lo he verificado en la practica.
El control de excepcion lanza una ventana de aviso, ¿Es posible solo ignorar la excepcion? se me ocurre para no esperar que el operador Acepte el mensaje solo guardar un log ¿Como haria eso?

Como siempre agradezco su ayuda y tiempo invertido!!
__________________
ESTO ES UN FORO ... NO UN MÓVIL
¿Por qué no escribir de una manera comprensible para que los humanos lo podamos entender?
Responder Con Cita
  #2  
Antiguo 09-04-2015
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Hola Fidel.

Sabiendo que tienes Delphi XE2 y disposición para usar GH Freebrary, te paso un ejemplo de cómo hacerlo con una función de esta biblioteca.
Código Delphi [-]
Uses
  GHFRTL;
...
Var
  S :String;
Begin
  S := ' Prueba';

  If ghIsChrs (S, ghchDotDecimals + [' ']) Then
    ShowMessage ('es válida')
  Else
    ShowMessage ('no es válida');

  S := '12 345.';

  If ghIsChrs (S, ghchDotDecimals + [' ']) Then
    ShowMessage ('es válida')
  Else
    ShowMessage ('no es válida');

  S := '93     ';

  If ghIsChrs (S, ghchDotDecimals + [' ']) Then
    ShowMessage ('es válida')
  Else
    ShowMessage ('no es válida');
La función ghIsChrs comprueba si una cadena dada (S) se compone de, y sólo de, caracteres que se encuentren en un conjunto dado, en este caso punto, dígitos decimales y espacio en blanco. En el ejemplo, el primer If no se cumple, los segundos dos Ifs sí.

Desde luego, puede haber otras soluciones para esta situación. La mía es sólo una alternativa.

Saludos.
Responder Con Cita
  #3  
Antiguo 09-04-2015
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 Fidel.
Cita:
... se me ocurre para no esperar que el operador Acepte el mensaje solo guardar un log ¿Como haria eso?
Sobre ese punto, podes hacer algo como esto:
Código Delphi [-]
function VerifyInput(str: string; var Value: Double): Boolean;
var
  logf: string;
begin
  str := StringReplace( str, ' ','', [rfReplaceAll] );
  Result := TryStrToFloat( str, Value );
  if not Result then
  begin
    logf := ExtractFilePath( Application.ExeName ) +
      FormatDateTime( 'yyyy-mm-dd',Date ) + 'E_ComPort.LOG';
    with TStringList.Create do
    try
      Value := 0;
      if FileExists( logf ) then
        LoadFromFile( logf );
      Add( Format( 'Valor: %s : %s',[str,
        FormatDateTime( 'dd/mm/yyyy - hh:mm:ss',Now )] ) );
      SaveToFile( logf );
    finally
      Free;
    end;
  end;
end;

Llamada:
Código Delphi [-]
...
var
  s : string;
  v: Double;
begin
  s := ' 0.123 456789';
  if VerifyInput( s, v ) then
  begin
     // En v hay un valor correcto, continuar
     ...


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 10-04-2015
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Alberto y Daniel gracias por sus respuestas, no he podido realizar las pruebas necesarias pues se me ha complicado el día sin embargo a la primera oportunidad estaré en ello y les informare.

Muchas gracias por su interés.
__________________
ESTO ES UN FORO ... NO UN MÓVIL
¿Por qué no escribir de una manera comprensible para que los humanos lo podamos entender?
Responder Con Cita
  #5  
Antiguo 10-04-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
FGarcia,

Cita:
Empezado por FGarcia
...Verificar que el contenido de un String este dentro de cierto rango...solo tenga números, el carácter de espacio y el punto decimal...guardar un log...


Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  Data : Array[1..5] of String = (' 123456789.0','#123456789.0',' 123456789,0','A123456789.0',' @23456789.0');

var
  Form1: TForm1;

implementation

{$R *.dfm}

function CheckInput(Value : String) : Boolean;
var
   i : Integer;
   F : TextFile;
   FileName : String;

begin

   Result := True;

   FileName := ExtractFilePath(Application.ExeName) + 'History.txt';
   FileMode := fmOpenWrite or fmShareExclusive;
   AssignFile(F, FileName);

   if FileExists(FileName) then
      Append(F)
   else
      Rewrite(F);

   for i := 1 to Length(Value) do
      if not (Value[i] in ['0'..'9',' ','.']) then
      begin
         WriteLn(F,FormatDateTime('yyyy/mm/dd hh:nn:ss',Now) + ' ' + Value);
         Result := False;
         Break;
      end;

   CloseFile(F);

end;

procedure TForm1.Button1Click(Sender: TObject);
var
   i : Integer;
begin
   for i := Low(Data) to High(Data) do
      CheckInput(Data[i]);
end;
      
end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Realiza la verificación de un string y guarda un registro por cada caso de error en un archivo histórico, como se muestra en la siguiente imagen:



Espero sea útil

Nelson.
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
Eliminar datos dentro de un rango... rotsen26 SQL 1 29-05-2013 02:15:11
Verificar contenido de un campo GustavoCruz Firebird e Interbase 5 16-11-2012 14:06:06
¿saber si una fecha o mas estan dentro de un rango de fechas? JXJ Firebird e Interbase 17 25-08-2010 23:55:43
verificar string mjjj Varios 3 18-08-2008 21:17:10
comparar un string con un rango de valores locorez Varios 2 09-01-2006 15:54:43


La franja horaria es GMT +2. Ahora son las 08:30:25.


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