掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
実数型を文字型に変換してソートする方法 (ID:149855)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Stringgridで実数型を文字型に変換してGridsortでsortしてみたのですが、うまくいきません。 stringgridには、実数型をformatで文字型に変換しています。 striggird1.cells[0,i+1]:=format('%.0f',[a/b]); これをGridsortでsortしています。 1 2 3 10 とデータがあれば、gridsortすると 10 1 2 3 となってしまいます。 ******************************* procedure GridSort(SGrid:TStringGrid; ACol:Integer; KeyIsNum:Boolean=False); procedure MergeSort(Buffer: TStringList; ARow, Count: Integer); var I, J, Center : Integer; Temp: TStringList; Hikaku: Boolean; begin if Count = 1 then Exit; Center := Count div 2; MergeSort(Buffer, ARow, Center); MergeSort(Buffer, ARow + Center, Count - Center); I:=0; J:=0; Temp := TStringList.Create; try while (I < Center) and (J < Count - Center) do begin if KeyIsNum then Hikaku:=( StrToFloatDef(Buffer[ARow+I],0) > StrToFloatDef(Buffer[ARow+Center+J],0) ) else Hikaku:=( CompareStr(Buffer[ARow+I],Buffer[ARow+Center+J]) >0 ); if Hikaku then begin Temp.AddObject(Buffer[ARow + Center + J], Buffer.Objects[ARow + Center + J]); Inc(J); end else begin Temp.AddObject(Buffer[ARow + I], Buffer.Objects[ARow + I]); Inc(I); end; end; if I = Center then while J < Count - Center do begin Temp.AddObject(Buffer[ARow + Center + J], Buffer.Objects[ARow + Center + J]); Inc(J); end else while I < Center do begin Temp.AddObject(Buffer[ARow + I], Buffer.Objects[ARow + I]); Inc(I); end; for I:=0 to Count-1 do begin Buffer[ARow + I] := Temp[I]; Buffer.Objects[ARow + I] := Temp.Objects[I]; end; finally Temp.Free; end; end; var ARow: Integer; Buffer: TStringList; begin with SGrid do begin Buffer := TStringList.Create; try //Buffer に key とそれに対応する Rows を格納する for ARow:=FixedRows to RowCount-1 do begin Buffer.AddObject(Cells[ACol, ARow], TStringList.Create); TStringList(Buffer.Objects[ARow - FixedRows]).Assign(Rows[ARow]); end; //Buffer を実際にソートする MergeSort(Buffer, 0, RowCount - FixedRows); //Buffer.Sort; と置き換え //ソートしたデータを Grid に書き戻す for ARow := FixedRows to RowCount - 1 do begin Rows[ARow].Assign(TStringList(Buffer.Objects[ARow - FixedRows])); TStringList(Buffer.Objects[ARow - FixedRows]).Free; end; finally Buffer.Free; end; end; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.