CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

这个语法怎么写?

楼主zz5290()2005-06-27 11:50:31 在 Delphi / VCL组件开发及应用 提问

var   filefix   :string  
   
  filefix:='tmp'  
  if   UpperCase(filefix)   in   ['ADR','TMP','FRM','SBJ','HTM']   then  
      ......  
   
  [Error]   Unit1.pas(229):   Incompatible   types:   'Integer'   and   'String' 问题点数:20、回复次数:12Top

1 楼ppiy3670()回复于 2005-06-27 11:58:54 得分 2

集合中不能用字符串的,你这个逻辑只能用if逐个进行判断来实现了,用case都是不行的。Top

2 楼hellolongbin(一个人(自从扩充话题改版,再也不去灌水乐园了))回复于 2005-06-27 11:59:37 得分 4

if   pos(UpperCase(filefix),'ADR,TMP,FRM,SBJ,HTM')>0   then  
  Top

3 楼zz5290()回复于 2005-06-27 13:06:46 得分 0

hellolongbin(一个人)   的方法不严谨Top

4 楼zz5290()回复于 2005-06-27 13:08:29 得分 0

ppiy3670()    
  就是不想用if太麻烦,如果括号里的还要多   那不累死Top

5 楼heluqing(鉴之小河〖劳累求充实〗)(vcl .net)回复于 2005-06-27 13:51:00 得分 2

A   set   is   a   collection   of   values   of   the   same   ordinal   type.  
  ////但是['ADR','TMP','FRM','SBJ','HTM']里面的那些字符串根本就是无序的,所以不可能有很好的方法来判断,pos应该是个不错的替代方法。  
  支持一个人的做法...  
  如果['ADR','TMP','FRM','SBJ','HTM']这些值都是基本上确定的那么也不妨把它们定义成枚举类型的,也可以调用集合的in方法来计算了Top

6 楼heluqing(鉴之小河〖劳累求充实〗)(vcl .net)回复于 2005-06-27 14:02:01 得分 2

 
      MyTest   =   (ADR,   TMP,   FRM,   SBJ,   HTM);  
   
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
  var   MySets   :   set   of   MyTest   =   [ADR,   TMP,   FRM,   SBJ,   HTM];  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
          if   (ADR   in   MySets)   then  
          begin  
                  showmessage('Yes');  
          end;  
  end;  
   
  end.  
  这样就不是判断string了,如果要判断string的话就要用pos  
  反正没有什么方法可以既判断string又能用到sets的方法的Top

7 楼duanhai(段海)回复于 2005-06-27 14:25:54 得分 2

楼主怎么会用到这么多的字符串呀?  
   
  弄一个字典表看行不行?  
  如:  
  const   _SetString   :   array[1..5]   of   string[3]   =   ('ADR','TMP','FRM','SBJ','HTM');  
   
  function   IsIn(const   AStr:   string):   Integer;  
  var  
      I:   Integer;  
  begin  
      Result   :=   -1;  
      for   I   :=   Low(_SetString)   to   High(_SetString)   do  
          if   UpperCase(AStr)   =   _SetString[I]   then  
          begin  
              Result   :=   I;  
              break;  
          end;  
  end;  
   
  个人觉得在程序中用字符串,不是一个很好的方法Top

8 楼kiboisme(蓝色光芒)(www.1284.net/)(软件开发机器人for delphi)回复于 2005-06-27 14:34:56 得分 2

支持  
  >>回复人:   zz5290()   (   )   信誉:90     2005-06-27   13:06:00     得分:   0      
  >>hellolongbin(一个人)   的方法不严谨  
   
  可以这样  
  if   pos(','+UpperCase(filefix)+',',         ',ADR,TMP,FRM,SBJ,HTM,')>0   then  
  Top

9 楼mastersky(浪)回复于 2005-06-27 15:00:12 得分 2

kiboisme(蓝色光芒)   (   )的方法是对hellolongbin(一个人)的方法改进,一般应该没什么问题了。  
  duanhai(段海)   (   )   的方法将字符串数组做成变量就可以通用了。这个方法就是很多if语句的简化通用版了。Top

10 楼zz5290()回复于 2005-06-27 16:40:19 得分 0

在SQL语法里就可以用这样的判断语句   if   'ad'   in   ('ba','fa','dc','ad')  
  那也只好采用大家的方法了,谢谢各位。结账!Top

11 楼shine_why(小葱)回复于 2005-06-27 16:57:52 得分 2

if   pos(UpperCase(filefix),'ADR,TMP,FRM,SBJ,HTM')>0   then    
  这样比较可行一些,  
  ['ADR','TMP','FRM','SBJ','HTM']是一个枚举类型,ADR代表的是一个整型数据,而你的UpperCase(filefix)则是一个字符串,所以就数据类型不匹配的Top

12 楼jozosoft(水灵灵的乌兰诺娃)回复于 2005-06-27 17:06:14 得分 2

樓主可以定義一個數組,  
  然後用一個for   語句判斷是否存在於此數組中Top

相关问题

  • 怎么把这个简单的mssql 2000 sql 改写成access 的语法
  • SQL语法错误,该怎么写呢?
  • 高手请指点。语法错误在那儿?!怎么才能写成这个代码啊?
  • 我想问一下,这个语法怎么用
  • 这个简单的sql语法怎么通不过?
  • Delphi语法:dynamic这个语法怎么用的,用它和不用它有什么区别了?
  • 动态生成菜单语法怎么写.
  • 数据库中数据反向排列的语法怎么写?
  • 调用DLL文件的语法怎么写?
  • 句子都是按照语法写的,怎么会出错呢?

关键词

  • sbj
  • adr
  • filefix
  • 字符串
  • frm
  • 方法
  • uppercase
  • 判断
  • tmp
  • htm

得分解答快速导航

  • 帖主:zz5290
  • ppiy3670
  • hellolongbin
  • heluqing
  • heluqing
  • duanhai
  • kiboisme
  • mastersky
  • shine_why
  • jozosoft

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo