Delphi - 在CASE语句中使用函数

use*_*073 2 delphi string comparison

在Delphi 10/Seattle中,我正在尝试进行嵌套的String测试...我有一个字符串,这是一个产品名称.我需要根据该产品名称找到产品类别.这将不区分大小写,每个产品只属于一个类别.一旦找到一个类别,我就可以停止检查......我的初始方法是在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';
...
Run Code Online (Sandbox Code Playgroud)

Uwe*_*abe 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;
Run Code Online (Sandbox Code Playgroud)