| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Строку в число |
| Автор: supervladislav 9.10.2012, 18:35 |
| Подскажите можно ли с помощью данного оператора проверять является ли возвращаемый результат или переменная тем или иным типом данных. Я имею ввиду string,integer. |
| Автор: supervladislav 9.10.2012, 19:44 | ||||
что-то вроде
мне нужно узнать является ли результат типа стринг ,данную задачу можно решить с помощью оператора is
|
| Автор: kami 9.10.2012, 23:40 |
| Дружище, выражая исключительно свое мнение и действуя в состоянии небольшого аффекта под воздействием энного количества пива, вынужден сообщить нижеследующее - ты изрядно достал как минимум по двум причинам. Первая: все советы тебе отложить форум в сторону и почитать какую-нибудь книгу пропали втуне. Ибо если бы ты почитал первую главу любой книжки, то знал бы, что Delphi - язык строгой типизации и в нем фокусы типа "string = integer" не работают. И самое главное - обо всем этом заботится компилятор, который своевременно даст по рукам за подобное. Резюмируя первую причину, если поле lcbtd.Text типа string, то компилятор не даст совершить с ним ничего не-стрингового. Всякие is и as здесь излишни. Я не думаю, что ты успел добраться до RTTI, Variant-ов или работы с указателями. Вторая: все пожелания излагать задачу, которую нужно решить, а не странным образом изложенный непонятный кусок из нее, опять-таки канули в Лету. Интересно, кто на этот раз возьмется решать "xyz"? Модераторам: готов понести наказание за это высказывание, но сил молчать больше нет. |
| Автор: Данкинг 10.10.2012, 00:39 | ||
Возвращаемый чем? |
| Автор: northener 10.10.2012, 01:18 | ||
Это опять не задача. Это опять "глупый" вопрос! lcbtd.Text вседа имеет тип String. |
| Автор: supervladislav 10.10.2012, 03:23 |
| Ой я имел ввиду текстовое поле типа Edite Добавлено @ 03:25 northener, Это не глупый вопрос так как мне не очень понятно ,как в чётко типизированном языке проверить является ли значение добовляемое в поле edite числовым или числовым дробным. Я теперь понимаю ,что не через тип. Но как регулярным выражением ,неучто в такой мощной машине как Делпхи Нет другово варианта? |
| Автор: northener 10.10.2012, 03:34 | ||
В "чётко типизированном языке в поле Edit" всегда пишется текст! Только текст! И ничего кроме текста! |
| Автор: supervladislav 10.10.2012, 03:45 |
| northener, а если данные этого поля будут складываться или вычитаться? |
| Автор: MetalFan 10.10.2012, 07:33 |
| supervladislav, почитайте, что http://docwiki.embarcadero.com/RADStudio/XE3/en/String_Types. вычитаться строки не могут. но строку всегда можно ПОПРОБОВАТЬ перевести в число... |
| Автор: Данкинг 10.10.2012, 11:07 | ||
Тогда тебе поможет одна из функций перевода, например, StrToInt. |
| Автор: Delvish 10.10.2012, 13:09 | ||
и засунуть это дело в try ... except .. end; дабы видеть результат или невозможность выполнения действия |
| Автор: superVad 10.10.2012, 14:14 | ||
|
| Автор: Delvish 10.10.2012, 14:26 | ||
ну или так
|
| Автор: superVad 10.10.2012, 17:21 | ||
Можно и машинными кодами писать Но все же - TryStrToInt - это стандартная делфевая функция. |
| Автор: supervladislav 10.10.2012, 18:20 |
| Delvish, когда человек введёт текст ,что будет ,как отследить момент когда человек в функцию вводит текст |
| Автор: Данкинг 10.10.2012, 18:47 | ||
Можешь на этапе нажатия клавиш на Edit отлавливать. Можешь проверять с помощью вышеуказанных способов отлова ошибок. |
| Автор: superVad 10.10.2012, 19:05 | ||
Какой то поток сознания. Рекомендую - http://ru.wikipedia.org/wiki/Метод_утёнка. |
| Автор: supervladislav 10.10.2012, 22:21 |
| superVad, Я просто думал ,что тут тоже программисты и смогут поделиться хотябы той литературой которую они читали. С большим колличеством примеров , но такого я не нашёл. Мне было не очень понятно какие данные проверять ,чтобы выяснить что пользователь ввёл не число ? |
| Автор: Данкинг 10.10.2012, 23:08 | ||||
|
| Автор: supervladislav 10.10.2012, 23:13 |
| Данкинг, а где сам цикл if else? |
| Автор: Данкинг 10.10.2012, 23:49 |
| Зачем здесь "цикл", как ты его называешь, if else? Здесь если strtoint не вызывает ошибки, то выводится "Введено число". Если же возникает ошибка, то программа переходит в блок, следующий после except, и выводится " "Ошибка преобразования". |
| Автор: northener 11.10.2012, 00:44 | ||
Но Val - это "ещё более стандартная" процедура Дельфи. Скажу более. Она использует тот самый Compile Magic. А функция TryStrToInt как раз и использует процедуру Val. См. исходники Дельфи. В них тоже самое, что в посте Delvish, но гораздо элегантнее. И без ошибки в типе второго параметра. P.S. Функции TryStrTo... значительно менее функциональны, чем процедура Val. Во-первых они преобразовывают строку только в жестко заданный тип числовой переменной. А во-вторых (и в этом особый цимус) процедура Val показывает в каком символе входного параметра-строки ошибка! Что даёт возможность показать пользователю, где он при ручном вводе сделал ошибку. Ну точнее - где он сделал первую из своих ошибок ввода. |
| Автор: northener 11.10.2012, 01:12 | ||
Тут тоже программисты. Но далеко не все из них учились методом "подгонки готовых примеров под свою задачу". Даже скажу что таких - меньшинство. Я знаю только одного. |
| Автор: bems 11.10.2012, 03:46 |
| Использование StrToXXX когда нет уверенности что в строке число в нужном формате это нецелевое использование исключений, годится только для плохих студентов, которым сдать лабу и забыть. Правильный вариант TryStrToXXX, ну или Val, если вы не можете смириться с показаниями календаря |
| Автор: Delvish 11.10.2012, 10:52 | ||
это я и имел ввиду - TryStr.. основывается на старом-добром Val, в котором 2й параметр можно задать натуральным либо вещественным типом в зависимости от того, какой результат хочется увидеть. и да, плюс ко всему - это третий параметр с порядковым номером ошибочного символа, если он присутствует |
| Автор: northener 11.10.2012, 12:24 | ||||
| Вот ведь как забавно! Исторически в турбо паскале существовала процедура Val не вызывавшая ошибок времени исполнения (runtime error). При рождении Дельфи для этой процедуры сделали обертку, которая стала такие ошибки (теперь они называются exception) выдавать:
И понадобилось еще лет 10, чтобы к той самой процедуре Val сделали новую обертку, которая вновь не вывает ошибок:
Неисповедимы пути твои, господи. |
| Автор: supervladislav 11.10.2012, 20:56 |
| northener, Если человек изучает с ноля с минимум примеров , а вы изучали сами или вас застовляли? Добавлено через 22 секунды ПРостой толковой литературы маловато пока. |
| Автор: northener 12.10.2012, 01:06 | ||
Меня никто не застАвлял. Учился почти совсем без примеров. Но Аглицкий Технический знал, так что мог читать хелп. Если он был, конечно P.S. Да ради бога. Изучай с ноля и без примеров. Но, пожалуйста, пойми одну простую вещь. Если мне когда-нибудь придётся что-то делать на php, я не стану на форумах задавать "умные" вопросы. Я просто скажу,что php я не знаю. А мне нужно сделать, чтобы моя програмима делала то-то и то-то. Что из некоторых соображений я пытаюсь сделать так (тут кусок кода), но у меня не получается. Помогите исправить мои ошибки! |
| Автор: spindul 13.10.2012, 21:56 |
Ну по-моему литературы простой по Delphi предостаточно, взять того же Фленова "Библия Delphi" написана доступным и понятным языком, что даже дитё разберется |
| Автор: northener 14.10.2012, 01:49 |
Не надо её брать, пожалуйста! Эта книга написана троешником, чем сам автор даже гордится. |
| Автор: spindul 14.10.2012, 11:23 | ||
Да она написана троешником, но по крайней мере там есть примеры и разжевано всё чуть ли не досконально, я не говорю что это лучшая книга по Delphi, но для начала она сойдет. |
| Автор: bems 14.10.2012, 13:17 |
| Ничего там не разжевано |
| Автор: spindul 14.10.2012, 14:16 |
что не понятно можно было и в других книгах глянуть, не считаю это проблемой |
| Автор: northener 15.10.2012, 01:00 |
Ну тогда дай другой пример учебника по Дельфи на русском. |
| Автор: spindul 15.10.2012, 17:54 |
рубанцева с особым интересом почитал, графику у осипова. Да я и не обязательно говорю о учебниках на русском, можно и на английском читать, вроде проблем нет особых |
| Автор: northener 16.10.2012, 00:59 | ||
У автора темы как раз есть проблемы. |