【问题标题】:How to seek a textfile?如何查找文本文件?
【发布时间】:2018-07-06 23:33:25
【问题描述】:

我正在使用一个文本文件来存储一些数据,以便以后可以使用它来创建报告,但是我存储的数据是多行的,即。

1
1
2
2

假设我想从数字 2 中读取数据,如何在没有 1 的情况下将变量分配给第三行和第四行(实际数据中的数字不会相同)。 Seek() 将不起作用,因为它是一个文本文件,如果我更改了类型,我将无法使用 writeln()。无论如何我可以在不使用记录的情况下做到这一点吗?

编辑:正好有 96 行,所有行的位数可能不同。

【问题讨论】:

  • 所有行的长度都一样吗?文件编码是定长编码吗?
  • 对不起,我是这些东西的新手,所以我不明白第二个问题,希望我的编辑能回答一些问题。
  • 您可以通过搜索了解固定长度的文本编码。这可能需要您花一些时间阅读有关该主题的内容。即使编码是固定长度的,如果行长无法预测,你怎么能指望随机访问。例如,在不知道前面所有行的长度的情况下,如何预测第 50 行的开始位置?如果您了解文件在磁盘上的表示方式以及存在哪些信息,它将真正为您提供帮助。
  • 你考虑过使用readln吗?

标签: pascal lazarus


【解决方案1】:

由于输入文件很小,您可以使用TStringList 来处理它。这是一个例子。

名为 adrian.txt 的示例文本文件的前几条记录包含随机数。

15
37
46
29
33
37
37
50
41
48
3
9
31
50

Lazarus 代码:TStringList 对象s 使用其LoadFromFile 方法将文本文件的内容加载到自身中。现在可以使用各个记录的内容,并按其编号进行索引。只需注意这些数字是零相关的;即第一条记录成为TStringList中的第0个字符串。

procedure TForm1.Button1Click(Sender: TObject);
var
  s: TStringList;
begin
  s := TStringList.Create;
  s.LoadFromFile('adrian.txt');
  Memo1.Lines.Add(s[0]);
  Memo1.Lines.Add(s[1]);
  Memo1.Lines.Add(s[2])
end;                 

按下按钮,这就是你所看到的。

【讨论】:

    猜你喜欢
    • 2011-06-13
    • 1970-01-01
    • 2012-11-10
    • 2019-02-27
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多