Форум: "Основная";
Текущий архив: 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