问题:本人是一个初中电脑教师,水平太次,在为学生编写电子教室软件时,遇到一个关键问题,有如下一个长字符串:被三个符号(〓  *  | )分隔开。
这个字符串的规律是:〓前后都是8个*符号,表示某一个班的学生名单分成8组。|dfsfsdf|qqqqq|www|bb08|e-5|bb02*
|e-2|bb05|bb08-2|e-7|e-1|e-8*
|sdfss|erterterter|d-4|d-2|d-5|d-6*
|asdfsdfs|c-1|c-2|c-3|c-4|bb03*
|f-22|b-3|b-4|b-5|bfa7|b-6*
|bfa2|bb10|c-5|bfa4|bb1|a-5*
|kkkk*
|a-1|bb04*

|200|210|230|246|260|270*
|300|310|315|320|350|360*
|410|415|420|450|462|480*
|504|520|530|540|560|590*
|609|619|634|650|660|698*
|700|710|727|740|769|787*
|840*
|900|950*

|胡炼朝|曹源|贾东|蔡贵凤|王露波|李金琳*
|曹波平|乐烨虹|潘恩光|袁琼燕|周梦瑶|胡叶玲*
|胡周灵|李莉莉|张燕|周燕娜|王晓燕|王武群*
|虞琪琪|邬幸君|张仕|王世浩|陈静|徐琴*
|陆将盛|胡奇光|胡宁宁|王海|胡宁|王一海*
|胡二灵|张莉|李燕|燕娜|王燕|武群*
|张三*
|人三名|李四光*
请教怎样编程和分割字符串,将上面的字符串赋值到listview1中去。var
  tmpItem: TListItem;Listview1的第一个赋值为: tmpItem := ListView1.Items.Add;
tmpItem.Caption := 'dfsfsdf ';
tmpItem.left := 200;
tmpItem.SubItems.Add('胡炼朝');Listview1的第二个赋值为:
tmpItem := ListView1.Items.Add;
tmpItem.caption := ' qqqqq ';
tmpItem.left := 210;
tmpItem.SubItems.Add('曹源');Listview1的第三个赋值为:
tmpItem := ListView1.Items.Add;
tmpItem.caption := ' www ';
tmpItem.left := 230;
tmpItem.SubItems.Add('贾东');Listview1的第四个赋值为:
tmpItem := ListView1.Items.Add;
tmpItem.caption := ' bb08 ';
tmpItem.left := 246;
tmpItem.SubItems.Add('蔡贵凤');以此类推,一直到 tmpItem := ListView1.Items.Add;
tmpItem.caption := ' kkkk ';
tmpItem.left := 840;
tmpItem.SubItems.Add('张三'); tmpItem := ListView1.Items.Add;
tmpItem.caption := ' a-1 ';
tmpItem.left := 900;
tmpItem.SubItems.Add('人三名'); tmpItem := ListView1.Items.Add;
tmpItem.caption := ' bb04 ';
tmpItem.left := 950;
tmpItem.SubItems.Add('李四光');
感谢各位!

