我定义了一个record类型myrecord,里面有多个字段,都是字符类型str1,str2.....  这些字段的值在其他函数中赋值,在另外函数中能得到字段变量strname,这个strname可能是str1,也可能是str2... 我想通过这个strname变量查找到myrecord中相应字段的值,比如当strname为str1时,能找到myrecord.str1的具体值。敬请大侠们赐教!

解决方案 »

  1.   

    myrecord.str1就是成员str1的值了,还要找什么? 加上判断吗?if strname='str1' then
    showmessage(myrecord.str1)
    else if strname='str2' then
    showmessage(myrecord.str2)
    ...
      

  2.   

    谢谢提示,加判断是可以,但是那是在strname确定已知的情况下可以这样找,而strname这个变量是不确定的而且可能有很多,这样判断查找不方便,我现在想到一个办法就是用到两个stringlist,一个存放字段名strlist1,一个存放字段名相应的值strlist,然后再用如下方法自动查找strname对应的字段值,这样在后面的处理中比较方便调用str。str:= strlist.Strings[strlist1.Indexof(strname)];
      

  3.   

    上面的方法还是有些笨拙,要是record有类似stringlist如此多的方法就好了,呵呵,请问还有更好的方法吗?
      

  4.   

    用RTTI来实现,参考万一的博客
    http://www.cnblogs.com/del/archive/2009/10/15/1583969.html
      

  5.   

    第一种方法,把str1...strn 定义成 array [0..n] of String;如何?第二种方法
    Type
      TMyRecord = record
        ID   : integer; 
        Str1 : String;
        Str2 : String;
        Str3 : String;
        Str4 : String;
        Str5 : String;
        Str6 : String;
        Str7 : String;
        ....
      end;
    第二种方法
    针对以前的情况,str1..strn连续的排列.
    可以这样
    var
      R : TMyRecord;
      P : PString;
    begin
      R.Str3 := 'aa';
      P := @R.Str1;
      P := Ptr(integer(P) + (3-1) * 4);
      ShowMessage(P^);
    end;
    注意是连续排列的情况,也就是说可以根据str后的数字来获取它的位置.