Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Доброго времени суток, у меня вот такой вопрос делал программу чтобы с браузерной игры получить инфу о персонажах, там есть параметр который записывается в переменную Rizalt3 в переменной в конце строки есть буква m или k так вот мне её нужно удалить и параметр умножить на 1000000, весь скрипт нормально работает а вот именно условие и математическое действие рубят всё, весь код перестаёт работать! Я пометил код с которым проблема! Если есть соображения по этому поводу, помогите плиз, уже третий день с этой проблемой маюсь!
Добавлено (29 Октября 2012, 12:36) --------------------------------------------- Простите, я там поставил букву л но в программе у меня правильно стоит k
а вот именно условие и математическое действие рубят всё, весь код перестаёт работать!
Quote (bobpoll)
.........Вот этот код всё рубит!
В таких случаях самое разумное решение - использование отладчика. Ставите перед "рубящим кодом" команду DebugBreakPoint, при тестировании после её срабатывания включаете пошаговый режим, и внимательно смотрите что содержится в переменных после срабатывания каждой строчки кода, а также увидите какие команды выполняются, а какие - нет. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Сложно будет помочь по таким не полным данным. Что еще находится в переменной Rizalt3? Какая ошибка выдается? Если в переменной Rizalt3 есть символы которые не возможно умножить, то соответственно будет ошибка. Не хочешь читать хелп?
ничего сложного в том что вы делаете нет. Ошибки только от невнимательности и отсутствия навыков отладки. Если логика кода в порядке и вы знаете что делаете, то наверняка просто в какой-то переменной в результате парсинга или замены строк получился мусор или не то что вы ожидали вот и все. пользуйтесь дебаггером или просто в критичных участках кода вставляйте AlertBox где выводите содержимое переменных для контроля хода сценария. Как задавать вопросы
.Тут ты ищешь с учетом регистра в строке [Rizalt3] букву m и сохраняешь результат в переменную [001] (не уверен что регистр необходимо использовать, но это твое дело) SearchStr "m" "[Rizalt3]" "[001]" "CaseSensitive"
.Далее если буква m была найдена ты ее удаляешь и сохраняешь в туже переменную. Следом измененную переменную [Rizalt3] ты умножаешь на 1000000 и сохраняешь опять же в [Rizalt3] (пока по логике все нормально) If "[001]" ">" "0" StrReplace "[Rizalt3]" "m" "" "[Rizalt3]" "" Math "[Rizalt3]*1000000" "-1" "[Rizalt3]" Else EndIf
.Тепереча ты ищешь в вероятно измененной на первом этапе переменной [Rizalt3] букву л и повторяешь сходные этапы только умножаешь на 1000. (Вот тут и начинается не стыковка логики) SearchStr "л" "[Rizalt3]" "[002]" "CaseSensitive" If "[002]" ">" "0" StrReplace "[Rizalt3]" "k" "" "[Rizalt3]" "" Math "[Rizalt3]*1000" "-1" "[Rizalt3]" Else EndIf
1. не стыковка: Ты ищешь букву л а удаляешь букву k (вероятно просто ошибка невнимательности) 2. не стыковка: На первом этапе в строке [Rizalt3] ты искал букву m удалял ее и умножал результат на 1000000,а на втором этапе ты в этой же строке уже ищешь букву k. Так как содержание переменной [Rizalt3] берется с сайта, то в теории парсинг может вернуть не только искомые значения 245k или 5m но и хрень типа 545komos. И тут может возникнуть касяк с [Rizalt3]. То есть функция Math "[Rizalt3]*1000000" "-1" "[Rizalt3]" может не сработать так как получает вид Math 545koos*1000000" "-1" "[Rizalt3]". А строковое значение нельзя ни на что помножить. Мне кажется проблемный код необходимо исправить до вот такого вида:
Совершенно очевидно, что со строковыми значениями нельзя выполнять математические операции.
Да, второй вариант решения "проблемы" предпочтительнее, но и он не дает гарантии работоспособности "задумки", т.к. в нем не отображено то, что должно случиться если переменная не окажется целочисленной или дробной.
bobpoll, , все это вы и сами (без посторонней помощи) могли прекрасно выяснить, если бы воспользовались отладчиком.
Quote (anton)
используя плагин hpwControl
Кстати, забыл сказать: функцию типа IsNumeric можно легко написАть и в самой NB. Образно говоря, пара строк кода (всего три необушные команды), и без всяких плагинов!
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Сам с собой как Сергей Юрьевич Беляков из Таганрога, только он с телеком а я с собой
Quote (Peter)
И для чего вы нам процитировали всю эту беседу?
Да на работе, просто жесть как скучно утром, вот и чирканул поэмку в стиле Толстого
Quote (Peter)
Да, второй вариант решения "проблемы" предпочтительнее, но и он не дает гарантии работоспособности "задумки", т.к. в нем не отображено то, что должно случиться если переменная не окажется целочисленной или дробной.
Согласен полностью, просто по его коду не совсем понятно, что должно стать с переменной если она не примет числовое значение. Может ей присвоить значение "0" или "Не удалось получить данные", это уже как автору захочется...
Quote (Peter)
функцию типа IsNumeric можно легко написАть и в самой NB.
Ну да... Хотя честно пока не въехал как??? (разве что через [LastError] но это не 3 строчки...):
А еще можно всетаки воспользоваться плагином и спецсимовлами %s, %d, %u, %f, %с... "Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
Сообщение отредактировано anton - Ср, 31 Октября 2012, 19:37
Хотя честно пока не въехал как??? (разве что через [LastError] но это не 3 строчки...):
Подсказка: команда Math в случае ошибки выдает в результат слово "Error". Дальнейшее - дело техники....
Quote (anton)
А еще можно всетаки воспользоваться плагином
Мое убеждение - плагинами надо пользоваться только тогда, когда без них никак!
Впрочем, каждый волен сам поступать так, как ему удобнее. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Стратегически: Math "ля-ля-ля три рубля/1" "0" "[Result]" If "Result" "=" "Error" значит НЕ Numeriс
P.S. Если не нравится "разделить", то можно и "умножить".
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться