Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.063 c
2-1268205413
Вася
2010-03-10 10:16
2010.08.27
TCategoryPanel


3-1234422525
TTLr
2009-02-12 10:08
2010.08.27
query1: cannot modify read-only dataset


2-1273316321
FIL-23
2010-05-08 14:58
2010.08.27
как добавить поле в индифицирующую колонку


4-1235896896
MALAN
2009-03-01 11:41
2010.08.27
Ошибка записи при попытке установки хука


15-1271655459
12
2010-04-19 09:37
2010.08.27
как бы компоненты в PHP :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский