Я пытаюсь сравнить и проверить номера версий, и я не могу использовать ни один из операторов сравнения, потому что возможные примеры
2.0
3.1a
2.1c
3.11d
Какие-либо предложения?
Я пытаюсь сравнить и проверить номера версий, и я не могу использовать ни один из операторов сравнения, потому что возможные примеры
2.0
3.1a
2.1c
3.11d
Какие-либо предложения?
Вам придется разбить его на части, чтобы сравнить смешанные значения и символы. Предполагая, что в конце у вас будет только один символ, вы можете сравнить LEFT(A1,LEN(A1)-1)
с LEFT(A2,LEN(A2)-1)
чтобы увидеть, сможете ли вы определить победителя еще и, если они совпадают, то проверьте ПРАВИЛЬНОЕ единственное письмо и найдите там победителя.
Например:
=IF(LEFT(A2,LEN(A2)-1) = LEFT(A1,LEN(A1)-1), (RIGHT(A2,1) > RIGHT(A1,1)), (LEFT(A2,LEN(A2)-1) > LEFT(A1,LEN(A1)-1)))
Если бы у вас были 3.1a и 3.11d, простое> сравнение дало бы вам неправильный ответ.
Эта проблема обманчиво сложна. Я изложу некоторые составляющие факторы, чтобы проиллюстрировать, что нужно учитывать. В решении используется вспомогательный столбец, содержащий перевод номера версии, который можно правильно отсортировать или оценить. Изображение ниже для пояснения, фактическое решение в конце.
В столбце А приведен список номеров версий. Обратите внимание, что версии без буквы в конце могут быть интерпретированы как числа. Это не обязательно проблема, если версия не переводится в целое число. Например, версия 2.0 может оказаться просто 2
, и в этом случае решение должно быть более сложным, чтобы обеспечить способ сравнения значений. Это решение начинается с предпосылки, что все обозначения версий хранятся в виде текста.
Номера версий и суб-номера часто заключаются в двузначные числа. Это означает, что компоненты версии не могут быть проанализированы только по позиции символа в строке версии.
Это также означает, что под номера не могут быть отсортированы обычными способами. Этот пример включает в себя версии 3.7 и 3.11. Обычная сортировка сказала бы, что 3.7 - более высокое число, но 3.11 - фактически более новая версия.
И, конечно же, вопрос, который поставил вопрос - версии, заканчивающиеся буквой; как отсортировать смесь цифр и букв.
Решая проблему, я включил в этот пример необходимые компоненты, чтобы было легче следовать. Каждый компонент прост, но объединить их в единую формулу становится трудно.
Десятичное местоположение
Разбор номера версии начинается с того, где находится десятичная дробь. Если может быть только однозначный основной номер версии, это всегда будет позиция 2 в строке версии. Если версия может состоять из двух цифр, эта формула в столбце B сделает это:
=FIND(".",A2)
Часть слева от десятичной
Часть слева от десятичной дроби должна обрабатываться отдельно от части справа. Поскольку версия может содержать букву, мы не можем просто взять целое число. Расположение десятичной точки может быть использовано для отделения целочисленной части (столбец C в примере):
=LEFT(A2,B2-1)
Номер под-версии
Парсинг номера подверсии зависит от того, есть ли буква в конце. Это столбец D, найденный:
=CODE(RIGHT(A2,1))>57
При этом используется код ASCII для оценки последнего символа. Числа оканчиваются на ASCII символ 57, поэтому все, что выше используется в обозначении версии, будет буквой.
Столбец E показывает анализ номера подверсии:
=MID(A2,B2+1,LEN(A2)-B2-D2)
Он занимает середину строки, начиная с символа после десятичной точки, и длину, равную длине всей строки минус часть через десятичную точку, и, возможно, минус символ в конце. Для символа в конце он использует логическое значение (0
или 1
) определения True/False того, заканчивается ли он буквой.
Номер подверсии должен быть выражен в одинаковом количестве мест путем добавления нуля заполнения для однозначных значений. Один из способов сделать это часто - использовать функцию TEXT. Однако, по крайней мере в LO Calc, это не работает должным образом для значения ноль. Итак, формула, использованная в столбце F:
=REPT("0",2-LEN(A2)+B2+D2)&E2
Это создает повторение 0
для числа "пропущенных мест", а затем объединяет номер подверсии с последнего шага.
Конечное письмо
Чтобы отсортировать номер версии, любая буква на конце преобразуется в его код ASCII (нулевое значение заполнителя, ASCII 48, добавляется в качестве заполнителя, если буквы нет. Я использовал это вместо ASCII 00, потому что номер ASCII может состоять из трех цифр, и это должно быть заполнено начальным нулем для двузначных кодов. Как и в случае с номером подверсии, это будет сложно. Формула для заполненного последнего символа в столбце G:
=TEXT(IF(CODE(RIGHT(A2,1))>57,CODE(RIGHT(A2,1)),48),"0##")
В этом случае функцию TEXT можно использовать для добавления нуля заполнения.
Сортируемое значение
Значение сортировки построено из этих компонентов в столбце H:
=VALUE(C2&F2&G2)
Это объединяет три части, а затем преобразует результат в число. Это можно сделать за один шаг, заменив формулы ячеек ссылками на ячейки, что дает вам это в качестве формулы столбца помощника:
=VALUE(LEFT(A2,FIND(".",A2)-1)&REPT("0",2-LEN(A2)+FIND(".",A2)+(CODE(RIGHT(A2,1))>57))&MID(A2,FIND(".",A2)+1,LEN(A2)-FIND(".",A2)-(CODE(RIGHT(A2,1))>57))&TEXT(IF(CODE(RIGHT(A2,1))>57,CODE(RIGHT(A2,1)),48),"0##"))
Решение тогда выглядит так:
Поиск последней версии
Вы можете просто отсортировать по вспомогательному столбцу, и самая высокая версия будет в конце списка. Или вы можете выполнить поиск, чтобы опубликовать результат в ячейке. Формула в Н9:
=INDEX(A2:A7,MATCH(MAX(H2:H7),H2:H7,0))
Это находит максимальное значение в столбце помощника и отображает номер версии для той же строки.
Просто чтобы показать, что это не просто выбор последнего значения, вот пример с исходными данными, плюс версия 3.7, с версией 3.11d, скрытой посередине:
Вы можете решить эту проблему с помощью вспомогательной колонки:
Формула в ячейке C3
и заполните ее.
=LOOKUP(2,1/(COUNTIF(A3:A4,">"&A3:A4)=0),A3:A4)
В ячейке D3
запишите эту формулу и заполните ее.
=IF(C3>A3,"Ver "&C3&" Greater",IF(C3=A3,"Ver "&C3&" Similar","Ver "&C3&" Smaller"))
При необходимости измените ссылки на ячейки в формуле.