这个语法怎么写?
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




