2

あるプログラムで名前とスコアをテキスト ファイルに保存し、そのファイルから別のプログラムにロードしようとしています。問題は、ファイル全体または名前だけをロードするのではなく、各名前を参照することにあります。

次のように保存されます。

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;

これは名前を読み込もうとする私の試みですが、ファイルの最初の名前を各行に読み込むだけです。名前をロードする方法を考え出すと、スコアのロードは明らかなはずです。どんな助けでも大歓迎です。

4

2 に答える 2

5

保存手順は、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);

値を書き込む前に、stringgrid に行を追加する必要がある場合があります。

于 2012-04-16T14:37:26.663 に答える
4

assignfile/write/rewrite/closefile は非常に古いスタイルの Pascal です。Object Pascal、特に Delphi では、使用する TFileStream オブジェクトがあります。しかし、この特定のケースでは、TStringList オブジェクトをお勧めします。LoadFromFile メソッドと SaveToFile メソッドがありますが、「Name=Value」の行に値を格納するインデックス付きプロパティ Value もあります。

于 2012-04-16T14:40:40.023 に答える