Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.07.07;
Скачать: [xml.tar.bz2];

Вниз

Определить, в поле edit число или нечто другое   Найти похожие ветки 

 
Lionzi   (2003-06-21 09:47) [0]

Помогите пожалуста, кто может!
ситуация следующая:
есть два стандартных поля Edit, если в них введен текст, то надо просто подставить слова рядом, а если число, то проссумировать, как сложить или проссумировать я разобрался, а вот как определить что введено в поле? у меня не получаеться.
тут как я понимаю идет ветвление:
if Edit1 = текст, then Edit3:=edit1+edit2 else ... // ну и т.д.
осталось только определить являеться ли знак введенный в поле edit1 буквой или цифрой.
еще пробовал через try..except все равно ругаеться,

procedure TForm1.Button1Click(Sender: TObject);
try
edit3.Text:=intToStr(StrToInt(edit1.Text)+strtoint(edit2.Text));
except
edit3.Text:=edit1.Text+edit2.Text;
end;

Заренее благодарен, Lionzi.


 
jel   (2003-06-21 09:52) [1]

А если так?

procedure TForm1.Button1Click(Sender: TObject);
begin
try
edit3.Text:=intToStr(StrToInt(edit1.Text)+strtoint(edit2.Text));
except
edit3.Text:=edit1.Text+edit2.Text;
end;
end;


 
ЮЮ   (2003-06-21 09:54) [2]

>еще пробовал через try..except все равно ругаеться
не обращай внимание, жми F9 :-)
а если хочешь без ругани, используй функцию Val


 
Palladin   (2003-06-21 09:56) [3]

вот еще как вариант...

function IsNumber(s:string):boolean;
var
Num,Code:integer;
begin
val(s,Num,Code);
result:=Code<>0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if IsNumber(Edit1.Text) and IsNumber(Edit2.Text)
then edit3.Text:=intToStr(StrToInt(edit1.Text)+strtoint(edit2.Text))
else edit3.Text:=edit1.Text+edit2.Text;
end;

надеюсь ты не вводишь сумашедшие числа, знакомест этак в 30...


 
Семен Сорокин   (2003-06-21 10:05) [4]

StrToIntDef


 
Palladin   (2003-06-21 10:13) [5]


> Семен Сорокин © (21.06.03 10:05)

что StrToIntDef?


 
Lionzi   (2003-06-21 10:13) [6]

Спасибо за ответы, но в первом случае выдает все ту-же ошибку,
Project Project1 exe raised exception class EConvertError wilh message "sdf" is nol a valid integer value" Process slopped Use Slep or Run to continue
А во втором случае спотыкаеться на

var
Num,Code:integer;
begin
val(s,Num,Code);
result:=Code<>0;
end;

Слове begin.
Может сможете помочь?


 
Palladin   (2003-06-21 10:14) [7]

врешь, не может он там спотыкатся!
ты все правильно воспроизвел? и заголовок функции?


 
Семен Сорокин   (2003-06-21 10:16) [8]

Palladin © (21.06.03 10:13)
StrToIntDef - функция из sysutils.pas:
function StrToIntDef(const S: string; Default: Integer): Integer;
var
E: Integer;
begin
Val(S, Result, E);
if E <> 0 then Result := Default;
end;


 
Lionzi   (2003-06-21 10:18) [9]

Palladin: не воспроизвел, а нагло скопировал...


 
jel   (2003-06-21 10:23) [10]

Ты либо exe готовый запускай НЕ из среды, либо отключи обработку дельфийских исключений в среде и никаких сообщений выдаваться не будет.


 
Lionzi   (2003-06-21 10:35) [11]

jel:
запустил сам exe выдает: " "fg"is not a valid integer value. "

All: Остальные варианты не проходять.

Попробую привести свой код целиком, может это поможет решить данную проблему?

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
try
edit3.Text:=intToStr(StrToInt(edit1.Text)+strtoint(edit2.Text));
except
edit3.Text:=edit1.Text+edit2.Text;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
close
end;

end.


 
Palladin   (2003-06-21 10:39) [12]


> Семен Сорокин © (21.06.03 10:16)

читай внимательней условия задачи


 
jel   (2003-06-21 10:40) [13]

Мистика - твой код скопированный в проект у меня работает "на ура" D6 Win98SE


 
Lionzi   (2003-06-21 10:42) [14]

jel: складывает цыфры он нормально, а вот если писать буквы, то сразу выдает ошибку. (5 delphi)


 
Семен Сорокин   (2003-06-21 10:45) [15]

Palladin © (21.06.03 10:39)
procedure TForm1.Button1Click(Sender: TObject);
begin
if StrToIntDef(Edit1.Text, -1) = -1 then
Edit3.Text := Edit1.Text + Edit2.Text
end;

При условии конечно что полдьзователь не введет -1 :))
или использовать другую ф-ю оттуда же:
TryStrToInt:

procedure TForm1.Button1Click(Sender: TObject);
begin
if not TryStrToIntDef(Edit1.Text) then
Edit3.Text := Edit1.Text + Edit2.Text
end;


 
Семен Сорокин   (2003-06-21 10:46) [16]

сорри:

procedure TForm1.Button1Click(Sender: TObject);
begin
if not TryStrToInt(Edit1.Text) then
Edit3.Text := Edit1.Text + Edit2.Text
end;


 
Palladin   (2003-06-21 10:51) [17]

ну это другое дело, только у TryStrToInt два параметра...


 
Семен Сорокин   (2003-06-21 10:53) [18]

Palladin © (21.06.03 10:51)
тоже верно :))
поспешишь - других насмешишь


 
Anatoly Podgoretsky   (2003-06-21 10:55) [19]

А нет такой функции в Д5


 
Lionzi   (2003-06-21 11:01) [20]

Спасибо всем, у меня прошел код предложенный Семеном Сорокиным
procedure TForm1.Button1Click(Sender: TObject);
begin
if StrToIntDef(Edit1.Text, -1) = -1 then
Edit3.Text := Edit1.Text + Edit2.Text
else
edit3.Text:=intToStr(StrToInt(edit1.Text)+strtoint(edit2.Text));
end;

с дабовлением строки else Спасибо, всем кто не пожалел времени и участвовал в этой дисскуссии.


 
Palladin   (2003-06-21 11:06) [21]

ну вот :)
ЯХДР


 
app   (2003-06-21 11:24) [22]

Да уж из системы исчисления на за что ни про что, просто незаулуженно исключили -1. За что же ты так ее, математику?


 
Lionzi   (2003-06-21 11:32) [23]

Дорогой app,
еслу у вас есть другие предложения, то я с удовольствием их выслушаю! подскажите пожалуста как еще можно выбраться из моего лабиринта, ниже привожу сам текст задания:
На форме разместить три текстовых поля Edit, и кнопку Button1. При нажатии на кнопку значение полей Edit1 и Edit2 должны складываться, если они содержат числа, и сливаться, если содержать произвольные строки.

Заранее благодарен.


 
Anatoly Podgoretsky   (2003-06-21 11:35) [24]

Все предложения написаны выше, по заданию - задание решено не верноЮ число -1 ПРАВИЛЬНОЕ и его можно складывать!!!
Одно из наиболее правильных решений try except end
Поэтому если предподаватель проверит на граничных числах, то ты получишь уверенную двойуц.


 
Lionzi   (2003-06-21 11:39) [25]

А если он на try except end ругаеться?
Project Project1 exe raised exception class EConvertError wilh message "sdf" is nol a valid integer value" Process slopped Use Slep or Run to continue


 
Palladin   (2003-06-21 11:43) [26]

ты отдельно запусти, не из среды, и будет тебе счастье


 
Семен Сорокин   (2003-06-21 11:46) [27]

Даааа, ну и дискуссию развели.
2app
про -1 я говорил :))
тут предложили уже множество вариантов решения задачи, осталось только выбрать


 
Юрий Федоров   (2003-06-21 11:49) [28]

>>А если он на try except end ругаеться?
Ругается только под отладчиком, эта опция может быть отключена, см. меню Tools -> Debugger Options - > Stop on Exceptions


 
Anatoly Podgoretsky   (2003-06-21 11:59) [29]

Срочно за книжки


 
circul   (2003-06-21 12:02) [30]

Решение такой задачи занимает не более 5 минут(с кодированием).
Нужно только подумать немного.

function isInt(const aSrc: String): Boolean;
var
i: Integer;
begin
Result := False;
for i := 1 to Length(aSrc) do
begin
if i=1 then
begin
if not (aSrc[i] in ["0".."9","-","+"]) then Exit;
end
else
begin
if not (aSrc[i] in ["0".."9"]) then Exit;
end;
end;
Result := True;
end;


Вызов:

if isInt(Edit1.Text) and isInt(Edit2.Text)
then Edit3.Text := IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text))
else Edit3.Text := Edit1.Text + Edit2.Text;


 
Palladin   (2003-06-21 12:08) [31]

мастера расслабляются в субботу я смотрю


> circul © (21.06.03 12:02)

