如何在TTable中对CSV文件进行排序?

Vij*_*air 3 csv delphi sorting

我有一个TTable,我正在加载CSV文件到这个TTable.有三个领域:Id,Hits&Path.我用另一个查询为这个TTable做了一些查找字段.

我想排序表.我收到消息"功能不受支持".当我试着打电话的时候AddIndex('ndxHits','HITS',[]);

这是我的代码:

with DM.TblCVResults do
begin
  try
    Active     :=  False;
    TableName  :=  'C:\CSV\123.txt';
    Active     :=  True;

    AddIndex('ndxHits','HITS',[]);
    AddIndex('ndxCandidate','LkCandidate',[]);
    AddIndex('ndxLastCV','LkLastCV',[]);
    AddIndex('ndxPostCode','LkPostCode',[]);
    IndexDefs.Update;
    Active     :=  True;
    DM.TblCVResults.IndexName := 'ndxHits';
  except
    on E: Exception do
      MsgError(E.Message);
  end;
end
Run Code Online (Sandbox Code Playgroud)

Ken*_*ite 7

您之前提到的问题是您使用ttASCIITableType.ttASCII表,AFAIK,不支持索引.

最好的办法是将ttASCII TTable内容加载到TClientDataset`(CDS)中,它支持索引.我没有使用ttASCII表作为源测试,但它应该像下面这样简单:

TDatasetProvider组件添加到您的应用程序.将它的DataSet属性设置为您的TTable.

TClientDataSet组件添加到您的应用程序.将它设置ProviderNameDataSetProvider您在上面添加的内容.(我在下面的步骤中将其命名为CDS.)

按顺序打开TableClientDataSet(CDS).

Table1.Active := True;
CDS.Active := True;
Run Code Online (Sandbox Code Playgroud)

TTable如果您不需要,请关闭更新.(它快得多.)

CDS.LogChanges := False;
Run Code Online (Sandbox Code Playgroud)

运行以下代码以创建索引:

// Repeat for each additional index
with CDS.IndexDefs.AddIndexDef do
begin
  Name := 'ndxHits';
  Fields := 'Hits';
  Options := [];
end;
Run Code Online (Sandbox Code Playgroud)

将该ClientDataSet's IndexName属性设置为您想要激活的索引:

CDS.IndexName := 'ndxHits';
Run Code Online (Sandbox Code Playgroud)

ClientDataSet像使用任何其他数据集一样使用.使用Locate或搜索它,使用或FindKey添加,InsertAppend过滤它,等等.