Casa
Top.Mail.Ru Yandeks.Metrika
Fórum: "Principal";
Arquivo atual: 2004.12.12;
Download: [xml.tar.bz2];

Para baixo

verifique o tipo Encontre agências semelhantes


Bobby Digital ©   (2004-11-24 05:02) [0]

É possível verificar de alguma forma o tipo de dados dos dados de entrada, por exemplo, em Editar sem usar o try ... exceto



YurikGL ©   (2004-11-24 07:10) [1]

TryStrToBool ()
TryStrToFloat ()
TryStrToInt ()



ASoft   (2004-11-24 07:37) [2]

> Bobby Digital
Se você precisar inserir apenas dígitos ou dígitos da vírgula em Editar, em KeyPress Edit "você pode definir imediatamente a verificação de entrada no teclado :)



Reindeer Moss Eater ©   (2004-11-24 10:28) [3]

O tipo de dados inserido na edição não pode ser verificado.
Esta é sempre uma string ancy.



Rutven ©   (2004-11-24 10:37) [4]


> O tipo de dados inserido não pode ser verificado.
> Esta é sempre uma string ancy.

Bravo :)



Sandman25 ©   (2004-11-24 10:44) [5]

Se você adotar uma abordagem estrita, os dados inseridos estarão no tipo PChar.



ASoft   (2004-11-24 10:47) [6]

> O tipo de dados inserido não pode ser verificado.
Eu mesmo uma vez tentei verificar ao sair Edit que lá: um número ou texto, usado f. Val (). Mas então, simplesmente no KeyPress não permitia inserir letras ou números (dependendo das necessidades). Talvez o autor da pergunta quis dizer isso?



ASoft   (2004-11-24 10:49) [7]

> Talvez o autor da pergunta se refira a isso? [6]
A propósito, onde ele está, o autor?



passlight ©   (2004-11-24 10:49) [8]

E se copiar / colar? O cheque funcionará neste caso?



ASoft   (2004-11-24 10:53) [9]

> E se copiar / colar? A verificação funcionará neste caso? [8]
Boa pergunta ...



ASoft   (2004-11-24 11:07) [10]

Novamente Val () ...
teclas de intercepção Shift-Ins, Ctrl-C ...
aguarde Editar o seu pop-up ...
De alguma forma não muito ...
Quem é melhor?



begin...end ©   (2004-11-24 14:20) [11]


> [10] ASoft (24.11.04 11: 07)


> intercepção de teclas Shift-Ins, Ctrl-C ...

> De alguma forma não muito ...
> Quem é melhor?

Manipulador TEdit.OnChange.



Ega23 ©   (2004-11-24 14:28) [12]

O melhor é no manipulador OnButtonOKClick:


procedure TFProfs.btnOkClick(Sender: TObject);
var
ss:String;
ProfID:Integer;

begin

if not CheckControlValues then Exit;

NewDataString:=MakeHistDetStr(nil,eProfNam.Text+";"+eProfLab.Text+";"+
                              RQ1.FieldByName("WCfgNam").AsString+";"+cbIsActual.Text,
                              "Название: ;Сокр.: ;АРМ: ;Используется: ","V");

............

ModalResult:=True;
end;

function TFProfs.CheckControlValues: Boolean;
var
ss:string;
Code:Integer;

begin

ss:=eProfNam.Text;
if not CheckOnQuotes(ss,Code) then
 begin
  if eProfNam.CanFocus then eProfNam.SetFocus;
//   PassMessage(Handle,"Символ "+eProfNam.Text[Code]+" является зарезервированым "+CRLF+
//                      " и не может быть использован",PasMess.capWarning,0);
  Exit;
 end;
eProfNam.Text:=ss;

ss:=eProfLab.Text;
if not CheckOnQuotes(ss,Code) then
 begin
  if eProfLab.CanFocus then eProfLab.SetFocus;
//   PassMessage(Handle,"Символ "+eProfLab.Text[Code]+" является зарезервированым "+CRLF+
//                      " и не может быть использован",PasMess.capWarning,0);
  Exit;
 end;
eProfLab.Text:=ss;

if eProfNam.Text="" then
 begin
  PassMessage(Handle,PasMess.wrnNamAbs,PasMess.capWarning,0);
  eProfNam.SetFocus;
  Result:=False;
  Exit;
 end;

if eProfLab.Text="" then
 begin
  PassMessage(Handle,PasMess.wrnLabAbs,PasMess.capWarning,0);
  eProfLab.SetFocus;
  Result:=False;
  Exit;
 end;