解决方案 »

  1.   

    初中电脑教师?还可以有机会用D编程啊  ,太爽了 早知道我也回去做个教师了  呜呜。。
    言归正传,
    感觉你可以用COPY方法,结合POS 来尝试一下1.Copy
      功能说明:该函数用于从字符串中复制指定范围中的字符。该函数有3个参数。第一个参数是数据源(即被复制的字符串),第二个参数是从字符串某一处开始复制,第三个参数是要复制字符串的长度(即个数)。最后函数返回一个新的字符串(即是我们指定要复制的字符串内容)。  参考实例:  var    S: String;    MyStr: String; // 保存新的字符串  begin    S := ''I Love China!'';  //下面将获取I Love China中的“Love”字符串。  MyStr := Copy(S, 3, 4);  end;  执行结果,MyStr等于“Love”,“Love”字符串在“I Love China!”中第3个位置开始,所以第二个参数为3,“Love”一共有4个字符,所以第三个参数为4。2.Pos
      功能说明:查找字符(串)所在位置。该函数有二个参数。第一个参数为要查找的字符(串),第二个参数为被查找字符(串)。  参考实例:  var    nPos: Integer; // 用于保存查找的字符所在位置  begin    nPos := Pos(''Like'', ''I Like Reading!'');  end;  此时nPos等于3。如果没有查找到,则nPos为0。  注意:Pos函数在查找时是要区分字符大小的。如果要实现不区分大小,那么需要使用UpperCase或LowerCase函数将两个参数的字符(串)转换为“大写”或“小写”再进行查找。  另外还有一个查找字符(串)的函数----AnsiPos,该函数的使用方法与Pos函数完全一样。当你查找的是汉字时,最好使用AnsiPos函数。
      

  2.   

    先把你的字符串分别按〓分割成三部分,然后用下面的函数可以分别获取了function GetListSubValue(TotalValue: string;SplitStr: string;subIndex: integer): string;
    var
      iPos: integer;
    Label 1;
    begin
      1:
      iPos := Pos(SplitStr,TotalValue);
      if ipos = 0 then  result := TotalValue
      else if subindex = 0 then
        result := Copy(TotalValue,1,ipos-1)
      else
      begin
        TotalValue := Copy(TotalValue,ipos+Length(SplitStr),MaxInt);
        if subIndex <> 0 then
        begin
           subIndex := subIndex - 1;
           goto 1;
        end;
      end;
    end;
    例如: 一个字符串为0&&1&&2&&3&&4&&5,之间的分割字符串为&&,那么 
    如果要得到每个分割的字符值如下 str := 0&&1&&2&&3&&4&&5;
    for i := 0 to 6 do
    begin
      ShowMessage(GetListSubValue(str,'&&',i));
    end;
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
     ss:string;
     s1:tstrings;
     s2,s3,s4:tstrings;
     i:integer;
    begin
         ss:='|dfsfsdf|qqqqq|www|bb08|e-5|bb02*'+
             '|e-2|bb05|bb08-2|e-7|e-1|e-8*'+
             '|sdfss|erterterter|d-4|d-2|d-5|d-6*'+
             '|asdfsdfs|c-1|c-2|c-3|c-4|bb03*'+
             '|f-22|b-3|b-4|b-5|bfa7|b-6*'+
             '|bfa2|bb10|c-5|bfa4|bb1|a-5*'+
             '|kkkk*'+
             '|a-1|bb04*'+
             '='+
             '|200|210|230|246|260|270*'+
             '|300|310|315|320|350|360*'+
             '|410|415|420|450|462|480*'+
             '|504|520|530|540|560|590*'+
             '|609|619|634|650|660|698*'+
             '|700|710|727|740|769|787*'+
             '|840*'+
             '|900|950*'+
             '='+
             '|胡?朝|曹源|??|蔡??|王露波|李金琳*'+
             '|曹波平|??虹|潘恩光|袁?燕|周??|胡?玲*'+
             '|胡周?|李莉莉|?燕|周燕娜|王?燕|王武群*'+
             '|虞琪琪|?幸君|?仕|王世浩|??|徐琴*'+
             '|??盛|胡奇光|胡宁宁|王海|胡宁|王一海*'+
             '|胡二?|?莉|李燕|燕娜|王燕|武群*'+
             '|?三*'+
             '|人三名|李四光*';
          ss:=   StringReplace(ss,   '*',   '''',   [rfReplaceAll]);
          ShowMessage(ss);
          s1:=tstringlist.create;s1.Delimiter:='=';
          s1.DelimitedText:=ss;
          s2:=tstringlist.create; s3:=tstringlist.create; s4:=tstringlist.create;
          s2.Delimiter:='|';s2.DelimitedText:=s1.Strings[0];
          s3.Delimiter:='|';s3.DelimitedText:=s1.Strings[1];
          s4.Delimiter:='|';s4.DelimitedText:=s1.Strings[2];
          for i:=0 to s2.Count-1 do
          begin
                 with ListView1.Items.Add do
                 begin
                    Caption:=s2.Strings[i];
                    SubItems.Add(s3.Strings[i]);
                    SubItems.Add(s4.Strings[i]);
                 end;       
          end;
    end;
      

  4.   

    太谢谢各位了,尤其是xzl_kye
    我按照xzl_kye的思路,完全解决了我的问题,由衷感谢.xzl_kye去掉了我的8个星,思路非常的好.感谢!!!结贴.