问题:本人是一个初中电脑教师,水平太次,在为学生编写电子教室软件时,遇到一个关键问题,有如下一个长字符串:被三个符号(〓 * | )分隔开。
这个字符串的规律是:〓前后都是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('李四光');
感谢各位!
这个字符串的规律是:〓前后都是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('李四光');
感谢各位!
解决方案 »
- 马上要升级当爹了,提前发帖散分
- 调用了个外部程序,怎么获取一个程序的返回值??
- 用advstringgrid如何控制光标
- 如何实现在运行输入框中执行语句的效果
- 關於 FormatDateTime('mmm dd,yyyy',now)
- sql server 数据库,用wise9发布,如何使其发布后,不再需要安装sql server,就能顺利运行??
- 程序 如何分辨 自己是接收到 其它程序发给它的键盘消息 ,还是 物理键盘按键产生的消息?
- 如何在delphi中删除组件?
- RQDBTEXT怎样换行
- 我是一个新手谁帮我一下谢谢
- DateTimePicker 如何赋值
- 一个播放器的代码,有好多错,我都不知道该怎么改了,帮忙看下
言归正传,
感觉你可以用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函数。
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;
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;
我按照xzl_kye的思路,完全解决了我的问题,由衷感谢.xzl_kye去掉了我的8个星,思路非常的好.感谢!!!结贴.