if Mode=0 then
 begin
  ss:="select ProfNam from Profs where ProfNam=" + ValX(eProfNam.Text);
  QuOpen(DMpas.RQTemp,ss);
  if not DMpas.RQTemp.IsEmpty then
   begin
    DMpas.RQTemp.Close;
    PassMessage(Handle,PasMess.wrnNamExist,PasMess.capWarning,0);
    eProfNam.SetFocus;
    Result:=False;
    Exit;
   end;

  ss:="select ProfLab from profs where proflab=" + ValX(eProfLab.Text);
  QuOpen(DMpas.RQTemp,ss);
  if not DMpas.RQTemp.IsEmpty then
   begin
    DMpas.RQTemp.Close;
    PassMessage(Handle,PasMess.wrnLabExist,PasMess.capWarning,0);
    eProfLab.SetFocus;
    Result:=False;
    Exit;
   end;
 end;

Result:=True;
end;




Bobby Digital ©   (2004-11-24 23:58) [13]

Eu precisava distinguir - Integer Float String
Eu escrevi uma função simples ... que verifica cada caractere em uma string, por exemplo, se todos os dígitos forem Integer .. e assim por diante.



Юрий Зотов ©   (2004-11-25 00:20) [14]

tipo
TDataType = (dtInteger, dtFloat, dtString);

function GetDataType (S: string): TDataType;
var
I: inteiro;
F: duplo absoluto I;
começar
se TryStrToInt (S, I) então
Resultado: = dtInteger
mais
se TryStrToFloat (S, F) então
Resultado: = dtFloat
mais
Resultado: = dtString
end;



GuAV ©   (2004-11-25 01:25) [15]

Yuri Zotov © (25.11.04 0: 20) [14]

Você não acha que

Yuri Zotov © (25.11.04 0: 20) [14]
F: duplo absoluto I;


- código incorreto, considerando que Ischuch (Shteupuk) = 4 e SizeOf (Double) = 8. É claro que você pode provar que não sobrescreve nada, mas ainda assim seria mais correto I: integer absoulte F; E é mais correto IMHO não salvar uma palavra na pilha e declarar F e I separadamente.



GuAV ©   (2004-11-25 01:25) [16]

GuAV © (25.11.04 1: 25) [15]
YSHYAUSCHA (Shteupuk) = 4

SizeOf (Integer) = 4



GuAV ©   (2004-11-25 01:36) [17]

Eu tentei. GetDataType ("7,8"); - AV. Legal.



Bobby Digital ©   (2004-11-25 01:52) [18]

E o que é sinal? F: duplo absoluto I;



GuAV ©   (2004-11-25 01:58) [19]

Bobby Digital © (25.11.04 1: 52) [18]
E o que é sinal? F: duplo absoluto I;


O fato de a variável F, o tipo duplo, estar localizada no mesmo endereço da variável I. Nesse caso, tal construção é errônea, pois o tamanho da variável F é maior que o tamanho da variável I e, portanto, leitura / escrita da variável F pode levar a leitura / escrita de dados estranhos.

Você não deve usar absoluto sem necessidade.

Aqui você pode escrever
var I: inteiro; F: duplo;

Mais absoluto + F1



ASoft   (2004-11-25 07:04) [20]

GetDataType () é realmente ótimo, o que prova mais uma vez: "crie seus próprios tipos". Mas o que acontece com a verificação ao sair do MaskEdit, porque o evento (erro) EDBEditError é acionado antes da função de verificação? Escreva seu manipulador de erros?



Leonid Troyanovsky   (2004-11-25 09:56) [21]


> ASoft (25.11.04 07: 04) [20]
> GetDataType () é realmente ótimo, o que prova mais uma vez:
> "crie seus próprios tipos". Mas e quanto à verificação na saída?
> from MaskEdit, porque o evento (erro) EDBEditError é acionado
> mais cedo que a função de teste? Escreva seu manipulador
> erros?


Por exemplo

http://groups.google.com/groups?selm=41931491%40f1003.n5080.z2.fidonet.ftn

--
Atenciosamente, LVT.



ASoft   (2004-11-25 10:56) [22]

>> Leonid Troyanovsky [21]
Obrigado pela informação, na verdade, que eu assumi:
"on E: EDBEditError do
raise Exception.Create ("Minha exceção"); // faça algo "-
sua exceção de interceptação.



Юрий Зотов ©   (2004-11-25 14:42) [23]

