Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

case не работает со строками   Найти похожие ветки 

 
dj kondakov   (2010-04-13 10:26) [0]

Хотел сделать в своей программе обработчик параметров командной строки, но обнаружилась проблема: Дельфи никак не хочет работать с оператором 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"


 
Демо ©   (2010-04-13 10:51) [1]

http://www.delphimaster.ru/cgi-bin/forum.pl?n=18&search=case+of


 
Amoeba_   (2010-04-13 10:54) [2]


> Дельфи никак не хочет работать с оператором case, параметры
> которого типа string.

Если бы заглянули в справку, то сразу было стало ясно, что так и должно быть.


 
Плохиш ©   (2010-04-13 11:38) [3]


> Amoeba_   (13.04.10 10:54) [2]

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

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


 
Leonid Troyanovsky ©   (2010-04-13 11:52) [4]


> Плохиш ©   (13.04.10 11:38) [3]

IMHO, чтение справки весьма полезно.

--
Regards, LVT.


 
12 ©   (2010-04-13 11:57) [5]

Если кнопкой ты на форму,
Пусть попал, хоть и не сразу,
Знай что ты почти профессор,
Все задачи по плечу.
F1, MSDN"ы, VCL тебе не нужно,
Все равно там не по-русски,
Лучше в форуме спросить.
http://www.podgoretsky.com/OtherParts/DM/BadWill.aspx


 
Anatoly Podgoretsky ©   (2010-04-13 12:01) [6]

Фигня советовать.


 
Плохиш ©   (2010-04-13 12:44) [7]


> Leonid Troyanovsky ©   (13.04.10 11:52) [4]

И всё-равно смайлик ставить не буду.


 
Leonid Troyanovsky ©   (2010-04-13 12:57) [8]


> Плохиш ©   (13.04.10 12:44) [7]

> И всё-равно смайлик ставить не буду.

Смайлик - фигня.
Вот оптимизм и вера в людей - это хорошо.

--
Regards, LVT.


 
Плохиш ©   (2010-04-13 13:05) [9]

пессимист: Хуже не будет.
оптимист: Будет, будет.


 
dj kondakov   (2010-04-13 13:29) [10]

Не понимаю,почему начались нападки в мою сторону. Насколько я помню из Паскаля, case работает с константами строкового типа. Справедливо полагая, что Дельфи, построенный целиком и полностью на Паскале, унаследовал эту возможность, пишу программу, которая в итоге не хочет компилироваться. Как верно заметили выше, я не стал заглядывать в справку, именно потому, что там "все по-английски", а написал сюда, в надежде на то, что люди поумнее меня уже давно разобрались с этой проблемой. Увидев, что предложенное решение проблемы мне не подходит, решил все сделать самым логичным образом - через кучу if"ов.
Только что все же залез в справку. Фраза "(string types are invalid)" мне все объяснила. Всем спасибо за советы.


 
12 ©   (2010-04-13 13:38) [11]


> помню из Паскаля, case работает с константами строкового
> типа

мда?


 
Сергей М. ©   (2010-04-13 13:40) [12]

> я помню из Паскаля, case работает с константами строкового типа

Это ты, батенька, Паскаль с каким-то васикообразным языком попутал)


 
Плохиш ©   (2010-04-13 14:02) [13]


> Насколько я помню из Паскаля, case работает с константами
> строкового типа.

no comment


 
Anatoly Podgoretsky ©   (2010-04-13 14:42) [14]

> dj kondakov  (13.04.2010 13:29:10)  [10]

Твоя фамилия не Андерсен?


 
dj kondakov   (2010-04-13 14:51) [15]

Да, скорее всего, Андерсен...
В Паскале case, действительно, не работает со строками... Он работает с char. Именно поэтому я так жестко ошибся, ибо Паскалем занимался последний раз в школе...


 
Anatoly Podgoretsky ©   (2010-04-13 14:59) [16]

> dj kondakov  (13.04.2010 14:51:15)  [15]

char можешь и здесь использовать, поскольку это перечислимый тип.


 
Putnik ©   (2010-04-13 23:41) [17]

>>case не работает со строками - спасибо, буду знать...)


 
Германн ©   (2010-04-14 00:57) [18]


> case не работает со строками

Некие извращенные решения приведены в обсуждении по ссылке в [1].


 
Leonid Troyanovsky ©   (2010-04-14 05:46) [19]


> Германн ©   (14.04.10 00:57) [18]

> Некие извращенные решения

Изощренные.

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2010-04-14 08:39) [20]

> Leonid Troyanovsky  (14.04.2010 05:46:19)  [19]

Мальчик Василий нашел пулемет
Больше в деревне никто не живет.


 
oxffff ©   (2010-04-14 09:19) [21]

Есть продолжение от меня.

Для поддержки

a:=TForm.create...

case a.classtype of
Tobject: ...
TComponent: ...
TForm: ... <-Valid option
TCustomForm: ..
end;

https://forums.codegear.com/thread.jspa?threadID=35447&tstart=15

TPAIRTYPE<T>=record
Value:T;
Proc:TProc;
end;

class procedure CaseAnyTypeClassSupport<T>.MyCase(const Value:T;const Pairs:array of TPAIRTYPE<T>;ElseProc:TProc=nil);
var Pair:TPAIRTYPE<T>;
Comparer:IComparer<T>;
TypeInfo:PTypeInfo;
Selector:TClass;
OrderedList:TList<TClass>;
begin
TypeInfo:=GetTypeInfo;
if TypeInfo.Kind=tkClassRef then
begin
Selector:=TClass((@value)^);
OrderedList:=TList[TClass].create;
for Pair in Pairs do if Selector.InheritsFrom(TClass((@Pair.Value)^)) then OrderedList.Add(TClass((@Pair.Value)^));
if OrderedList.Count>0 then
begin
OrderedList.Sort(UtilStuff);
for pair in Pairs do
if TClass((@Pair.Value)^)=OrderedList.Items[0] then
begin
Pair.Proc();
exit;
end;
end
else
if Assigned(ElseProc) then ElseProc();
OrderedList.free;
end
else
begin
Comparer:=TComparer<T>.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;


 
Leonid Troyanovsky ©   (2010-04-14 09:57) [22]


> Anatoly Podgoretsky ©   (14.04.10 08:39) [20]


> oxffff ©   (14.04.10 09:19) [21]

Дети в подвале играли в гестапо.
Зверски замучан сантехник Потапов.

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.194 c
15-1275368289
user123
2010-06-01 08:58
2010.08.27
Два интересующих меня вопроса о копировании и видеопотоке


15-1265578203
Юрий
2010-02-08 00:30
2010.08.27
С днем рождения ! 8 февраля 2010 понедельник


15-1270102589
AlexDan
2010-04-01 10:16
2010.08.27
Думаю поспамить


15-1269281948
Нехочуха
2010-03-22 21:19
2010.08.27
Природа в цифрах


11-1208152039
Barloggg
2008-04-14 09:47
2010.08.27
String + KOL не так прост как кажется?