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

时间:2010-12-29 12:36:29

标签: delphi sorting csv

我有一个TTable,我正在将CSV文件加载到此TTable。有三个领域:Id,Hits&路径。 我用另一个查询为这个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

1 个答案:

答案 0 :(得分:7)

您之前的问题提到您使用ttASCII作为TableTypettASCII表,AFAIK,不支持索引。

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

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

TClientDataSet组件添加到您的应用程序中。将ProviderName设置为您在上面添加的DataSetProvider。 (我在下面的步骤中将其命名为CDS。)

按此顺序打开TableClientDataSet(CDS)。

Table1.Active := True;
CDS.Active := True;

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

CDS.LogChanges := False;

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

// Repeat for each additional index
with CDS.IndexDefs.AddIndexDef do
begin
  Name := 'ndxHits';
  Fields := 'Hits';
  Options := [];
end;

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

CDS.IndexName := 'ndxHits';

像使用任何其他数据集一样使用ClientDataSet。使用LocateFindKey进行搜索,使用InsertAppend添加,过滤,依此类推。