> GuAV © (25.11.04 01: 25) [15]

> Você não acha que

Parece-me que o compilador ainda irá alocar bytes 8, não 4.

> Você pode certamente provar que você não sobrescreve nada, mas
> ainda seria mais correto ter I: inteiro absoulte F.

Se a primeira afirmação for verdadeira, a segunda está errada.

> E IMHO é mais correto não salvar uma palavra na pilha e
> declarar F e eu separadamente.

O que é mais correto?



jack128 ©   (2004-11-25 14:48) [24]

Yuri Zotov © (25.11.04 14: 42) [23]
O que é mais correto?

por este aparentemente

> GuAV © (25.11.04 1: 36) [17] [Responder]
> Eu tentei. GetDataType ("7,8"); - AV. Legal.

;-)



GuAV ©   (2004-11-25 14:50) [25]

Yuri Zotov © (25.11.04 14: 42) [23]
Se a primeira afirmação for verdadeira, a segunda está errada.


Eu já verifiquei. [17] - AV.

O compilador definitivamente alocará bytes 4. A primeira afirmação é verdadeira.

Eu pensei que a segunda afirmação está correta, com base no fato de você ter verificado o código antes de publicá-lo. O compilador alocaria bytes 4, mas os bytes 4 ausentes não conteriam os dados usados. Sim, eu estava errado a segunda afirmação não é verdadeira.



GuAV ©   (2004-11-25 14:55) [26]

Yuri Zotov © (25.11.04 14: 42) [23]
O que é mais correto?


O fato é que, se com um pequeno benefício de absoluto (4 bytes na pilha da memória, velocidade 0 ou quase 0), é tão fácil cometer um erro. O que você demonstrou?

também o fato de que o código se torna menos claro, como demonstrado em [18].



Юрий Зотов ©   (2004-11-25 15:37) [27]

> GuAV © (25.11.04 14: 55) [26]

1. Eu concordo que eu pensei mal que minhas idéias sobre o compilador estavam erradas, e que eu deveria escrever I absoluto.

2. Eu não concordo que o código DATA disso se torne mal legível (em casos mais complexos - sim, talvez eu não tivesse abusado da base lá também, mas este caso é muito simples e absoluto "mas transparente". Link para "e o que é absoluto" "Eu não considero o argumento, porque ele não demonstra a confusão do código, mas sim uma ignorância elementar da linguagem. Com o mesmo sucesso, podemos dizer que os ponteiros também confundem o código, porque nem todos entendem o que é.

3. Em recursões profundas (e você nunca saberá onde e como seu procedimento será usado), até mesmo o byte 1 da pilha pode ser crítico. Portanto, se houver uma oportunidade de salvar algo sem prejudicar o resto, vale a pena fazê-lo.



Юрий Зотов ©   (2004-11-25 15:38) [28]

Excluído pelo moderador
Nota: duplo



Sha ©   (2004-11-25 16:11) [29]

> Bobby Digital © (24.11.04 05: 02)

Não esqueça que
TryStrToInt considera $ 1 e 0x1 como inteiros
TryStrToFloat considera o 1E-10 flutuante



GuAV ©   (2004-11-25 16:13) [30]

Yuri Zotov © (25.11.04 15: 38) [28]
Eu não concordo que o código dado a partir disso se torne mal legível.

Ok, eu não concordo, torna-se mal legível.

Yuri Zotov © (25.11.04 15: 37) [27]
3. Em recursões profundas (e você nunca saberá onde e como seu procedimento será usado), até mesmo o byte 1 da pilha pode ser crítico.


Pilha de bytes 1 - como é isso? :-)

Yuri Zotov © (25.11.04 15: 37) [27]
Portanto, se houver uma oportunidade de salvar algo sem prejudicar o resto, vale a pena fazê-lo.


No entanto, a chance de cometer um erro é também "lar para o resto". Aqui, claro, devido à transparência absoluta do código, é fácil detectá-lo.

PS: Pessoalmente, eu preferiria este código:
var DummyParam: registro case TDataType de dtInteger: (I: Integer); dtFloat: (F: Double); fim;



Sha ©   (2004-11-25 16:21) [31]

Também faz sentido adicionar const à descrição do parâmetro:
function GetDataType (const S: string): TDataType;



jack128 ©   (2004-11-25 17:34) [32]

Sha © (25.11.04 16: 21) [31]
não tem. Se apenas por legibilidade.



Sha ©   (2004-11-25 18:03) [33]

