如何使用Delphi的TTable组件对CSV文件进行高效排序操作?
- 内容介绍
- 文章标签
- 相关推荐
本文共计388个文字,预计阅读时间需要2分钟。
我有一张TTable,我正在将CSV文件添加到这张TTable中。有三个字段:Id、Hits路径。我用另一个查询为这个TTable做了一些查找字段。我想排序表。我收到消息功能不支持。当我尝试调用AddIndex()时。
我有一个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 您之前提到的问题是您使用ttASCII作为TableType. ttASCII表,AFAIK,不支持索引.
最好的办法是将ttASCII TTable内容加载到TClientDataset`(CDS)中,它支持索引.我没有使用ttASCII表作为源测试,但它应该像下面这样简单:
将TDatasetProvider组件添加到您的应用程序.将它的DataSet属性设置为您的TTable.
将TClientDataSet组件添加到您的应用程序.将它的ProviderName设置为您在上面添加的DataSetProvider. (我在下面的步骤中将其命名为CDS.)
按顺序打开Table和ClientDataSet(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的IndexName属性设置为您想要活动的索引:
CDS.IndexName := 'ndxHits';
像使用任何其他数据集一样使用ClientDataSet.使用Locate或FindKey搜索它,使用Insert或Append添加它,过滤它,等等.
本文共计388个文字,预计阅读时间需要2分钟。
我有一张TTable,我正在将CSV文件添加到这张TTable中。有三个字段:Id、Hits路径。我用另一个查询为这个TTable做了一些查找字段。我想排序表。我收到消息功能不支持。当我尝试调用AddIndex()时。
我有一个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 您之前提到的问题是您使用ttASCII作为TableType. ttASCII表,AFAIK,不支持索引.
最好的办法是将ttASCII TTable内容加载到TClientDataset`(CDS)中,它支持索引.我没有使用ttASCII表作为源测试,但它应该像下面这样简单:
将TDatasetProvider组件添加到您的应用程序.将它的DataSet属性设置为您的TTable.
将TClientDataSet组件添加到您的应用程序.将它的ProviderName设置为您在上面添加的DataSetProvider. (我在下面的步骤中将其命名为CDS.)
按顺序打开Table和ClientDataSet(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的IndexName属性设置为您想要活动的索引:
CDS.IndexName := 'ndxHits';
像使用任何其他数据集一样使用ClientDataSet.使用Locate或FindKey搜索它,使用Insert或Append添加它,过滤它,等等.

