Author Topic: INC($var,1) ругается на $var, если оно из INIREAD()  (Read 5667 times)

0 Members and 1 Guest are viewing this topic.

alexenin

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
config.ini:
Code: [Select]
[default]
param1=1
Если написать
Code: (clickermann) [Select]
$var = INIREAD("config.ini", "param1")
INC($var)
то выдаст ошибку, т.к. $var вернулось не числом, а строкой

Пока решение
Code: (clickermann) [Select]
$var = INIREAD("config.ini", "param1") + 0, но на это будут натыкаться.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Правильное решение использовать INT
Code: (clickermann) [Select]
$var = INT(INIREAD("config.ini", "param1"))
INC($var)

alexenin

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
В параметре пришло число, а не строка, и при вызове INC($var) не должно происходить ошибки, это было ключевым моментом.
А вы опять предлагаете как обходить ошибку, так не правильно относится к сообщениям.

П.С. $var = INT(INIREAD("config.ini", "param1")) нельзя использовать, т.к. бывают не только целые числа.
« Last Edit: March 10, 2016, 02:44:56 AM by alexenin »

Кликермен

  • Активный участник
  • ***
  • Posts: 112
    • View Profile
Quote
т.к. бывают не только целые числа.
то есть бывают дроби? или текст?  добавь проверку на текст/дробь.

Людеи обзывать некрасиво!  программа не рассчитана для продвинутых - принимает любые типы данных, здесь нет строгого разграничения -текст, числовые, с плавающеи точкои..и дальнеишие конвертацции

alexenin

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
да 1.5 это не целое число, при этом нельзя применять функцию INT
в программировании оно считается действительным, а в математике дробным.

....
« Last Edit: March 10, 2016, 10:13:15 AM by Vint »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Зачем сразу говорить что это ошибка? Все функции работающие с файлами в кликере возвращают строки.  Так задумано изначально.
И INIREAD и TFREAD и даже в начале TFREADARR так делал (потом его специально изменили).
Читаем строки, т.к. в текстовом файле - всё строки. И неизвестно нужно переводить тебе в число или нет. Если делать автоматическое определение, как быть тем кому это не нужно?
Знаешь какая беда когда начинают вычисляться строки вида "2012 - 2016" или "4/5"... и главное потом ничего уже не поправить ROUND, INT или  + 0.


alexenin

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
я говорил про ошибку в INC(), эта функция может ведь включить проверку?

alexenin

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
Знаешь какая беда когда начинают вычисляться строки вида "2012 - 2016" или "4/5"... и главное потом ничего уже не поправить ROUND, INT или  + 0.
Речь шла про числа, а то что вы написали называется выражением. Хотите еще дальше увести тему от сути?

Кликермен

  • Активный участник
  • ***
  • Posts: 112
    • View Profile
if (int($chislo)!$chislo)
//сюда впиши поиск позиции точки, затем через strconcat собери число дробное свое
else
(int($chislo)
end_if

Кликермен

  • Активный участник
  • ***
  • Posts: 112
    • View Profile
я говорил про ошибку в INC(), эта функция может ведь включить проверку?
эта функция просто уменьшает/увеличивает переменную на заданныи шаг. все! больше она ничего не проверяет, не считает )

alexenin

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
Re: INC($var,1) ругается на $var, если оно из INIREAD()
« Reply #10 on: March 10, 2016, 11:33:09 AM »
Кликермен, вы пишите не в тему.

alexenin

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
Re: INC($var,1) ругается на $var, если оно из INIREAD()
« Reply #11 on: March 10, 2016, 11:43:23 AM »
Хорошо, еще раз начнем
config.ini:
Code: [Select]
[default]
param1=1
Если написать
Code: (clickermann) [Select]
$var = INC(INIREAD("config.ini", "param1"))выдаст ошибку, а ее не должно быть

Так вроде короче и нагляднее.
« Last Edit: March 10, 2016, 11:45:09 AM by alexenin »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: INC($var,1) ругается на $var, если оно из INIREAD()
« Reply #12 on: March 10, 2016, 01:01:48 PM »
я говорил про ошибку в INC(), эта функция может ведь включить проверку?

Может, но не хочет. Как и при использовании сразу в параметрах цикла FOR
Code: (clickermann) [Select]
$var = INIREAD("config.ini", "param1")
FOR($i=0, $i < $var)
LOGWRITE ($i)
END_CYC

Может ещё где. Пусть INC занимается увеличением значения переменной. Мухи отдельно, котлеты отдельно.
Из-за чего весь сыр-бор? Я вот INC не очень люблю, использую редко и там где точно знаю что к чему.
Не проще ли наращивать простым сложением
Code: (clickermann) [Select]
$var = INIREAD("config.ini", "param1")
$var = $var + 1

Сразу "стоп". Я не говорю что ошибки не нужно исправлять. Нужно. Надеюсь, ты не думаешь, что проблема с числа-строки только в INC? Там их вагон и тележка. И уж перевести строку в число при чтении из файла не самое худшее на что ты можешь натолкнуться. Тут хотя бы есть решения.
От автора зависят все исправления.


alexenin

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
Re: INC($var,1) ругается на $var, если оно из INIREAD()
« Reply #13 on: March 10, 2016, 03:11:33 PM »
Могу сказать только, спасибо, что услышали.

Дело как раз в новичках, которые будут на этом спотыкаться, опытные поймут и обойдут.
Я посчитал это багом, т.к. в программу заложена всеядность к значению переменной, для облегчения программирования.
« Last Edit: March 10, 2016, 03:15:41 PM by alexenin »