Проверка Различное значение “Ничто”

Хотя у меня нет решения для добавления поддержки чисел в диапазоне 10 duodecillion +, я хотел бы отметить, что при использовании динамического отображения отправляемая строка цифр сохраняется как text [117 ] и keyword тип данных. Таким образом, если вы хотите выполнить сортировку или фильтрацию, вы можете работать с полем keyword.

Например:

PUT random_big

POST random_big/_doc
{
  "num": "10000000000000000000000000000000000000000"
}
POST random_big/_doc
{
  "num": "10000000000000000000000000000000000000001"
}
POST random_big/_doc
{
  "num": "10000000000000000001000000000000000000000"
}

Проверка отображения (GET random_big/_mapping) показывает:

{
  "random_big" : {
    "mappings" : {
      "_doc" : {
        "properties" : {
          "num" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
        }
      }
    }
  }
}

И сортировка может быть выполнена следующим образом:

GET random_big/_search
{
  "sort": [
    {
      "num.keyword": {
        "order": "asc"
      }
    }
  ]
}
6
задан onnodb 23 February 2009 в 15:02
поделиться

3 ответа

VarIsClear функция включает Вашу ситуацию, где тип varDispatch и значение nil. Это также включает пустые и "неизвестные" значения и пользовательские различные типы. Я вижу его в своем источнике Delphi 2005; я не знаю, насколько ранее это было включено.

9
ответ дан 8 December 2019 в 16:10
поделиться

Любопытно, VBA's Nothing не то же как Unassigned, Null или Empty, таким образом, Вы не можете использовать, например:

// Worksheet is a TExcelWorksheet or OleVariant coupled to an open worksheet
MyRange := Worksheet.Range['MyRangeInTheWorksheet', EmptyParam]
if (MyRange = Null) then  // won't work!
  MsgBox('The range doesn''t exist!');

Вместо этого используйте эту функцию:

function VarIsNothing(V: OleVariant): Boolean;
begin
  Result :=
    (TVarData(V).VType = varDispatch)
    and
    (TVarData(V).VDispatch = nil);
end;

// ...

if (VarIsNothing(MyRange)) then

Обновление

По-видимому, источники единицы RTL Variants.pas изменились между Delphi 5 и 2007. Согласно @mghie (см. комментарии), функция VarIsEmpty сделал бы задание в D5. Однако в D2007, это, кажется, больше не имеет место, таким образом, Вам, вероятно, будет нужна вышеупомянутая функция снова.

Кроме того, обратите внимание что VBA's Nothing вероятно, настоящий особый случай; я не думаю, что каждый встречается с ним слишком часто с автоматизацией.

4
ответ дан 8 December 2019 в 16:10
поделиться

VarIsEmpty (отличающийся, чем VarIsNull) не делают то, что Вы хотите?

2
ответ дан 8 December 2019 в 16:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: