![]() |
|
Модераторы: ginnie, korob2001 |
![]()
|
|
| ilya_evseev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 30.10.2004 Репутация: нет Всего: нет |
Как определить, что переменная содержит число?
Сейчас я пытаюсь сделать это так: sub enquote_value($) { $_ = shift; no warnings 'numeric'; return $_ unless ($_ == 0) && ($_ ne "0"); s/'/\\'/g; # escape internal quotes.. '\'' . $_ . '\''; # put external quotes.. } Однако этот вариант считает, например, ip-адрес числом. P.S. Зачем мне это потребовалось? Чтобы при конструировании SQL-запроса строковые поля заключать в кавычки, а числовые - нет. Если определить по значению, число это или нет, Перл не позволяет, во все подпрограммы придётся отдельным параметром сообщать типы столбцов - слишком монстроидально. |
|||
|
||||
| Forza |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 12.9.2004 Репутация: нет Всего: 2 |
Натрави на него регэксп, который зависит от формата того, что хочешь считать числами.
Например, проверка
Если же числа могут быть как дробными, так и целыми, то подойдёт такая проверка:
Т.е. тут после целой части может быть, а может и не быть точка с как минимум одним числом. Если хочешь также считать числами строки типа ".123" или "1.23E-01", то придумывай сам им регэкспы. Это сообщение отредактировал(а) Forza - 30.10.2004, 11:25 |
||||||
|
|||||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: нет Всего: 39 |
Надо тестить. Добавлено @ 11:33 Forza Проще надо быть.... |
|||
|
||||
| Forza |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 12.9.2004 Репутация: нет Всего: 2 |
Secandr, согласен. А то я привык всё подряд проверять регэкспами. Очень уж они мне нравятся!
Имхо из предложенного тобой надо брать вариант со сравнением через "==", т.к. мы пытаемся воспринимать переменную именно как число! Это сообщение отредактировал(а) Forza - 30.10.2004, 12:15 |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: нет Всего: 39 |
Forza Насамом деле должны работать оба способа.
А с регекспами знакомая ситуация. Скорей всего ты их нежавно выучил Вещь класная, я сам с полгода искал простые слова регекспами |
|||
|
||||
| Nobody |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 25.8.2003 Где: Россия, Москва Репутация: нет Всего: 16 |
Отныне $a - число -------------------- |
|||
|
||||
| ilya_evseev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 30.10.2004 Репутация: нет Всего: нет |
Да, мне эта идея самому пришла голову, едва я встал из-за компьютера: арифметически прибавить ноль и строково сравнить с оригиналом - если равно, то это число. Отрадно было увидеть, что рецепт от крутых перцев совпал с моим вариантом, который в результате выглядит так:
Что касается регэкспов, то описывать ими форматы чисел, на мой взгляд, нерационально: они могут быть и вещественные, и целые, и 16-ричные и хрен знает какие ещё. Получается и громоздко, и ненадёжно, и без помощи Перла. |
|||
|
||||
| Secandr |
|
||||||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: нет Всего: 39 |
Nobody
Я тоже всегда так делаю, это позволяет избежать проверок. А проверка правельнее
Поскольку в случае
$a='fuck' будет числом |
||||||
|
|||||||
| Sadok |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 2.11.2004 Репутация: нет Всего: 2 |
ilya_evseev
use DBI; my $db = DBI -> connect ('DBI:mSQL:mydata', user, pass); my $string = "Bla-bla"; my $string2 = "123"; my $qs = $db -> quote($string); my $qs2 = $db -> quote($string2); # теперь обе строки годятся для использования в командах для своих СООТВЕТСТВУЮЩИХ серверов баз данных |
|||
|
||||
| ElectricalStorm |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: 1 Всего: 9 |
ИМХО Forza единственно правильный совет дал ...
-------------------- Нужно знать инструмент, которым пользуешься |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: нет Всего: 39 |
ElectricalStorm Политически корректнее брать eq
|
|||
|
||||
![]()
|
| Правила форума "Perl: Системное программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |