Как проверит значение переменного по формату

RodeRebel

Если я имею форматы допустим, 'GR_' и '%pc'и соответственно для них обозначение 'городской' , 'ПК',как могу проверить значение переменного (var sType:string;)что значение подходит на первый формат и вернуть соответственный комментарий?А форматов у меня разные и сотни, нужен универсальная сравняющая функцияСпасибо заранее.
6 ответов

RodeRebel

Ищи библиотеки/компоненты по теме "регулярные выражения".Сами регулярные выражения тоже придется, хотя бы в минимальном объеме, освоить, но они того стоят.


RodeRebel

Я не очень на Дельфи, но думаю, это не очень сложно, чтобы искать спец. компонентов. Как я видел на HELPе Дельфи функцию FormatПеременное (x1) =Format(format (x2), source (x3) )подумал, как можно осуществить обратную функциюx3= f(?)(x1, x2 )


RodeRebel

или же на SQL есть же функция проверкиfield1 like '%format%'КОТОРЫЙ проверяет значение field1 по заданому формату и возвращает булевое значение,вот я бы хотел аналог на Дельфи


RodeRebel

RTFM Pos


RodeRebel

вот я бы хотел аналог на Дельфи
Ну так напишите. Лень? Используйте эту:
Function Like(s, Mask : String) : Boolean;
Var
 scan,scanM : Integer;
 len, lenM : Integer;
begin
 scan := <b>1</b>;
 scanM := <b>1</b>;
 len := Length(s);
 lenM := Length(Mask);
 Result := True;
 while (scanM<=lenM) and (scan<=len) Do
 begin
 case Mask[scanM] of
 '%' : // any number of chars
 If scanM=lenM then
 begin
 Exit;
 end
 else
 begin
 s := Copy(s,scan,len);
 Mask := Copy(Mask,scanM+<b>1</b>,lenM-scanM);
 While scan<=len Do
 begin
 If Like(s,Mask) then
 begin
 Exit;
 end;
 Delete(s,<b>1</b>,<b>1</b>);
 Inc(scan);
 end;
 Result := False;
 end;
 '_' : // one char
 begin
 Inc(scan);
 end;
 else // valuable char
 If s[scan]<>Mask[scanM] then
 begin
 Result := False;
 Exit;
 end
 else
 begin
 Inc(scan);
 end;
 end;
 Inc(scanM);
 end;
 if Mask[scanM]='%' then Result:=True
 else Result:=(scan>Len)and(scanM>lenM)
end;


RodeRebel

Если регистр букв не важен, можно использовать функцию MatchesMask из модуля Masks.