【问题标题】:Loading information from a text file in Delphi 7在 Delphi 7 中从文本文件加载信息
【发布时间】:2012-04-16 14:22:22
【问题描述】:

我正在尝试使用一个程序将姓名和分数保存到一个文本文件中,然后从另一个程序中的文件加载它。问题在于引用每个名称,而不是仅加载整个文件或仅加载第一个名称。

这样保存:

scores = record
        name: string[20];
        Score: integer;

procedure TForm1.BtnSaveClick(Sender: TObject);
var
scoresFile: file of scores;
begin
scoresrecord.name := EdtName.Text;
scoresrecord.Score := Score;
assignfile(scoresFile, 'Teacher.txt');
rewrite(scoresFile);
write(scoresFile, scoresrecord);
closeFile(scoresFile);
end; 

并使用以下方法加载到字符串网格中:

 scores = record
        name: string[20];
        Score: integer;

var 
ScoreRecord: scores;
scoresFile: file of scores;

StrGrdScores.Cells[0,0]:='Name';
StrGrdScores.Cells[1,0]:='Score';
assignfile(scoresFile, 'C:\Computing\AlgebraNew\Teacher.txt');
reset(scoresFile);
while not Eof(scoresFile) do
read(scoresFile, ScoreRecord);
closeFile(scoresFile);
for I := 1 to StrGrdScores.Row do
StrGrdScores.cells[0,i]:=ScoreRecord.name;

这是我加载名称的尝试,但它只是将文件中的第一个名称加载到每一行中。当我弄清楚如何加载名称时,加载分数应该很明显。非常感谢任何帮助。

【问题讨论】:

  • 您的第一段说问题在于引用名称,而不是加载整个文件,但您的最后一段说问题在于将名称转移到网格中。这些是关于问题所在的相互矛盾的陈述。请做出更好的努力来了解您要解决的问题。您还将如何识别解决方案?请编辑问题以明确您的要求。
  • 对不起,我还在考 A-levels,我对行业术语的了解非常薄弱。通过引用我的意思是“专门针对它们以显示它们”,这可能是错误的术语,但其他人似乎理解我。也许是迂腐?

标签: delphi text-files


【解决方案1】:

您的保存过程似乎只将一条记录保存到文件中。

您的加载过程将每一行读入同一个变量,覆盖之前的值。从文件中读取值时将值写入网格。

i = 0;
while not Eof(scoresFile) do
begin
  read(scoresFile, ScoreRecord);
  StrGrdScores.cells[0,i]:=ScoreRecord.name;
  StrGrdScores.cells[1,i]:=ScoreRecord.Score;
  inc(i);
end;
closeFile(scoresFile);

在写入值之前,您可能需要在字符串网格中追加一行。

【讨论】:

  • IntToStr(ScoreRecord.Score) 写文本。 i 也应该以 1 开头。
  • 加载程序运行良好,谢谢。您对保存过程也是正确的,但是在星期五对其进行测试时,它保存了多个名称和分数,我假设它是重写行,但我不记得那里有什么
  • 真的很难保存多个名称/分数,当我以前这样做时尤其令人沮丧。它不想附加到记录文件中,有没有办法解决这个问题,或者我必须将其声明为文本文件并以不同的方式写入它(我尝试过,但在另一边阅读它变成了一场噩梦) .
  • Rewrite 如果不存在则创建文件,如果存在则清空它。你可能想看看reset
【解决方案2】:

assignfile/write/rewrite/closefile 是非常老式的 Pascal。在 Object Pascal 中,特别是在 Delphi 中,有 TFileStream 对象可供使用。但在这种特定情况下,我建议使用 TStringList 对象。它有 LoadFromFile 和 SaveToFile 方法,还有一个索引属性 Value,它将值存储在“Name=Value”的行中。

【讨论】:

  • 谢谢,这听起来像是解决了我的问题。我现在会找到它,也许会问我是否还有其他问题。
  • 虽然我可以看到这会奏效,但下面的解决方案效果很好,只需重新排序我的代码。还是谢谢你
猜你喜欢
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多