Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2008, 21:11   #1
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
Вопрос Case из STRING. HELP!

Привет всем!
У меня вопрос.
Как мне из срок нужную выбрать?
Case.....of не помогает!

Подскажите пожалуйста!
Altera вне форума Ответить с цитированием
Старый 22.02.2008, 21:29   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Вопрос непонятен.
Давай кусок кода...
_SERGEYX_ вне форума Ответить с цитированием
Старый 22.02.2008, 21:36   #3
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Вопрос понятен. Через case нельзя в силу реализации. Через if.
Код:
if str = 'AAAAA' then begin (*......*) end
else if str = 'BBBBBB' then begin (*......*) end
else if str = 'CCCCC' then begin (*......*) end
else if str = 'DDDDD' then begin (*......*) end
else if str = 'EEEEEE' then begin (*......*) end
..........................
Разумеется, существуют варианты оптимизации, скажем через хэш-таблицы для серьёзных случаев.
B_N вне форума Ответить с цитированием
Старый 22.02.2008, 21:43   #4
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Нука примерчик...
Ато с if...then неудобно как-то
Altera вне форума Ответить с цитированием
Старый 23.02.2008, 09:31   #5
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Altera Посмотреть сообщение
Ато с if...then неудобно как-то
а по-другому нельзя
rpy3uH вне форума Ответить с цитированием
Старый 23.02.2008, 12:07   #6
andrey4623
Форумчанин
 
Аватар для andrey4623
 
Регистрация: 31.05.2007
Сообщений: 266
По умолчанию

написать маленькую функцию и в нее передавать строку
andrey4623 вне форума Ответить с цитированием
Старый 23.02.2008, 14:47   #7
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Лампочка Кто сказал что нельзя :)

Код:
{Аналог case для строки 
--------------------------------------------------------------------------------}
{Вот способ, легко приспосабливаемый для загрузки списка из строки, файла или ресурса: }


const
  vlist = 'первый, второй, третий';

var
  Values: TStringList;

procedure SetValues(VL : TStringList; S: String);
var
  I : Integer;
begin
  VL.CommaText := S;
  for I := 0 to CL.Count-1 do
    VL.Objects[I] := Pointer(I);
  VL.Sorted := True;
end;

function GetValueIndex(VL : TStringList; Match: String): Integer;
begin
  Result := VL.IndexOf(Match);
  if Result >= 0 then
    Result := Integer(VL.Objects[Result]);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  case GetValueIndex(Values, Edit1.Text) of
    -1: {не найден} ;
     0: Caption := '0';
     1: Caption := '1';
     2: Caption := '2';
  end;
end;

initialization
  VL := TStringList.Create;
  SetValues(VL, vlist);

finalization
  VL.Free;
_______________________________________________________________
Delphi World ...
Alter вне форума Ответить с цитированием
Старый 23.02.2008, 17:33   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
У меня вопрос.
Как мне из срок нужную выбрать?
А что значит нужную?
puporev вне форума Ответить с цитированием
Старый 24.02.2008, 06:50   #9
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Цитата:
А что значит нужную?
Как что значит?
Нужно ну! Ведь как вводятся коды в игре, нпр. в Каунтер страйке?
--------------------------------
Допустим у меня строка ввода text_input: tEdit.
При вводе строки и нажатии кнопки done_button: tSpeedButton прога должна найти оприделить что я ввёл, т.е. и выполнить действие.

Тут бы подошол
Код:
case text_input of
'exit': close;
'max': formState := fsMaxsimized'
//и т.д.
end;
Жалко, что так нельза... Но Alter хорошо придумал. Спасибо Alter-у

Последний раз редактировалось Altera; 24.02.2008 в 07:06.
Altera вне форума Ответить с цитированием
Старый 24.02.2008, 10:54   #10
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Не вижу, если честно, ничего хорошего в методе Alter'а. Вместо нескольких операторов if объявлять классовую переменную, несколько функций, удваивать, как минимум, объем памяти под строки и в конечном счёте получить те же if'ы внутри "VL.IndexOf(Match)". И какая разница между несколькими if-elseif-elseif-else и case, кроме "косметической"? А если строк очень много, я уже говорил, лучше смотреть в сторону хеш-таблиц и подбирать подходящую хэш-функцию.
B_N вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как в другом месте программы вызвать case 0? student_) Общие вопросы по Java, Java SE, Kotlin 9 11.10.2008 13:55
ошибка в операторе case wowka Помощь студентам 5 24.07.2008 11:47
Задача на case klop.92 Помощь студентам 4 28.04.2008 21:17
Аналог паскалевского case MusicMan Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 21.04.2008 22:10
Конструкция case of работает некорректно! Как исправить? SkAndrew Общие вопросы Delphi 6 06.04.2008 00:21