冥界3大法王 发表于 2022-6-19 20:05

把下面的代码转换成Delphi的case语句


          if Pos('B000C3', ComboBox2.Text) > 0 then
          begin
            最终合体机器码 := 'B000C3';
          end;
          if Pos('B001C3', ComboBox2.Text) > 0 then
          begin
            最终合体机器码 := 'B001C3';
          end;
          if Pos('85C0', ComboBox2.Text) > 0 then
          begin
            最终合体机器码 := '85C0';
          end;
          if Pos('84C0', ComboBox2.Text) > 0 then
          begin
            最终合体机器码 := '84C0';
          end;
          if Pos('0F94C0', ComboBox2.Text) > 0 then
          begin
            最终合体机器码 := '0F94C0';
          end;
          if Pos('0F95C0', ComboBox2.Text) > 0 then
          begin
            最终合体机器码 := '0F95C0';
          end;
          if Pos('33C0', ComboBox2.Text) > 0 then
          begin
            最终合体机器码 := '33C0';
          end;
          if Pos('0BC0', ComboBox2.Text) > 0 then
          begin
            最终合体机器码 := '0BC0';
          end;
          if Pos('C3', ComboBox2.Text) > 0 then
          begin
            最终合体机器码 := 'C3';
          end;
          if Pos('0F85', ComboBox2.Text) > 0 then
          begin
            最终合体机器码 := '0F85';
          end;
          if Pos('0F84', ComboBox2.Text) > 0 then
          begin
            最终合体机器码 := '0F84';
          end;
          if Pos('75XX', ComboBox2.Text) > 0 then
          begin
            最终合体机器码 := '74';
          end;
          if Pos('74XX', ComboBox2.Text) > 0 then
          begin
            最终合体机器码 := '75';
          end;
          if Pos('90', ComboBox2.Text) > 0 then
          begin
            最终合体机器码 := DupeString('90', StrToInt(读取到的所在行_所占字节数.Value));
          end;



以上代码,是简单,但很不科学啊~~ {:301_974:}

DEATHTOUCH 发表于 2022-6-19 21:37

整俩字符串列表然后遍历吧
特殊情况再专门处理一下

manyou 发表于 2022-6-19 22:10

一定要用case的话,可以看下这个文章https://www.iteye.com/blog/xmchcly-1269705
不过我觉得这段代码不用case更好解决。
把字符串都存到TStringList里,使用TStringList.IndexOf(ComboBox2.Text)>=0判断是否有这个值即可
不过我看个别输出值和判断值是不一样的,那可以用TstringList的AddPair的方式保存,使用TStringList.Values取下标判断

冥界3大法王 发表于 2022-6-19 22:11

看来也不省事啊,就这样吧,至少直观简单。

lies2014 发表于 2022-6-19 22:43

本帖最后由 lies2014 于 2022-6-19 22:49 编辑

用case不好实现,因为case的条件是否成立需要在执行前明确,你这个是根据结果才能确定,不过可以简化一下代码,一是看起来简洁,二是碰到符合条件的就跳出不用继续执行后面的判断
var
s: array of string = ('B000C3','B001C3','85C0','84C0','0F94C0','0F95C0','33C0','0BC0','C3','0F85','0F84','75XX','74XX');
i: Integer;
begin
for i := 0 to 12 do
begin
    if Pos(s, ComboBox2.Text) > 0 then
    begin
      最终合体机器码 := s;
      break;
    end;
end;
end;
if Pos('90', ComboBox2.Text) > 0 then
begin
最终合体机器码 := DupeString('90', StrToInt(读取到的所在行_所占字节数.Value));
end;

andersgong 发表于 2022-6-20 08:05

case并不比if省事,逻辑清晰、便于维护才是宗旨。

alphagis 发表于 2022-6-20 08:07

话说贴主放这么美的头像好么

vov5601 发表于 2022-6-20 09:17

lies2014 发表于 2022-6-19 22:43
用case不好实现,因为case的条件是否成立需要在执行前明确,你这个是根据结果才能确定,不过可以简化一下代 ...

您用的哪个版本的delphi   为什么delphi不稳定?

冥界3大法王 发表于 2022-6-20 10:56

alphagis 发表于 2022-6-20 08:07
话说贴主放这么美的头像好么

哈哈,看着舒服就得了。我看还是举报版主姥爷得1分实惠。{:301_988:}

lies2014 发表于 2022-6-20 11:12

vov5601 发表于 2022-6-20 09:17
您用的哪个版本的delphi   为什么delphi不稳定?

现在不用Delphi,基本不编程,偶尔有些小需求用Lazarus就能搞定
页: [1] 2
查看完整版本: 把下面的代码转换成Delphi的case语句