Delphi - 在CASE语句中使用函数

时间:2016-11-10 13:08:05

标签: string delphi comparison

在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';
...

2 个答案:

答案 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;