在Delphi 10 / Seattle中,我正在尝试进行嵌套的字符串测试...我有一个字符串,这是一个产品名称。我需要根据该产品名称找到产品类别。这将不区分大小写,每个产品只属于一个类别。一旦找到一个类别,我就可以停止检查......我的初始方法是通过CASE语句中的AnsiContainsText来做到这一点,但是这是不允许的,因为CASE语句没有通用函数...
我有一种应该有效的方法,但有更优雅的东西吗?我将对该类别进行大约40种不同的测试,并将在大约6000种产品上运行(循环)此测试,因此我希望尽可能高效。
// Determine new value...
Category := '';
if ((Category = '') and (AnsiContainsText(ProductText, 'PaaS')) then Category := 'PaaS';
if ((Category = '') and (AnsiContainsText(ProductText, 'IaaS')) then Category := 'IaaS';
if ((Category = '') and (AnsiContainsText(ProductText, 'SaaS')) then Category := 'SaaS';
...
答案 0 :(得分:10)
外包!
function FindCategory(const ProductName: string): string;
const
categories: TArray<string> = ['PaaS', 'IaaS', 'SaaS']; // can easily be extended
var
S: string;
begin
for S in categories do begin
if ContainsText(ProductName, S) then Exit(S)
end;
result := '';
end;
答案 1 :(得分:-1)
你可以使用pos()函数:
function FindCategory(const ProductName: string): string;
const
categories: string = 'PaaS,IaaS,SaaS,';
begin
if Pos(ProductName+ ',', categories)>0 then Exit(ProductName);
result := '';
end;