jack128 © (25.11.04 17: 34) [32]
Também faz sentido procurar na janela de depuração :)



GuAV ©   (2004-11-25 18:09) [34]

jack128 © (25.11.04 17: 34) [32]

procedure ValueStringParameter (S: string); começar ShowMessageFmt ("ValueStringParameter. Ref count =% D", [PInteger ((Integer (S) -8)) ^]); fim; procedure ConstantStringParameter (const S: string); começar ShowMessageFmt ("ConstantStringParameter. Ref count =% D", [PInteger ((Integer (S) -8)) ^]); fim; procedimento TForm1.Button1Click (Sender: TObject); var S: string; começar S: = StringOfChar ("-", 5); ShowMessageFmt ("Chamador. Contagem de referência =% D", [PInteger ((Integer (S) -8)) ^]); ValueStringParameter (S); ConstantStringParameter (S); fim;



jack128 ©   (2004-11-25 18:49) [35]

Eu sei, mas isso é sério, você entende. Se a linha fosse copiada, então sim .. E assim .. Embora se nós lutarmos por cada byte da pilha, pode fazer sentido ;-)



jack128 ©   (2004-11-25 18:50) [36]

jack128 © (25.11.04 18: 49) [35]
Eu sei, mas isso não é sério, você entende.



Sha ©   (2004-11-25 19:17) [37]

jack128 © (25.11.04 18: 50) [36]
Preste atenção ao prólogo / epílogo do procedimento.
С const Acontece muito mais curto e mais rápido.



TankMan ©   (2004-11-25 19:39) [38]

Mdaaaaa ... :)
absolut "mas é útil conduzir tais discussões aqui ... quantos pequenos prozhek no passcal foram reescritos, mas eu nem ouvi falar de absoluto ...

ZY
Aproveitando esta oportunidade, gostaria de agradecer pelo livro recomendado sobre a criação de componentes no Delphi. Este é exatamente o livro que eu perdi. (off topic, bem, onde mais eu poderia agradecer a pessoa :))



Германн ©   (2004-11-26 04:11) [39]

Honestamente usado para muitas vezes absoluto no contexto:
var
St: String;
LenSt: Byte absoluto St;


Mas então era sobre cordas de Pascal e ao formar essas cordas era mais conveniente escrever LenSt: = N do que St [0]: = Chr (N) ou era mais conveniente escrever N: = LenSt do que N: = Ord (St [0] );

Mas outro algoritmo de tipo absoluto Eu ainda uso e não pretendo desistir. Este é um registro variante. É vital para mim, porque recebo uma resposta de algum ferro. E esta resposta depende do que está sendo solicitado.



GuAV ©   (2004-11-26 14:29) [40]

Hermann © (26.11.04 4: 11) [39]
Mas eu ainda uso outro algoritmo de tipo absoluto até agora e não vou desistir. Este é um registro variante.


Ainda é IMHO melhor que absoluto. Neste caso, e gostaria de tê-los - cm [30].



Страницы: 1 2 filial inteira

Fórum: "Principal";
Arquivo atual: 2004.12.12;
Download: [xml.tar.bz2];

em cima





Memória: 0.71 MB
Hora: 0.076 c
14-1100855016
Ilya___
2004-11-19 12:03
2004.12.12
Por favor me diga. estou fazendo certo?


4-1098954862
Ivolg
2004-10-28 13:14
2004.12.12
Discos


1-1101646116
Tazik
2004-11-28 15:48
2004.12.12
Matrizes dinâmicas


14-1100881470
Extinto
2004-11-19 19:24
2004.12.12
Como se livrar de sites pornográficos?


1-1101499464
GanibalLector
2004-11-26 23:04
2004.12.12
IncludeTrailingBackslash





afrikaans albanês Arabic armênio azerbaijano basco belarusian Bulgarian catalão Chinês simplificado) Chinês tradicional) croata checo dinamarquês Dutch Inglês estoniano filipino Finnish French
Galego georgiano German grego crioulo haitiano hebraico hindi húngaro islandês Indonesian irlandês Italian Japanese Korean letão lituano macedónio Malay maltês Norwegian
persa polonês Portuguese Romeno Russa sérvio Slovak esloveno Espanhol swahili sueco tailandês turco ucraniano urdu vietnamita galês ídiche bengali bósnio
cebuano esperanto gujarati hausa hmong igbo javanês kannada khmer lao latino maori marata mongol Nepali punjabi somali tâmil telugu yoruba
zulu
Английский francês Alemão Italiano Португальский russo Espanhol