30分:求一字符串排列方法 ( 积分: 0 )

  • 主题发起人 主题发起人 zqssoft
  • 开始时间 开始时间
Z

zqssoft

Unregistered / Unconfirmed
GUEST, unregistred user!
已知listbox1中有下列格式的字符串:
权威/0.5
保证/1.0
自己/1.7
。。。(省略若干行)
如何按后面的数字大小,从高到低排列为如下格式:
自己/1.7
保证/1.0
权威/0.5
。。。(省略若干行)

谢谢。
 
用COPY函数把‘/’后面的数字取出来,不就可以排列了

select * from 表 order by copy(字段,pos('/',字段)+1,length(字段)-pos('1',字段))
 
写错了
select * from 表 order by copy(字段,pos('/',字段)+1,length(字段)-pos('/',字段))
 
因为这些数据不在表中,哪位大侠,能不能给出小弟一个其它不用数据表查询的办法呀.
 
如果你希望在列表中排序,最好使用ListView,有OnCompare事件直接支持自定义的排序;关于ListBox并不支持排序,你可以看一下VCL源代码就知道了。
 
请问:用ListView怎么加载listbox中的数据,并按上述要求进行排顺序。
 
看一下代码:
procedure TForm2.FormCreate(Sender: TObject);
begin
ListView1.ViewStyle := vsList;
ListView1.SortType := stText;
ListView1.Items.Add.Caption := '权威/0.5';
ListView1.Items.Add.Caption := '保证/1.0';
ListView1.Items.Add.Caption := '自己/1.7';

end;

procedure TForm2.ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
var
value1, value2: Extended;
begin
value1 := StrToFloat(Copy(item1.Caption, pos('/', item1.Caption) + 1, MaxInt)) * 1000000;
value2 := StrToFloat(Copy(item2.Caption, pos('/', item2.Caption) + 1, MaxInt)) * 1000000;
Compare := - Round(value1 - value2);

end;
 
谢谢你,:),十分感谢。
 
后退
顶部