Форум: "Начинающим";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];
ВнизКак грамотрее написать вот такой код Найти похожие ветки
← →
Abcdef123 (2007-10-19 12:07) [0]if (pubPreFixA <> "") AND (pubPreFixA <> "ACT_") AND (pubPreFixA <> "BUD_") AND (pubPreFixA <> "FOR_") AND (pubPreFixA <> "PYR_") then
result := False;
Перечисление смотрится не красиво, думаю, как мастера написали бы?
Заранее спасибо
← →
Ins © (2007-10-19 12:09) [1]Result:= (pubPreFixA = "") or (pubPreFixA = "ACT_")...
← →
Reindeer Moss Eater © (2007-10-19 12:12) [2]Result := (pubPreFixA = "") or (Pos(pubPreFixA,"ACT_BUD_FOR_PYR_") > 0)
← →
Ins © (2007-10-19 12:15) [3]
> Reindeer Moss Eater © (19.10.07 12:12) [2]
Действительно прикольно. А если преффикс будет "D_"?
:)
← →
Ins © (2007-10-19 12:17) [4]Можно еще просто объявить константный массив префиксов, и делать просто поиск в нем.
← →
Reindeer Moss Eater © (2007-10-19 12:19) [5]разделитель шаблонов просто другой нужно. не подчеркивание
← →
Abcdef123 (2007-10-19 12:21) [6]to Ins :
1. получается, что предложение Reindeer Moss Eater неправильное?
2.Я подумала, что массив бы использовать, но вот не знаю, как в нем делать поиск в этом случае. :-/ В массивах пок ане сильна
← →
Ins © (2007-10-19 12:22) [7]
> 2.Я подумала, что массив бы использовать, но вот не знаю,
> как в нем делать поиск в этом случае. :-/ В массивах пок
> ане сильна
в цикле
← →
Reindeer Moss Eater © (2007-10-19 12:24) [8]Если множество ожидаемых сторк детерминировано, то pos вполне прокатит.
И циклов не надо.
Если нет, то прокатит с дополнительным контролем длины.
← →
Маша Шрайбер © (2007-10-19 12:26) [9]type
TPrefixes = (None,Empty,ACT_,BUD_,FOR_,PYR_);
const
Prefixes : array[TPrefixes ] of string = ("None","","ACT_","BUD_","FOR_","PYR_");
1. <определяем тип>
2. if <определенный тип> in [Empty,ACT_,BUD_,FOR_,PYR_] then
← →
Ins © (2007-10-19 12:27) [10]
> Reindeer Moss Eater © (19.10.07 12:24) [8]
В принципе прокатит скорее всего, но ИМХО не очень читаемый код.
← →
Reindeer Moss Eater © (2007-10-19 12:27) [11]А еще лучше строить условие вычисляя не False, а True
← →
Reindeer Moss Eater © (2007-10-19 12:27) [12]так ей не более читаемый, а более красивый код нужен
← →
Ins © (2007-10-19 12:28) [13]
> так ей не более читаемый, а более красивый код нужен
Ааааа :) Тогда красиво, не спорю
← →
Abcdef123 (2007-10-19 12:41) [14]я вот так попробовала
var
arPreFix : array[0..4] of string[4] = ("", "ACT_", "BUD_", "FOR_", "PYR_");
for i := 0 to 4 do
begin
result := (pubPreFixA = arPreFix[i]) AND result; //это неправильно,но вот как правильно результат прочитать, чтоб резульат отражал когда одно из них совпало, а не все?
end;
to Reindeer Moss Eater[11,12] - просто у меня в начале функции присвоено result=true; и только если не совпадают кое-какие условия, как типа этого, то идет переприсвоение на false
← →
Reindeer Moss Eater © (2007-10-19 12:42) [15]Проще делать наоборот. Сначала False, и затем проверять на True
← →
Сергей М. © (2007-10-19 12:51) [16]
> Abcdef123 (19.10.07 12:41) [14]
Может тебе обратить внимание на решение подобных задач с использованием механизма множеств ?
← →
Abcdef123 (2007-10-19 12:56) [17]to Сергей М. [16]
как это?
← →
Сергей М. © (2007-10-19 14:08) [18]Примерно так:
type
TStrID = (Blank, ACT, BUD, FOR, PYR);
TStrIDs = set of TStringId;
..
var
StrID: TStrID;
StrIDs: TStrIDs;
tmpPrefix: String;
..
StrIDs := [Blank, ACT_, BUD_, FOR_, PYR_];
if pubPreFixA = "" then
tmpPrefix := "Blank"
else
tmpPrefix := pubPreFixA;
StrID := TStrID(GetEnumValue(TypeInfo(TStrID), tmpPrefix));
Result := StrID in StrIDs;
← →
Сергей М. © (2007-10-19 14:09) [19]TStrID = (Blank, ACT_, BUD_, FOR_, PYR_);
← →
Маша Шрайбер © (2007-10-19 14:20) [20]>> Сергей М. © (19.10.07 14:08) [18]
Что будет, когда pubPreFixA="MASHA_" ? :)
← →
Сергей М. © (2007-10-19 14:25) [21]
> Что будет, когда pubPreFixA="MASHA_" ?
Будет False, разве не очевидно ?
Впрочем, если ты настаиваешь, тоResult := (Integer(StrID) >= 0) and (StrID in StrIDs); //корректно при complete boolean eval = false
← →
Маша Шрайбер © (2007-10-19 14:27) [22]>> Сергей М. © (19.10.07 14:25) [21]
>> Будет False, разве не очевидно ?
Мне не очевидно, что будет здесь:
StrID := TStrID(GetEnumValue(TypeInfo(TStrID), tmpPrefix));
о том и вопрос был.
>> Впрочем, если ты настаиваешь, то
Я ни на чем не настаиваю.
← →
Сергей М. © (2007-10-19 14:33) [23]
> Мне не очевидно, что будет здесь:
Это становится очевидным при первом же чтении справки.
← →
Маша Шрайбер © (2007-10-19 14:37) [24]К сожалению справки нет. Также, как и Дельфи :)
Но я почитаю. Позже. Даже не сомневайтесь.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.054 c