Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

case не работает со строками [D7, 2003]


Страницы:   1 2

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]

> Если бы заглянули в справку

Фигню советуешь, аднака...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо