var
 i,index:integer;
 ts:Tstringlist;
 s:string;   ts:=Tstringlist.create;   i:=0;
   while  pos('#',CurrentWomanStr)<>0)  do
   begin
    index:=pos('#',CurrentWomanStr);
    ts.add(copy(CurrentWomanStr,1,index-1));
    i:=i+1;
    delete(CurrentWomanStr,1,index);
   end;
    FormJSMain.EdtArchiveID.Text:=ts[0];
    FormJSMain.EdtAddress.Text:=ts[1];
    FormJSMain.EdtExamWomanNo.Text:=ts[2];
    FormJSMain.EdtID.Text:=ts[3];
 FormJSMain.CmbHomeType.Text:=ts[4];
    FormJSMain.EdtWomanName.Text:=ts[5];
    FormJSMain.EdtWomanChuShengNianYue.Text:=ts[6];
    //FormJSMain.edtwomanhukou.Text:=ts[7];
//    FormJSMain.edtwomanhukouxinzhi.Text:=ts[8];
    FormJSMain.EdtWomanMinZu.Text:=ts[9];
    FormJSMain.EdtWomanZhiYe.Text:=ts[10];
    FormJSMain.EdtWomanDangYuan.Text:=ts[11];
    FormJSMain.EdtWomanXueLi.Text:=ts[12];
    FormJSMain.CmbWomanHunYinZhuangKuang.Text:=ts[13];
  FormJSMain.CmbWomanJiangKangZhuangKuang.Text:=ts[14];
    FormJSMain.EdtManName.Text:=ts[15];
    FormJSMain.EdtManChuShengNianYue.Text:=ts[16];
    //---------------------------------------------------
   //FormJSMain.edtmanhukou.Text:=ts[17];
//    FormJSMain.edtmanhukouxinzhi.Text:=ts[18];
    FormJSMain.EdtManMinZu.Text:=ts[19];
    FormJSMain.EdtManZhiYe.Text:=ts[20];
    FormJSMain.EdtManDangYuan.Text:=ts[21];
    FormJSMain.EdtManXueLi.Text:=ts[22];
    FormJSMain.CmbManHunYinZhuangKuang .Text:=ts[23];
    FormJSMain.CmbManJiangKangZhuangKuang.Text:=ts[24];FormJSMain.EdtSon.Text:=ts[25];
FormJSMain.EdtDaughter.Text:=ts[26];
FormJSMain.EdtChuChaoNianLing.Text:=ts[27];
FormJSMain.EdtYueJingZhouQi.Text:=ts[28];
FormJSMain.EdtYueJingChiXuShiJian.Text:=ts[29];    FormJSMain.CmbYueJingLiang.Text:=ts[30];
    FormJSMain.CmbYueJingTong.Text:=ts[31];FormJSMain.dtMoCiYueJingShiJian.DateTime:=StrToDateTime(ts[32]);
FormJSMain.EdtChuChanNianLing.Text:=ts[33];
FormJSMain.EdtYunCi.Text:=ts[34];
FormJSMain.EdtZuYueChan.Text:=ts[35];
FormJSMain.EdtNanChan.Text:=ts[36];
FormJSMain.EdtZaoChan.Text:=ts[37];
FormJSMain.EdtZiRanLiuChan.Text:=ts[38];
FormJSMain.EdtRenLiu.Text:=ts[39];
//--------------
FormJSMain.EdtYinChan.Text:=ts[40];FormJSMain.CmbXianYongFangFa.Text:=ts[41];
FormJSMain.EdtKaiShiShiJian.Text:=ts[42];
FormJSMain.EdtFuZuoYong.Text:=ts[43];    FormJSMain.CmbJiWangBingShi.Text:=ts[44];
    FormJSMain.EdtJiWangBingShiShuoMing.Text:=ts[45]; FormJSMain.edtphone.Text:=ts[46];
  FormJSMain.edtphone2.Text:=ts[47];
    FormJSMain.EdtICCardID.Text:=ts[48];
  //  FormJSMain.edtfingerprint.Text:=ts[50];
  //  FormJSMain.edtphotoname.Text:=ts[51];上面这段,当CurrentWomanStr内容少就不出什么错,但多了,就很容易出错..
请问,这是什么错误,是我的ts太长了?
我怕是ts不够长度,我改成了,加了个ts1,
   ts:=Tstringlist.create;
   ts1:=Tstringlist.create;   i:=0;
   while ( (i<40) and (pos('#',CurrentWomanStr)<>0) ) do
   begin
    index:=pos('#',CurrentWomanStr);
    ts.add(copy(CurrentWomanStr,1,index-1));
    i:=i+1;
    delete(CurrentWomanStr,1,index);
   end;   while pos('#',CurrentWomanStr)<>0 do
   begin
    index:=pos('#',CurrentWomanStr);
    ts1.add(copy(CurrentWomanStr,1,index-1));
    i:=i+1;
    delete(CurrentWomanStr,1,index);
   end;
    FormJSMain.EdtArchiveID.Text:=ts[0];
    FormJSMain.EdtAddress.Text:=ts[1];
    FormJSMain.EdtExamWomanNo.Text:=ts[2];
    FormJSMain.EdtID.Text:=ts[3];
 FormJSMain.CmbHomeType.Text:=ts[4];
    FormJSMain.EdtWomanName.Text:=ts[5];
    FormJSMain.EdtWomanChuShengNianYue.Text:=ts[6];
    //FormJSMain.edtwomanhukou.Text:=ts[7];
//    FormJSMain.edtwomanhukouxinzhi.Text:=ts[8];
    FormJSMain.EdtWomanMinZu.Text:=ts[9];
    FormJSMain.EdtWomanZhiYe.Text:=ts[10];
    FormJSMain.EdtWomanDangYuan.Text:=ts[11];
    FormJSMain.EdtWomanXueLi.Text:=ts[12];
    FormJSMain.CmbWomanHunYinZhuangKuang.Text:=ts[13];
  FormJSMain.CmbWomanJiangKangZhuangKuang.Text:=ts[14];
    FormJSMain.EdtManName.Text:=ts[15];
    FormJSMain.EdtManChuShengNianYue.Text:=ts[16];
    //---------------------------------------------------
   //FormJSMain.edtmanhukou.Text:=ts[17];
//    FormJSMain.edtmanhukouxinzhi.Text:=ts[18];
    FormJSMain.EdtManMinZu.Text:=ts[19];
    FormJSMain.EdtManZhiYe.Text:=ts[20];
    FormJSMain.EdtManDangYuan.Text:=ts[21];
    FormJSMain.EdtManXueLi.Text:=ts[22];
    FormJSMain.CmbManHunYinZhuangKuang .Text:=ts[23];
    FormJSMain.CmbManJiangKangZhuangKuang.Text:=ts[24];FormJSMain.EdtSon.Text:=ts[25];
FormJSMain.EdtDaughter.Text:=ts[26];
FormJSMain.EdtChuChaoNianLing.Text:=ts[27];
FormJSMain.EdtYueJingZhouQi.Text:=ts[28];
FormJSMain.EdtYueJingChiXuShiJian.Text:=ts[29];    FormJSMain.CmbYueJingLiang.Text:=ts[30];
    FormJSMain.CmbYueJingTong.Text:=ts[31];FormJSMain.dtMoCiYueJingShiJian.DateTime:=StrToDateTime(ts[32]);
FormJSMain.EdtChuChanNianLing.Text:=ts[33];
FormJSMain.EdtYunCi.Text:=ts[34];
FormJSMain.EdtZuYueChan.Text:=ts[35];
FormJSMain.EdtNanChan.Text:=ts[36];
FormJSMain.EdtZaoChan.Text:=ts[37];
FormJSMain.EdtZiRanLiuChan.Text:=ts[38];
FormJSMain.EdtRenLiu.Text:=ts[39];
//--------------
FormJSMain.EdtYinChan.Text:=ts1[0];FormJSMain.CmbXianYongFangFa.Text:=ts1[1];
FormJSMain.EdtKaiShiShiJian.Text:=ts1[2];
FormJSMain.EdtFuZuoYong.Text:=ts1[3];    FormJSMain.CmbJiWangBingShi.Text:=ts1[4];
    FormJSMain.EdtJiWangBingShiShuoMing.Text:=ts1[5]; FormJSMain.edtphone.Text:=ts1[6];
  FormJSMain.edtphone2.Text:=ts1[7];
    FormJSMain.EdtICCardID.Text:=ts1[8];
  //  FormJSMain.edtfingerprint.Text:=ts[49];
  //  FormJSMain.edtphotoname.Text:=ts[50];结果还是EStringListError:list index out of bands(6),,,,,怎么回事呢?

解决方案 »

  1.   

    谢谢大家关注.我主要是想讨论下
    list index out of bands(X)这个错误.同时我也碰到了这个问题我想利用currentWoman:=data2;把一个data2:Array[0..256]of char;
    的内容拷贝到一个字符串CurrentWoman,
    (00001#黎明#男#.................)相当长,经常超过255.然后将currentWoman作为返回值解析出中间的内容送到窗口上去
    中间用到了ts:Tstringlist来存放解析的内容,
    我发现CurrentWoman只要稍微长点,就bounds报错.
    1.我以为是ts小了,所以我加了个ts1.(就是上面贴的代码)
    2.有朋友说currentwoman不能超过255,但是我有时候data2的数据>255也能通过.
    但有时候又崩溃...
      

  2.   

    从你的代码上看,超界不是TStringList不够长度,而是你要解析的字符串中'#'的个数只有46个,或者说你解析后加到列表中的字串个数只有46个,所以当读到ts[47]或者ts1[6]时超界。你可以在赋值前察看一下ts.Count.  i:=0;
       while  pos('#',CurrentWomanStr)<>0)  do
       begin
        index:=pos('#',CurrentWomanStr);
        ts.add(copy(CurrentWomanStr,1,index-1));
        i:=i+1;
        delete(CurrentWomanStr,1,index);
       end;
       ShowMessage(IntToStr(ts.Count)); //显示个数
       另外,i:=0; i:=i+1;是多余的,赋值方法也太繁琐,可以用比较好的、简便的方法设计后赋值。
      

  3.   

    我看了楼主的代码,他的CurrentWomanStr是这样的:
    var
      S1,S2...S50:string;
      CurrentWomanStr:String
    ...
    begin
      ...
      CurrentWomanStr:=S1+'#'+S2+'#'+...+S50+'#';
      ...
    endS1,S2,...,S50是动态赋值,如果S1+'#'+S2+'#'+...+S50+'#'这些字符加起来后长度超过255(String类型的范围是0...255),系统只能取前255个字符,因此'#'的数量将有可能没有50个,也就是说有可能没有ts[50],如果象下面用到ts[50]
    FormJSMain.edtfingerprint.Text:=ts[50];
    就会出现错误: EStringListError:list index out of bands(50)。建议你把CurrentWomanStr改为数组类型,这样你取S1,S2...S50的方法需要改变。
      

  4.   

    用这个试试
    var
      CurrentWomanStr:WideString;
      

  5.   

    i:=0;
       while  pos('#',CurrentWomanStr)<>0)  do
       begin
        index:=pos('#',CurrentWomanStr);
        ts.add(copy(CurrentWomanStr,1,index-1));
        i:=i+1;
        delete(CurrentWomanStr,1,index);
       end;
      ShowMessage(IntToStr(i)); // 看看找到了几个