procedure TForm1.Button1Click(Sender: TObject);
var St :TStringList;
begin
St :=TStringList.Create;
{Ascii编码:
c 99
C 67
W 87
AWSAccessKeyId 和Action,
大小写不敏感,是Action前面,
大小写敏感, 是AWSAccessKeyId前面。}
St.Add('AWSAccessKeyId');
St.Add('Action'); St.CaseSensitive :=True; //true或false,比较结果,都是大小写不敏感,是否delphi的bug。
//St.Sorted :=false;
St.Sort;
if 'AWSAccessKeyId' >'Action' then
ShowMessage('AWSAccessKeyId 大')
else ShowMessage('Action 大');
ShowMessage(St.Strings[0] +' ' +St.Strings[1]); //显示为Action AWSAccessKeyId,说明大小写不敏感的。
//而我要的是大小写敏感的。
end;
语言自带外围类功能较弱,种类不是很全的。 用C#,是核心设计好,外围类功能强,种类全面。
Sort uses AnsiCompareStr to sort the strings when CaseSensitive is true and AnsiCompareText when CaseSensitive is false. AnsiCompareStr的帮助:
Most locales consider lowercase characters to be less than the corresponding uppercase characters. This is in contrast to ASCII order, in which lowercase characters are greater than uppercase characters. Thus, setting S1 to 'a' and S2 to 'A' causees AnsiCompareStr to return a value less than zero, while CompareStr, with the same arguments, returns a value greater than zero.解决办法是自己从TStringList派生一个类,并覆盖CompareStrings方法(把AnsiCompareStr换成CompareString):
type
TMyStringList = class(TStringList)
protected
function CompareStrings(const S1, S2: string): Integer; override;
end;{ TMyStringList }function TMyStringList.CompareStrings(const S1, S2: string): Integer;
begin
if CaseSensitive then
Result := CompareStr(S1, S2)
else
Result := CompareText(S1, S2);
end;procedure TForm1.Button1Click(Sender: TObject);
var St :TStringList;
begin
St :=TMyStringList.Create;
St.Add('AWSAccessKeyId');
St.Add('Action');
st.CaseSensitive := True;
St.Sort; showmessage(st.Text);
st.free;
end;
function TStringList.CompareStrings(const S1, S2: string): Integer;
begin
if CaseSensitive then
Result := AnsiCompareStr(S1, S2)
else
Result := AnsiCompareText(S1, S2);
end;
如果你看一下AnsiCompareStr的帮助
Note: Most locales consider lowercase characters to be less than the corresponding uppercase characters. This is in contrast to ASCII order, in which lowercase characters are greater than uppercase characters. Thus, setting S1 to 'a' and S2 to 'A' causees AnsiCompareStr to return a value less than zero, while CompareStr, with the same arguments, returns a value greater than zero.
它说了:因为很多淫认为大写的就是大,小写的就是小,拉个ascii与一般淫的常识不一致,所以如果你要求排序时区分大小写的话,俺就把小写的a淫为比大写的A小,所以blabla.....