Top-office11.ru

IT и мир ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Switch case delphi

Delphi. Немного об использовании string в CASE

Автор: V.Krass. Опубликовано в Программирование 16 Январь 2017 . просмотров: 8256

Каждый разработчик для улучшения понимания кода программы, пытается повысить её читабельность. Один из вариантов это сделать — использовать оператор case при тестировании значения переменной. Но, к сожалению, в Delphi этот оператор умеет работать не со всеми типами переменных. Например, он не будет работать со строками. А что делать, если всё-таки нужно проверять переменную типа string оператором case? Давайте рассмотрим один из вариантов, как это можно сделать.

Тема сама по себе старая и известная, но, почему-то, она поднимается вновь и вновь. Кажется, достаточно открыть документацию к Delphi и увидеть, что там написано английским по «белому»:

Case Statements

The case statement may provide a readable alternative to deeply nested if conditionals. A case statement has the form:

case selectorExpression of
caseList1: statement1;
.
caseListn: statementn;
end

where selectorExpression is any expression of an ordinal type smaller than 32 bits (string types and ordinals larger than 32 bits are invalid)

И всё становится ясным: string types are invalid ! Ну, нельзя сделать CASE по string! И всё.

Если припомнить, что основная задача оператора CASE — повышение читабельности кода программы. Что собственно и подтверждено в процитированном выше фрагменте HELP’а The case statement may provide a readable alternative to deeply nested if conditionals . И посмотреть на вопрос об использовании string в CASE уже с этой точки зрения, то возникает совсем другое дизайнерское решение!

И так, предположим, переменная типа string, которую хочется использовать в CASE, может принимать значения: ‘english’, ‘deutsch’, ‘русский’ или ‘français’.

Читать еще:  Css отступ первой строки абзаца

А раз, все строковые значения переменной можно перечислить, то почему бы не воспользоваться перечислимым типом для этого, ведь с перечислимым типом оператор CASE работает прекрасно:

И смотрится оператор CASE в таком случае почти как «по string»:

Остаётся лишь научиться находить элемент перечислимого типа, который по написанию совпадает со значением строковой переменной — фактически выполнить преобразование строки в элемент перечислимого типа, если такой, конечно, существует. Необходимый инструмент для этого находятся в unit TypInfo, а общая схема действий вырисовывается примерно следующая:

Ну и «на десерт» остаётся добавить фрагмент работающего кода:

А все остальные нюансы и «специи» добавляются по вкусу.

Как использовать case с типом string

Возник такой вопрос, как использовать case с типом string.
Есть поле, в него вводят цвет на англ.яз, а выводит на англ.яз.

Ошибка такая incompatible types: ‘integer» and «string»

Что делать? Спасибо

Delphi
22.08.2014, 13:02

Как использовать вещественное число в операторе case?
как мне написать дробное число в case. У меня есть: var a:integer; procedure.

Работа с типом данных String
здравствуйте,помогите пожалуйста с задачей,не могу понять с чего начать требуется написать.

Перевод значения переменной с типом string в time
Есть переменая dtime с типом string в этой переменной указано время dtime:= ‘0:22:45’; .

Переход на новую строку, Работа с типом string
Доброго времени суток Господа ! Пожалуйста подскажите , как осуществить переход на новую строку.

22.08.2014, 13:172

только вот так можно

или использовать конструкцию if .. then. else

Добавлено через 1 минуту
или есть еще один вариант

Delphi
Delphi
22.08.2014, 15:39 [ТС]3

А strindex во втором — это правильно?

Добавлено через 5 минут
Просто пишет, что необьявлен перемен

22.08.2014, 15:464

ой эт из Jcl либы..
вот так делай

function StringToCaseSelect
(Selector : string;
CaseList: array of string): Integer;
var cnt: integer;
begin
Result:=-1;
for cnt:=0 to Length(CaseList)-1 do
begin
if CompareText(Selector, CaseList[cnt]) = 0 then
begin
Result:=cnt;
Break;
end;
end;
end;

case StringToCaseSelect(‘Delphi’,
[‘About’,’Borland’,’Delphi’]) of
0:ShowMessage(‘You»ve picked About’) ;
1:ShowMessage(‘You»ve picked Borland’) ;
2:ShowMessage(‘You»ve picked Delphi’) ;
end;
>

23.08.2014, 02:395
23.08.2014, 15:52 Как использовать case с типом string

Меню пользователя @ droider
23.08.2014, 15:52
23.08.2014, 15:52

case and string
как можно использоваться case в string значениях допустим 1: edit1.text:= ‘январь’; а мне надо.

Использовать оператор CASE для вывода названия дня недели!
Помогите написать правильный код. всё что есть здесь и на других сайтах не правильно.

Как работать с типом string в цикле на С++
Доброго времени суток, и с Наступающим всех! Вопрос в том, как реализовать 21-ую строку, чтобы.

Ссылка на основную публикацию
Adblock
detector