BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Операция сравнения строк.
 
Долго я не понимал почему у меня не работает код...
Наткнулся на это:
Код
if("M01"!="M0")
 SayAndWait()
endif

Строки в примере неравны, однако условие не срабатывает.
А вот так работает:
Код
if(.NOT.("M01"=="M0"))
 SayAndWait()
endif

Сравнение {{M латиница}+{нуль}+ {один}} и {{M латиница}+{нуль}}
 
Добрый день.

Особенность функционирования системы. Есть точное сравнение (==) и простое сравнение (=).
Вот описание для "простого сравнения". Соответственно, "не равно" представляет собой инверсию этих условий.

■ Символьный. Сравнение базируется на внутреннем представлении -
ASCII кодах. ASCII коды для алфавитных символов возрастают
(например, код для "A" - 65, а код для "Z" - 90). Когда командой
SET EXACT установлен режим OFF, то правила для сравнения двух
строк <выражение1> и <выражение2> следующие:

 Если <выражение2> - пустая строка, то возвращается значение
"истина" (.T.)

 Если LEN( <выражение2> ) больше, чем LEN( <выражение1> ), то
возвращается значение "ложь" (.F.)

 Иначе, сравниваются все символы в <выражение2> с <выражение1>.
Если все символы в <выражение2> равны <выражение1>, то
возвращается значение "истина" (.T.), в противном случае -
возвращается значение "ложь" (.F.).

Когда SET EXACT ON, то, за исключением конечных пробелов,
сравниваемые строки должны точно совпадать.
С уважением, Новиков Алексей.
 
Операторы сравнения

Все операторы сравнения - это бинарные операторы, которые сравнивают значения операндов друг с другом. В результате сравнения, если есть соответствие условию, операторы всегда приводят к логическому значению .T. (истина). Если условие не выполнено, то значение будет .F. (ложь).

Доступные в Xbase++ операторы сравнения:
Оператор
==
проверка точного равенства
проверка идентичности ссылок

= проверка равенства *)проверка идентичности ссылок

<> # !=
проверка на неравенство *)

$
подстрока в пределах символьной строки

! *) Сравнение символьных строк зависит от настроечных команд SET EXACT, SET COLLATION и SET LEXICAL.
Необходимо обратить Внимание на существование двух различных оператора равенства: простого "=" и точного "==".
Простой оператор равенства не может проверять все типы данных на равенство. Также, сравнение символьных строк, использующих этот оператор, зависит от установленных параметров настроечных команд SET EXACT ON|OFF и SET COLLATION. SET EXACT уточняет, рассматриваются ли пробелы в конце строк символов.
Оператор "==" может сравнивать значения любого типа данных. Переменные типов данных массива (A), блока кода (B) и объекта (O) проверяются, чтобы определить, ссылаются ли они на те же значения. Сравнивая символьные строки, оператор точного равенства возвращает значение .T. (истина), когда все символы обеих строк идентичны (бинарное сравнение). Когда сравниваются две переменные типа данных A, B или O, сравнение также приводит к истине только, когда обе переменных ссылаются на один и тот же массив, блок кода или объект.



Обычно оба операнда при сравнении должны иметь одинаковый тип данных. Однако, операторы равенства могут сравнивать все типы данных с NIL. Сравнение с NIL возвращает значение .T. (истина) только, когда значение обоих операндов равно NIL.
Оператор $ проверяет, содержится ли подстрока (левый операнд) в указанной символьной строке (правый операнд) (см. разделы для индивидуальных типов данных при обсуждении главы "Операции и операторы для простых типов данных").
"James" $ "James Bond's BMW" // результат: .T.
"james" $ "James Bond's BMW" // результат: .F.
"Bond's" $ "James Bond's BMW" // результат: .T.
"Bond s" $ "James Bond's BMW" // результат: .F.
Код
// The example shows results of the = operator.

   PROCEDURE Main

      SET EXACT ON
      ? "ABC"   = "ABC  "              // result: .T.
      ? "ABC  " = "ABC"                // result: .T.
      ? ""      = "ABC"                // result: .F.
      ? "ABC"   = ""                   // result: .F.
      ? "ABC"   = "ABCDE"              // result: .F.
      ? "ABCDE" = "ABC"                // result: .F.

      SET EXACT OFF
      ? "ABC"   = "ABC  "              // result: .F.
      ? "ABC  " = "ABC"                // result: .T.
      ? ""      = "ABC"                // result: .F.
      ? "ABC"   = ""                   // result: .T.
      ? "ABC"   = "ABCDE"              // result: .F.
      ? "ABCDE" = "ABC"                // result: .T.

      ? CToD("12/28/2005") = CToD("12/31/2005")
                                       // result: .F.
      ? .T. = .F.                      // result: .F.

      ? NIL = NIL                      // result: .T.

      ? 2 = 1                          // result: .F.
   RETURN

// The example demonstrates resultsof the exact equal operator.

   PROCEDURE Main

      ? "ABC" == "ABC"                 // result: .T.
      ? "ABC" == "XYZ"                 // result: .F.
      ? "ABC" == "ABC  "               // result: .F.

      aArray1 := {1, 2, 3}             // Create array reference
      aArray2 := {1, 2, 3}             // Create new array reference
      aArray3 := aArray1               // Assign array reference

      ? aArray1 == aArray2             // result: .F.
      ? aArray1 == aArray3             // result: .T.
      ? aArray2 == aArray3             // result: .F.

   RETURN
Изменено: itman - 08.09.2008 15:05:06
С уважением,
Ильин Евгений
 
Спасибо за ликбез!!!
Из всего этого извлек, что != - это отрицание простого сравнения! И как я понял после
Код
 SET EXACT OFF 

Простое сравнение становиться строгим.
 
не совсем так,
SET EXACT OFF сравнивает символы левой стороны по длине правой символьной строки . SET EXACT ON сравнивает символы правой стороны по длине левой символьной строки , а возможные символы пробела в конце не принимаются во Внимание. Если выражение справа содержит пустую строку (" "), оператор "не равно" возвратит значение .F.(ложь) при SET EXACT OFF, .T. (истина) с SET EXACT ON.
С уважением,
Ильин Евгений
Страницы: 1
Читают тему (гостей: 1)