在Delphi7中从文本文件加载信息

在Delphi7中从文本文件加载信息,delphi,text-files,Delphi,Text Files,我试图用一个程序将名字和分数保存到一个文本文件中,然后从另一个程序的文件中加载。问题在于引用每个名称,而不仅仅是加载整个文件或仅加载第一个名称 将其保存为: scores = record name: string[20]; Score: integer; procedure TForm1.BtnSaveClick(Sender: TObject); var scoresFile: file of scores; begin scoresrecord.name

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

将其保存为:

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;

这是我加载名称的尝试,但它只是将文件中的第一个名称加载到每一行中。当我研究如何载入姓名时,载入分数应该是显而易见的。非常感谢您的帮助。

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

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);
加载过程将每一行读入同一个变量,覆盖以前的值。从文件中读取值时,将其写入网格

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);

在写入值之前,您可能需要向stringgrid追加一行。

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

第一段说问题在于引用名称,而不是加载整个文件,但最后一段说问题在于将名称传输到网格中。关于问题是什么,这些说法相互矛盾。请更加努力地理解您要解决的问题。否则,您将如何识别解决方案?请编辑此问题,以明确您的要求。很抱歉,我仍在修A-levels,而且我对行业术语的了解非常薄弱。我的意思是“为了展示它们而专门针对它们”,这可能是一个错误的术语,但其他人似乎理解我。也许是迂腐?谢谢你这听起来像是解决我问题的办法。我现在会找到它,也许会问我是否有更多的问题。虽然我可以看出这是可行的,但下面的解决方案非常有效,只需重新排序我的代码。无论如何,感谢您
IntToStr(ScoreRecord.Score)
编写文本<代码>i也应该以1开头。加载过程运行良好,谢谢。您对保存过程的看法也是正确的,但是在周五测试时,它保存了多个名称和分数,我假设这是重写行,但我记不起我在保存多个名称/分数时遇到了什么困难,尤其是当我以前这样做时,这让我感到沮丧。它不想附加到记录文件中,有没有办法解决这个问题,或者我必须将它声明为文本文件并以不同的方式写入它(我尝试了,但在另一端读取却成了一场噩梦)。如果不存在,重写会创建文件,如果存在,则清空文件。你可能想看看。