Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > Varios
Register FAQ Members List Calendar Guía de estilo Today's Posts

Coloboración Paypal con ClubDelphi

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 09/04/2015
[FGarcia] FGarcia is offline
Miembro Premium
 
Join Date: Sep 2005
Location: Cordoba, Veracruz, México
Posts: 1,123
Poder: 23
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?
Reply With Quote
  #2  
Old 09/04/2015
Al González's Avatar
[Al González] Al González is offline
In .pas since 1991
 
Join Date: May 2003
Posts: 5,619
Poder: 32
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.
__________________
Tras casi seis años de trabajar para una empresa alemana como desarrollador Delphi, se vieron forzados a dejarme ir (temas presupuestales). Así que ahora estoy abierto a escuchar nuevas ofertas.
Reply With Quote
  #3  
Old 09/04/2015
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
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.
Quote:
... 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 ....
Reply With Quote
  #4  
Old 10/04/2015
[FGarcia] FGarcia is offline
Miembro Premium
 
Join Date: Sep 2005
Location: Cordoba, Veracruz, México
Posts: 1,123
Poder: 23
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?
Reply With Quote
  #5  
Old 10/04/2015
nlsgarcia's Avatar
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Join Date: Feb 2007
Location: Caracas, Venezuela
Posts: 2,206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
FGarcia,

Quote:
Originally Posted by 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.
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Eliminar datos dentro de un rango... rotsen26 SQL 1 29/05/2013 02:15
Verificar contenido de un campo GustavoCruz Firebird e Interbase 5 16/11/2012 14:06
¿saber si una fecha o mas estan dentro de un rango de fechas? JXJ Firebird e Interbase 17 25/08/2010 23:55
verificar string mjjj Varios 3 18/08/2008 21:17
comparar un string con un rango de valores locorez Varios 2 09/01/2006 15:54


All times are GMT +2. The time now is 11:36.


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