delphi编程 文本数字排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi编程 文本数字排序相关的知识,希望对你有一定的参考价值。

在一个文本中保存有8000行数据记录,如下:
1624
0341
3204
0302
5901
7534
……

现在需要将8000行数据导入memo,在导入过程中通过比较,实现以下排序:
0302
0341
1624
3204
5901
7534
……

如何实现?请高手赐教!!谢谢!(分不多,请多包涵)。

不用那么麻烦,用TStringList就可以排序。

procedure ReadFileAndSorted(const AFileName: string; var AResult: TStringList);
begin
  AResult.Clear;
  AResult.LoadFromFile(AFileName);
  AResult.Sort;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  TSResult: TStringList;
begin
  TSResult:= TStringList.Create;
  ReadFileAndSorted('d:\\test.txt', TSResult);
  Memo2.Lines.Clear;
  Memo2.Lines.AddStrings(TSResult);
  TSresult.Free;
end;

参考技术A 用冒泡排序法,添加一个循环,具体还的看你项目需求追问

高手,能否给段代码看看。。。实在没头绪。。。谢谢~~

Angular 5 按日期、文本、数字排序

【中文标题】Angular 5 按日期、文本、数字排序【英文标题】:Angular 5 Sort by date, text, numbers 【发布时间】:2018-08-22 13:49:49 【问题描述】:

我已经实现了可重复使用的排序功能,按数字和文本排序工作正常,但按日期排序失败。

orderBy(array: Array<any>, fieldName: string, direction: string) 
  return array.sort((a, b) => 
    let objectA: number|string = '';
    let objectB: number|string = '';
    [objectA, objectB] = [a[fieldName], b[fieldName]];
    let valueA = isNaN(+objectA) ? objectA.toString().toUpperCase() : +objectA;
    let valueB = isNaN(+objectB) ? objectB.toString().toUpperCase() : +objectB;
    return (valueA < valueB ? -1 : 1) * (direction == 'asc' ? 1 : -1);
  );

如何按日期、文本数字和特殊字符排序。

【问题讨论】:

我建议使用 moment.js 【参考方案1】:

试试这个:

orderBy(array: Array<any>, fieldName: string, direction: string) 
  return array.sort((a, b) => 
    let objectA: number|string|Date = '';
    let objectB: number|string|Date = '';
    [objectA, objectB] = [a[fieldName], b[fieldName]];

    // I assume that objectA and objectB are of the same type
    return typeof objectA === 'string' ? objectA.localeCompare(objectB) : objectA - objectB;
  );

如果无法识别Date 类型,您可能需要在您的compilerOptions 中添加es6 条目,详情请参阅this answer

更新

如果您要排序的所有值都是字符串,请尝试以下操作:

orderBy(array: Array<any>, fieldName: string, direction: string) 
  return array.sort((a, b) => 
    let objectA: number|string|Date = '';
    let objectB: number|string|Date = '';
    // map function here will convert '15/12/2018' into '2018/12/15'
    // so we can compare values as strings, numbers and strings
    // will remain unchanged
    [objectA, objectB] = [a[fieldName], b[fieldName]].map(i => i.split('/').reverse().join('/'));

    return isNaN(+objectA) ? objectA.localeCompare(objectB) : +objectA - +objectB;
  );

【讨论】:

"objectA.localeCompare(objectB) : objectA - objectB;"给出一个错误.. 不工作 如果 objectA 和 objectB 是字符串,这应该可以。在浏览器的调试器控制台中尝试'aaa'.localeCompare('ddd')。在您的情况下,也许 objectA 或 objectB 不是字符串?但由于 typescript Date 类型,它应该会产生错误。请使用您的数组和代码创建 Plunker 或 stackblitz,我会尽力提供帮助。另见developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 哪个错误为您提供“objectA.localeCompare(objectB) : objectA - objectB;”?【参考方案2】:

我认为这可能是最好的,因为 localCompare 函数 对于之后返回正数,对于之前返回负数,对于等于返回 0(在本例中我正在比较 .name ,它是 this.array 中的对象 ab 的属性)

this.array.sort((a, b) =>  
 return a.name.localeCompare(b.name);
);

【讨论】:

【参考方案3】:

如果你使用的类型脚本比你可以这样做,还没有尝试过,但你可以试用

public orderby(fieldName : string)

    switch (typeof obj[fieldName].constructor.name)            
            case "String":
                array.sort();
            case "Number":
                  array.sort(function(a,b)
                       return a-b);
                 );
            case "Date"://you can check type and add accordingly 
            //as suggested by @Andriy  its going to be object 
                 array.sort(function(a,b)
                       return new Date(b.date) - new Date(a.date);
                 );
            default:
                throw new Error("Type of T is not a valid return type!");
        
     else 
        throw new Error("Key '" + key + "' does not exist!");
    


对于日期排序,我喜欢这样做,转换日期中的值并获取返回零、正值或负值的减法运算的值

array.sort(function(a,b)
  return new Date(b.date) - new Date(a.date);
);

【讨论】:

这将只对日期列进行排序。我也需要文字和数字。动态列和值。 @Gopalakrishnan - 所以你需要通用方法?? @Gopalakrishnan - 所以你使用的是打字稿?? 是的。将此函数作为服务调用 @Gopalakrishnan - 您可以试用解决方案可能对您有用

以上是关于delphi编程 文本数字排序的主要内容,如果未能解决你的问题,请参考以下文章

在Delphi中对Tstringlist中的数字数据进行数字排序

delphi调用dll函数 字符串参数

delphi编程实现为Windows窗口标题栏添加新按钮

delphi编程

delphi与彩票编程的问题 有追加分!!!!!!!!!

请问如何通过Delphi编程,做到一个输入框中,只能输入汉字,而不能输入数字或其他字符?