![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
case не работает со строками [D7, 2003]
dj kondakov © (2010-04-13 10:26:00)Хотел сделать в своей программе обработчик параметров командной строки, но обнаружилась проблема: Дельфи никак не хочет работать с оператором case, параметры которого типа string. При компиляции кода типа
case ParamStr(1) of
'param1': Action1;
'param2': Action2;
end;
лог компиляции выглядит так:
[Error]Unit1.pas(28): Ordinal type required
[Error]Unit1.pas(29): Incompatible types: 'Integer' and 'String'
[Error]Unit1.pas(30): Incompatible types: 'Integer' and 'String'
[Fatal Error]Project1.dpr(5): Could not compile used unit 'Unit1.pas'
Leonid Troyanovsky (2010-04-14 09:57:00) [1]
> Anatoly Podgoretsky © (14.04.10 08:39) [20]
> oxffff © (14.04.10 09:19) [21]
Дети в подвале играли в гестапо.
Зверски замучан сантехник Потапов.
--
Regards, LVT.
oxffff (2010-04-14 09:19:00) [2]Есть продолжение от меня.
Для поддержки
a:=TForm.create...
case a.classtype of
Tobject: ...
TComponent: ...
TForm: ... 0 then
begin
OrderedList.Sort(UtilStuff);
for pair in Pairs do
if TClass((@Pair.Value)^)=OrderedList.Items[0] then
begin
Pair.Proc();
exit;
end;
endelse
if Assigned(ElseProc) then ElseProc();
OrderedList.free;
end
else
begin
Comparer:=TComparer.Default;
for Pair in Pairs do
if Comparer.Compare(Value,Pair.Value)=0 then
begin
Pair.Proc();
exit;
end;
if Assigned(ElseProc) then ElseProc();
end;
end;
function TUtilStuff.Compare(const Left, Right: TClass): Integer;
begin
if left=Right then result:=0
else
if left.InheritsFrom(Right) then result:=-1
else result:=1;
//
end;
Anatoly Podgoretsky (2010-04-14 08:39:00) [3]> Leonid Troyanovsky (14.04.2010 05:46:19) [19]
Мальчик Василий нашел пулемет
Больше в деревне никто не живет.
Leonid Troyanovsky (2010-04-14 05:46:00) [4]
> Германн © (14.04.10 00:57) [18]
> Некие извращенные решения
Изощренные.
--
Regards, LVT.
Германн (2010-04-14 00:57:00) [5]
> case не работает со строками
Некие извращенные решения приведены в обсуждении по ссылке в [1].
Putnik (2010-04-13 23:41:00) [6]>>case не работает со строками - спасибо, буду знать...)
Anatoly Podgoretsky (2010-04-13 14:59:00) [7]> dj kondakov (13.04.2010 14:51:15) [15]
char можешь и здесь использовать, поскольку это перечислимый тип.
dj kondakov (2010-04-13 14:51:00) [8]Да, скорее всего, Андерсен...
В Паскале case, действительно, не работает со строками... Он работает с char. Именно поэтому я так жестко ошибся, ибо Паскалем занимался последний раз в школе...
Anatoly Podgoretsky (2010-04-13 14:42:00) [9]> dj kondakov (13.04.2010 13:29:10) [10]
Твоя фамилия не Андерсен?
Плохиш (2010-04-13 14:02:00) [10]
> Насколько я помню из Паскаля, case работает с константами
> строкового типа.
no comment
Сергей М. (2010-04-13 13:40:00) [11]> я помню из Паскаля, case работает с константами строкового типа
Это ты, батенька, Паскаль с каким-то васикообразным языком попутал)
12 (2010-04-13 13:38:00) [12]
> помню из Паскаля, case работает с константами строкового
> типа
мда?
dj kondakov (2010-04-13 13:29:00) [13]Не понимаю,почему начались нападки в мою сторону. Насколько я помню из Паскаля, case работает с константами строкового типа. Справедливо полагая, что Дельфи, построенный целиком и полностью на Паскале, унаследовал эту возможность, пишу программу, которая в итоге не хочет компилироваться. Как верно заметили выше, я не стал заглядывать в справку, именно потому, что там "все по-английски", а написал сюда, в надежде на то, что люди поумнее меня уже давно разобрались с этой проблемой. Увидев, что предложенное решение проблемы мне не подходит, решил все сделать самым логичным образом - через кучу if'ов.
Только что все же залез в справку. Фраза "(string types are invalid)" мне все объяснила. Всем спасибо за советы.
Плохиш (2010-04-13 13:05:00) [14]пессимист: Хуже не будет.
оптимист: Будет, будет.
Leonid Troyanovsky (2010-04-13 12:57:00) [15]
> Плохиш © (13.04.10 12:44) [7]
> И всё-равно смайлик ставить не буду.
Смайлик - фигня.
Вот оптимизм и вера в людей - это хорошо.
--
Regards, LVT.
Плохиш (2010-04-13 12:44:00) [16]
> Leonid Troyanovsky © (13.04.10 11:52) [4]
И всё-равно смайлик ставить не буду.
Anatoly Podgoretsky (2010-04-13 12:01:00) [17]Фигня советовать.
12 (2010-04-13 11:57:00) [18]Если кнопкой ты на форму,
Пусть попал, хоть и не сразу,
Знай что ты почти профессор,
Все задачи по плечу.
F1, MSDN'ы, VCL тебе не нужно,
Все равно там не по-русски,
Лучше в форуме спросить.
http://www.podgoretsky.com/OtherParts/DM/BadWill.aspx
Leonid Troyanovsky (2010-04-13 11:52:00) [19]
> Плохиш © (13.04.10 11:38) [3]
IMHO, чтение справки весьма полезно.
--
Regards, LVT.
Плохиш (2010-04-13 11:38:00) [20]
> Amoeba_ (13.04.10 10:54) [2]
> Если бы заглянули в справку
Фигню советуешь, аднака...