我想反向读取一个文本文件,这样它会先从文本文件的底部读取。我确实找到了如何反向读取,但对我来说没有意义。有人能给我解释一下它是如何工作的吗?还有,如果有更好/更快的方法?它似乎在文件读取后完成所有工作,就像它会更快地从底部读取它。
var
datalist : TStringList;
lines,i : Integer;
saveLine : String;
begin
datalist := TStringList.Create;
datalist.LoadFromFile(filename); //loads file
lines := datalist.Count;
for i := lines-1 downto (lines div 2) do
begin
saveLine := datalist[lines-i-1];
datalist[lines-i-1] := datalist[i];
datalist[i] := saveLine;
end;
3条答案
按热度按时间628mspwn1#
(At至少在 Delphi 7中是这样,但是更新的版本应该有类似的行为)
.LoadFromFile()
呼叫.LoadFromStream()
,它将整个流/文件读入内存,然后调用.SetTextStr()
,它只调用每条线路.Add()
了解这一点有助于我们避免重新发明整个轮子,而是使用自己的类,并对
.Add()
方法进行一个细微的更改:现在我们使用自己的类:
uemypmqf2#
正如我在评论中提到的,创建一个接受
TStrings
示例的适配器类,并将其公开为另一个TStrings
,但是反过来,这可能是有用的。这可能看起来像这样:
如何使用它应该是显而易见的,我还没有测试代码,甚至没有执行它。
x3naxklr3#
如果你想使用
TStringList.LoadFromFile()
函数,那么另一种方法是将一个TStringList
复制到另一个TStringList
,这将比当前的方案更快,并且代码行更少。就我个人而言,我会亲自阅读文件。