твое решение не корректно, по уже высказаной мной выше причине

а если
Edit1.text:="123456789012345678901234567890"
Edit1.text:="98765432109876543210987654321"


 
circul   (2003-06-21 12:13) [32]

>Palladin © (21.06.03 12:08)

Это уже дело техники-))
try
if isInt(Edit1.Text) and isInt(Edit2.Text)
then Edit3.Text := IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text))
else Edit3.Text := Edit1.Text + Edit2.Text;
except
ShowMessage("Какого лешего такие числа вводите?");
end


 
Юрий Федоров   (2003-06-21 12:18) [33]

>>circul ©
Ну а если все равно использовать try except, зачем тогда огород городить ?


 
circul   (2003-06-21 12:29) [34]

Ну а если все равно использовать try except, зачем тогда огород городить ?

Это не огород, а логичное и простое решение, независимое от версии Delphi.


 
Lionzi   (2003-06-21 12:44) [35]

Все равно не понимаю, посмотрите пожалуста, что я не так написал
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

function isInt(const aSrc: String): Boolean;
var
Form1: TForm1;
i: Integer;
implementation

{$R *.DFM}

begin
Result := False;
for i := 1 to Length(aSrc) do
begin
if i=1 then
begin
if not (aSrc[i] in ["0".."9","-","+"]) then Exit;
end
else
begin
if not (aSrc[i] in ["0".."9"]) then Exit;
end;
end;
Result := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
try
if isInt(Edit1.Text) and isInt(Edit2.Text)
then Edit3.Text := IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text))
else Edit3.Text := Edit1.Text + Edit2.Text;
except
ShowMessage("Какого лешего такие числа вводите?");
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
close
end;

end.


 
Юрий Федоров   (2003-06-21 12:52) [36]

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

function isInt(const aSrc: String): Boolean;
var
Form1: TForm1;
implementation

{$R *.DFM}

function isInt(const aSrc: String): Boolean;
i: Integer;

begin
Result := False;
for i := 1 to Length(aSrc) do
begin
if i=1 then
begin
if not (aSrc[i] in ["0".."9","-","+"]) then Exit;
end
else
begin
if not (aSrc[i] in ["0".."9"]) then Exit;
end;
end;
Result := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
try
if isInt(Edit1.Text) and isInt(Edit2.Text)
then Edit3.Text := IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text))
else Edit3.Text := Edit1.Text + Edit2.Text;
except
ShowMessage("Какого лешего такие числа вводите?");
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
close
end;

end.


Хотя мой тебе совет - реализуй IsInt так :
function isInt(const aSrc: String): Boolean;
begin
try
StrToInt(aSrc);
Result:=true
except
Result:=false;
end
end;


 
Palladin   (2003-06-21 12:53) [37]

одного end не хватает...
ищи сам где


 
Palladin   (2003-06-21 12:55) [38]

о боже :) я увидел заголовок...
это просто кошмар
трижды прав Anatoly Podgoretsky © (21.06.03 11:59)!


 
Anatoly Podgoretsky   (2003-06-21 12:57) [39]

circul © (21.06.03 12:13)
Юрий Федоров © (21.06.03 12:18)

Это уже огород

try
Edit3.Text := IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text))
except
Edit3.Text := Edit1.Text + Edit2.Text;
end

Что и было предложено
jel © (21.06.03 09:52)

Полностью соответствует заданию и главное работает.
И даже твоему утверждению " независимое от версии Delphi"


 
Lionzi   (2003-06-21 12:59) [40]

Полностью скопировал текст, вставил вместо своего, всеравно выдает ошибку:

[Ошика] Unit1.pas(32): Unknown directive: "i"
[Ошика] Unit1.pas(35): Undeclared identifier: "i"
[Warning] Unit1.pas(37): Comparing signed and unsigned types - widened both operands
[Ошика] Unit1.pas(60): Statement expected but "PROCEDURE" found
[Фотальная Ошибка] Project1.dpr(5): Could not compile used unit "Unit1.pas"



Страницы: 1 2 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.07.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.02 c
14-20212
muzik
2003-06-17 16:53
2003.07.07
---|Ветка была без названия|---


1-20128
Артем К
2003-06-25 02:31
2003.07.07
Как разделить строку на слова?


1-20092
korvet
2003-06-24 09:49
2003.07.07
Тмемо и 64 кб


14-20266
Мазут Береговой
2003-06-18 21:23
2003.07.07
Вот вам прикол, дорогие... :-)


11-20020
tamerlan311
2002-10-27 16:31
2003.07.07
рабочая область экрана





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский