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

Вниз

case и string   Найти похожие ветки 

 
OlegM   (2003-03-18 13:52) [0]

Привет всем!
Как сделать что-бы case работал с переменной типа string


 
drpass   (2003-03-18 13:55) [1]

попроси у Borland исходные тексты компилятора и сделай так, как тебе хочется :)
case может работать только с простыми типами данных


 
eLVik   (2003-03-18 13:58) [2]

Case по определению может работать только с порядковыми типами данных, коим STRING не является. Если case"ов довольно много, то попробуй TStringList


 
Андрей Сенченко   (2003-03-18 14:29) [3]

можно конечно придумать суперизвращение основываясь на том, что string[i] - это собственно CHAR, то есть порядковый тип данных.

Но нужно ли это ?


 
Vlad Oshin   (2003-03-18 14:30) [4]

можть завести тип, где перечислить все варианты строк?


 
Андрей Сенченко   (2003-03-18 14:33) [5]

Vlad Oshin © (18.03.03 14:30)

Это грустно. Строки могут получаться извне ( из файла, ручной ввод и т.п.) и на этапе программирования содержать неизвестно что.
Если же работа идет по ИЗВЕСТНЫМ строкам, то здесь элементарно вводится TStringList например, в котором Case можно сделать по индексу например.

Задача нужна от автора. Так можно флудить сколько угодно


 
OlegM   (2003-03-18 14:38) [6]

Спасибо всем!
P.S
Мне надо было небольшой диапазон значений проверить так что использовал if


 
Юрий Зотов   (2003-03-18 22:37) [7]

Иногда применяется такой финт. Строки загоняем в StringList и пишем:

case StringList.IndexOf(S) of
-1: raise ...
0: ...
1: ...
...
end;


 
Style   (2003-03-19 10:29) [8]

Можно попробывать написать функцию которая сумирует все буквы текста умноженные на позицию. И возвращает Integer

function SumString(s: string): integer;
var
i: integer;
begin
result := 0;
for i := 1 to Length(s) do
begin
result := result + Ord(s[i])*i;
end;
end;

а далее

case SumString(s) of
SumString(s2): ...
SumString(s3): ...
SumString(s4): ...
end;


 
REA   (2003-03-19 10:35) [9]

Если нужно проассоциировать целые числа и строки то наверно THashedStringList. Еще можно посчитать Hash строки и с некоторой долей уверенности делать case. Еще можно проассоциировать объект или функцию со строкой и ее вызывать.


 
Style   (2003-03-19 10:41) [10]

>>
только вот так
result := result + Ord(s[i])*Ord(s[i])*i;


 
Style   (2003-03-19 11:17) [11]


function SumString(s: string): integer;

не просто суммировать не получится.. т.к. уникальное значение строки это порядковый номер при Переборе


 
Style   (2003-03-19 12:24) [12]

неполучиться и потому что в case прописываются только Const Extesions :)! а то можно было бы просто написать функцию проверки которая возвращает значение true тому case которому нужно..

например.

str := Value;
case true of
Compare(Str1):...
Compare(Str2):...
Compare(Str3):...
end;

function Compare(S: string): boolean;
begin
if(Value = S) then
result := true;
else
result := false;
end;

Эхх если было бы можно Сделать такую функцию которая возвращает константу :))


 
Андрей Сенченко   (2003-03-19 12:46) [13]

Style (19.03.03 12:24)
Эхх если было бы можно Сделать такую функцию которая возвращает константу :))

Эмнннн ... вот пример функции, возвращающей несмотря ни на что одну из самых фундаментальных констант
:)

function Constant(s:string; i:integer; r: real) : variant;
const
c = pi;
begin
result := c;
end;



 
Игорь Шевченко   (2003-03-19 12:49) [14]

Переходить на C# - там case со string"ами работает.


 
Style   (2003-03-19 12:56) [15]

>> Переходить на C# - там case со string"ами работает.

Да у C и работа с Pointer"ами поинтереснее. А какой синтаксис!

Жаль что у нас на работе на C Buildere не пишут.. Сам уже почти все забыл.

А писать сразу на двух языках неудобно. Постоянно даже самый простой синтаксис путать будешь

Будешь работать в C
вместо -> поставишь "." :) или наоборот!


 
Style   (2003-03-19 13:04) [16]

>>Андрей Сенченко но на выходе это уже будет Variant! :(



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

Форум: "Основная";
Текущий архив: 2003.03.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
1-100326
MrCOLOMBO
2003-03-19 18:41
2003.03.31
Как изменить цвет выделения в ListView


1-100217
VP
2003-03-20 12:43
2003.03.31
Эмуляция двойного клика на объекте.


1-100318
SaperXL
2003-03-20 01:00
2003.03.31
rich text <-> html


3-100181
me2
2003-03-13 09:09
2003.03.31
Блокировка записей


3-100165
denary
2003-03-12 03:41
2003.03.31
Выбор базы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский