| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Процедура Val |
| Автор: Akella 25.5.2005, 11:43 | ||
Из справки
Объясните, что делает эта процедура, зачем она нужна, и что у неё за параметры? |
| Автор: Dynamic 25.5.2005, 13:19 | ||
Ну, дык, это же StrToInt:
|
| Автор: Akella 25.5.2005, 14:05 | ||
| а зачем остальные два параметра? Добавлено @ 14:07 или хотябы один, один
я так подразумеваю, что в случае ошибки в переменную Code заноситься номер ошибочного символа, так |
| Автор: Yanis 25.5.2005, 14:09 |
| Я уже ответил. http://forum.vingrad.ru/index.php?showtopic=53272 |
| Автор: Akella 25.5.2005, 14:17 |
| я тоже |
| Автор: ~FoX~ 25.5.2005, 14:24 |
| S - откуда берется I - куда кладется Code - номер первого символа не являющегося числом. |
| Автор: NoeR 25.5.2005, 18:17 | ||
В нем хранится код ошибки! |
| Автор: Yanis 25.5.2005, 18:47 | ||
Всё-таки в нём храниться номер первого символа не являющегося числом! |
| Автор: poor_yorik 25.5.2005, 18:56 |
| Сode равен 0, если удалось перевести из строки в число. Если нет то Code либо 100, либо еще что-то. |
| Автор: Yanis 25.5.2005, 19:06 | ||
Интересно сказал. |
| Автор: ~FoX~ 26.5.2005, 08:21 | ||||||
| NoeR Если хелп не читаете, то хоть проверяте на практике
Это по твоему коды ошибок? |
| Автор: NoeR 26.5.2005, 10:58 |
| Да... Место ошибки... |
| Автор: And_ 20.12.2007, 20:32 |
| StrToInt переводит в том случае, если значение не выходит за диапазон Integer, а Val работает и с Cardinal. У меня такая проблема, как отследить что число в строке больше максимального значения Cardinal? Если такое происходит, code не изменяет своего значения. |
| Автор: VICTAR 20.12.2007, 23:26 |
| Если нужен просто перевод, то есть StrToInt64 |
| Автор: SergeBS 21.12.2007, 15:03 | ||
| 2All: Ну вы, блин, даете. Ведь нормальным английским все написано:
Перевод (для особо упорных в шаманстве): Val Преобразует строку в числовое представление. Юнит - систем Категория - процедуры обработки строк. Описание. Val преобразует строковую величину S в ее численное (!!!) представление, как если бы она читалась из текстового файла через Read. S - выражение типа строка, оно должно быть последовательностью символов, которая формирует ЗНАКОВОЕ РЕАЛЬНОЕ число (!!!). V - переменная типа целое ИЛИ РЕАЛЬНОЕ (!!!). Если V - переменная типа целое, то S должна формировать целое число. Code - переменная типа целое. Если строка неверна, то индекс нарушающего символа помещается в Code, иначе Code устанавливается в 0. Для нуль-терминированных строк позиция ошибки возвращенная в Code на 1 больше действительного с 0-начинающегося индекса символа с ошибкой. Val производит проверку диапазона по-разному, в зависимости от установки директивы $R компилятора и типа параметра V. Установка Результат {$R+} Величина выходящая за границы диапазона всегда генерирует ошибку времени выполнения {$R-} величины выходящие за границы диапазона меняются в зависимости от типа данных V. Прим. переводчика (т.е. мои Где (!!!) и крупный шрифт - я специально отметил. 2 последние строки я не могу комментировать - в справке на {$R+} у меня пишет, что раздел не найден :(. Киньте английский вариант - разберу. Скорее всего тут разделение на ошибку адресации в массиве и чисто ошибку допустимого значения. Перевод - подстрочный - я вам не писатель! |
| Автор: And_ 21.12.2007, 16:44 |
| Все верно, свою проблему решил директивами компилятора. По умолчанию, переполнение не вызывает ошибку, например если в V типа Byte (0..255) попытаться поместить '257', то V станет равной 1. Если '258', то 2 ... и так по кругу. Но как можно отследить этот факт я так и не понял. При использовании директивы {$R+}, при переполнении будет возникать ошибка класса ERangeError, которую можно обработать с помощью try ... except... |