Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Можно спросить? А в чём смысл сравнивать стринги? Не трусы. Символ "-" (что есть код 45) наверняка попадает между Chr(14) и Chr(31) (вообще, непонятно что за символы).
Проблема и со знаком '-' , он же CHR(45) и "неотображаемыми" знаками ASCII таблицы (в частности CHR(9))
во первых, неоднократно замечал, что если ключ описан по текстовому полю (Name STRING(60)),
делаю
CLEAR(name) ! очистка пробелом , т.е. CHR(32)
SET(By_name,by_name)
LOOP
NEXT()
...
end
и есть запись начинающаяся на '-', она в цикл чтения не попадает , необходимо делать CLEAR(name,-1)
В Вашем коде CHR(45) попадает в диапазон OF CHR(1) TO CHR(9). (так же он попадет в диапазон OF CHR(8) TO CHR(9) )
Почему - х.з. Причем проблема только с CHR(45)
Если Ваш код, слегка модифицировать, все будет работать как часы:
Case Chr(45)
Of Chr(1) To Chr(8) OROf Chr(9) OROf Chr(11) To Chr(12) OROf Chr(14) To Chr(31)
Message('ПОЧЕМУ Я ЗДЕСЬ ?')
else
Message('ELSE')
end
Alex_G писал(а): ↑12 Сентябрь 2019, 14:30Почему - х.з. Причем проблема только с CHR(45)
Вот и я ХЗ.
Проблему-то я откостылил, переключив CASE на сравнение цифр кодов через VAL().
И хотя получил за это электрогроши и даже выпил пыва за успех - осадок-то остался.
Нерешённая проблема может где-то ещё вылезти. А время и место - то самое ХЗ ...
Chr(45) - знак минуса. Может быть, компилер его числом считает.
Недавно очередной раз напоролся на старый глюк - команда Message( '<b>Привет') - ничего не выводит...
Губин Игорь писал(а): ↑12 Сентябрь 2019, 16:56И, соответственно, на каждом компьютере может быть своё.
Я бы согласился с Вами, если бы речь шла о русских символах.
Но тут даже не латинская часть ASCII таблицы, а самое её начало, которая везде одинакова ...
Игорь Столяров писал(а): ↑12 Сентябрь 2019, 19:02
Но тут даже не латинская часть ASCII таблицы, а самое её начало, которая везде одинакова ...
Если в каком-то месте возможно допустить ошибку, то она будет там допущена. Потому и лучше не давать ни малейшего шанса. Тем более, что в обработке сортировок символов у велосипедистов глюков вагон и маленькая тележка. Достаточно попробовать отсортировать очередь по строковому полю со смешанными символами верхнего и нижнего регистра (ЛАТИНСКИМИ).
Это я только кажусь дураком! На самом деле я полный идиот!
Я так смутно догадываюсь, что клюки с CASE как-то связаны с неявным преобразованием типов данных.
Что-то из той же оперы, что и Choose(УСЛОВИЕ,REAL,STRING) = ХЗ. А транслятору - такое пофиг, всё хорошо.
Губин Игорь писал(а): ↑12 Сентябрь 2019, 16:54
Сравнивать в подобной ситуации всегда надо именно VAL, т.к. порядок сортировки символов есть штука изменяемая.
Yufil писал(а): ↑12 Сентябрь 2019, 22:24Никогда не пользовал OF...TO
Вот и я, пожалуй, теперь тоже не буду юзать эту комбинацию …
Просто фильтрации символов через CASE ничего военного не предвещала, практически пример из справки.
А оно вон как повернулось. То ли зависимость от локализации, то ли вообще непонятно что.
И что обидно - почему-то переклинило её именно на дефисе (код 45), остальное ведь всё работает ...