2012-04-16 3 views
2

名前とスコアを1つのプログラムでテキストファイルに保存し、ファイルから別のプログラムにロードしようとしています。問題は、単にファイル全体または最初の名前を読み込むのではなく、各名前を参照することです。Delphi 7のテキストファイルから情報をロードする

それは、このようなとして保存されます。

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; 

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

+0

あなたの最初の段落では、ファイル全体を読み込むのではなく、名前を参照することに問題があると言われていますが、最後の段落では名前をグリッドに移す問題があります。それは問題が何であるかについて矛盾する声明です。あなたが解決しようとしている問題を理解するために、より良い努力をしてください。解決策を他にどのように認識しますか?あなたが求めていることを正確に明らかにするために質問を編集してください。 –

+0

申し訳ありません私はまだ私のAレベルをやっており、業界用語の知識は非常に弱いです。私が「それらを表示するために特にターゲット設定する」ということを参照することによって、これは間違った用語かもしれないが、他の人は私を理解しているようだった。おそらく大虐殺でしょうか? –

答えて

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

値を書き込む前に文字列グリッドに行を追加する必要がある場合があります。

+1

テキストを書き込むための 'IntToStr(ScoreRecord.Score)'。 'i'も1から始めるべきです。 –

+0

ロード手順は完璧に働きました。 金曜日にそれをテストすると、複数の名前とスコアが保存されていますが、私は書き直し線だと思っていますが、私の所持しているものは覚えていません –

+0

本当に複数の名前/私が前にそれをやったときに特にイライラするスコア。それはレコードのファイルに追加したくない、これを回避する方法があるのか​​、それをテキストファイルとして宣言して別の方法で書き込む必要があるのですか(これは私が試みたもので、反対側で読むのは悪夢となりました) 。 –

4

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

+0

ありがとう、私の問題の修正のように聞こえる。私は今それについて知り、多分問題があるかどうか尋ねます。 –

+0

これはうまくいくはずですが、私のコードを並べ替えるだけで、以下の解決策が美しく機能しました。とにかくありがとうございました –

関連する問題