В PowerScript CHOOSE
утверждение не сравнить «... эквивалентное числовое значение ...», он просто сравнивает объекты, как они (в данном случае строки, без дальнейшей обработки). «9» больше, чем «0», поскольку «999» больше, чем «000» (вы можете попробовать «11» меньше, чем «2»).
Из PowerScript reference manual документации для expressionlist
параметра CASE
вы можете увидеть TO
пункта принимает только значение, преобразование обычно делается из testexpression
типа для expressionlist
типа (ов), а не наоборот. Это означает, что если вы предоставите строки, то это будет сравнивать строки вместо чисел!
Существует не эквивалент CHOOSE
в C# и switch
заявление не может быть использован как то (вы можете его найти, например, в VB.NET для Select заявления). Обходной путь заключается в использовании if
вместо:
string text = ls_char.ToString();
if (text == "_")
ls_char = "-";
else if (text >= "0" && text <= "9")
MessageBox.Show("Digit");
Для сравнения чисел, что вам нужно сделать, это предоставить номера в CASE
блоков:
CHOOSE CASE long(ls_char)
CASE 0 TO 5
MESSAGEBOX("SMALLER")
CASE 6 TO 9
MESSAGEBOX("SMALL")
END CHOOSE
В этом случае ls_char (все, что его тип) преобразуется в число, а затем сравнивается, чтобы проверить, находится ли он в запрошенном диапазоне. Примерно в C# это эквивалентно следующему:
int number = Convert.ToInt32(ls_char);
if (number >= 0 && number <= 5)
MessageBox.Show("Smaller");
else if (number >= 6 && number <= 9)
MessageBox.Show("Small");
Вы можете попробовать регулярное выражение: '[0-9-]' – anubhava
ничего общего с регулярным выражением (по крайней мере, регулярное выражение не имеет ничего общего с PowerBuilder ВЫБЕРИТЕ заявление). –
ls_char предлагает отношение к char, который является типом данных одного символа. Вы уверены, что эта функция предназначена для того, чтобы значение ls_char было больше одного символа? Если это предназначено для одного символа, этот скрипт будет иметь больше смысла. (Подсказка: «1ABC» будет бросать «DIGIT», что не имеет смысла.) – Terry