К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Какая-то фигня с условием Если-Тогда.

Гость
0 - 14.06.2012 - 15:48
Ситуация следующая, проверяю символы по условию и оно не выполняется ни при каких значениях.
Например, передается символ "П", код его 207, но условию пофигу, что 207>57 - проходит мимо.
Что не так написал?

Вот часть кода:
КодСимвола = Число(КодСимв(Символ));
Если (КодСимвола<48) или (КодСимвола>57) Тогда
СтрЗаменить(Номер,Символ," ");
КонецЕсли;



Uho
1 - 14.06.2012 - 15:56
Че-то я уверен на 146%, что следующий код опровергнет сабж:

Символ = "П";
КодСимвола = КодСимв(Символ);
Если (КодСимвола<48) или (КодСимвола>57) Тогда
Сообщить("Чудес не бывает");
КонецЕсли;
2 - 14.06.2012 - 16:00
0-US1C >Отладчиком пользоваться никто не учил?
Гость
3 - 14.06.2012 - 16:07
(1) Да, этот код отработал нормально. Собственно и в своем я был уверен на 146%, пока обработка не выполнила то, что должна была. Тогда залез в отладчик и убедился, что условие ни разу не выполнилось. Хотя передавалось больше 800 символов, часть из которых не цифра (как в приведенном выше примере). Вот и хотелось бы понять, что моему условию не нравится. Даже дополнительно привел код символа к числу (хотя и без этого оно числом является). Убрал одно из условий, оставил только >57 для проверки. Пофигу. Если не верится, могу скриншот отладчика предоставить.
Гость
4 - 14.06.2012 - 16:09
(2) Нет, никто. Сам научился.
5 - 14.06.2012 - 16:11
3-US1C >Покажи скриншот, но в нем должны быть видны на момент исполнения условия значения переменных:
Символ
КодСимв(Символ)
Число(КодСимв(Символ)
КодСимвола

И еще. Нет ли перед этим кодом методов НачатьТранзакцию и/или Попытка?
Гость
6 - 14.06.2012 - 16:20
(5) Транзакции и Попытки нет. Как скриншот в сообщение вставить пока не догоняю.
Гость
7 - 14.06.2012 - 16:22
Процедура КнопкаВыполнитьНажатие(Кнопка)
ПолученныйКодСимвола = Число(КодСимвола("П"));
Если (ПолученныйКодСимвола<48) или (ПолученныйКодСимвола>57) Тогда
//СтрЗаменить(Номер,Символ," ");
Сообщить("Ух тыж! Попадает!");
КонецЕсли;

P.S. Ты стопроцентно уверен, что нет сюрпризов в твоей функции КодСимв ?
Гость
8 - 14.06.2012 - 16:23
Выполни мой индусский код, и сообщи результат
Гость
9 - 14.06.2012 - 16:26
(7) Уверен. Это не моя функция, а системная строковая функция. Возвращает конкретное число, в приведенном примере - 207.
Гость
10 - 14.06.2012 - 16:27
(8) Выполнить не удалось:
ПолученныйКодСимвола = Число(КодСимвола<<?>>("П"));
**(3)**: Функция не обнаружена (КодСимвола)
При проверке модуля обнаружены синтаксические ошибки!
11 - 14.06.2012 - 16:35
6-US1C >Выложи скрин на radikal.ru и дай сюда ссылку
Гость
12 - 14.06.2012 - 16:35
Стоп. У тя 8? Или 7.7?
Гость
13 - 14.06.2012 - 16:37
ОК. Процедура КнопкаВыполнитьНажатие(Кнопка)
ПолученныйКодСимвола = Число(КодСимв("П"));
Если (ПолученныйКодСимвола<48) или (ПолученныйКодСимвола>57) Тогда
//СтрЗаменить(Номер,Символ," ");
Сообщить("Ух тыж! Попадает!");
КонецЕсли;
Гость
14 - 14.06.2012 - 16:45
(11) Загрузил скриншоты 3-х шагов. Первый - перед условием, второй - на проверке условия и третий - на концеЕсли:
http://i035.radikal.ru/1206/9b/e1de5c2b1152.jpg
http://s15.radikal.ru/i188/1206/aa/cfca751c072e.jpg
http://s019.radikal.ru/i607/1206/f7/4deeb10c666c.jpg
Uho
15 - 14.06.2012 - 16:49
14-US1C > галочку там надо было снимать (уменьшать размер до 640)
Гость
16 - 14.06.2012 - 16:53
(13) Да, это работает, собственно как и предыдущий тестовый пример.
Скажу больше, когда я закомментировал метод СтрЗаменить() и добавил Сообщить:

КодСимвола = Число(КодСимв(Символ));
Если (КодСимвола < 48) или (КодСимвола > 57) Тогда
Сообщить("Работает");
//СтрЗаменить(Номер,Символ," ");
КонецЕсли;

у меня условие стало выполняться. Парасятина какая-то.
Гость
17 - 14.06.2012 - 16:56
(15) Исправился:
http://i020.radikal.ru/1206/cf/d8a162d3ef60.jpg
http://s14.radikal.ru/i187/1206/3b/d377fcb4a461.jpg
http://s018.radikal.ru/i527/1206/f6/7605fcd7d7f2.jpg
Uho
18 - 14.06.2012 - 16:58
Чудес не бывает
что и требовалось доказать
ЗЫ. небось обработку то не сохранил перед этим
Uho
19 - 14.06.2012 - 16:58
+1 вот если ты раскомментируешь СтрЗаменить() и условие перестанет выполняться, тогда и поговорим
20 - 14.06.2012 - 17:02
17-US1C >По скриншотам я не вижу, что условие не выполняется.
Исправь одну строчку:
Номер = СтрЗаменить(Номер,Символ," ");
Гость
21 - 14.06.2012 - 17:02
А, все понял. Сам дурак. Я не получал от СтрЗаменить() ничего и условие (даже истинное) проходило мимо. Типа тебе все равно ничего не нужно.
Как только сделал:

КодСимвола = Число(КодСимв(Символ));
Если (КодСимвола < 48) или (КодСимвола > 57) Тогда
Номер = СтрЗаменить(Номер,Символ," ");
КонецЕсли;

все заработало.

Всем спасибо за помощь!!!
Гость
22 - 14.06.2012 - 17:04
Йопрст. Точно же ) Это же функция, а не процедура.
23 - 14.06.2012 - 17:11
Не зря студентов я программировать учил - чужие ошибки вижу по наитию...
24 - 14.06.2012 - 17:44
(0)
Функция ОчиститьНомер(Номер)
RegExp = CreateObject("VBScript.RegExp");
RegExp.Global = -1;
RegExp.Pattern = "[^0-9]";
Возврат Число(RegExp.Replace(Номер, ""));
КонецФункции

и не морочься с Если :))
Гость
25 - 14.06.2012 - 17:50
(24) Чем твоё решение лучше решения, приведённого в топике?


К списку вопросов






Copyright ©, Все права защищены