2012-04-16 41 views
2

我試圖用一個程序將名稱和分數保存到文本文件中,並從另一個程序中的文件加載它。問題在於引用每個名稱,而不是僅加載整個文件或只是名字。從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

您的第一段說這個問題是在引用名稱,而不是加載整個文件,但最後一段說這個問題是在將名稱傳輸到網格中。這些是關於什麼是問題的相互矛盾的陳述。請更好地瞭解您嘗試解決的問題。你還會怎樣認識一個解決方案?請編輯該問題以清楚地說明您要求的內容。 – 2012-04-16 14:54:15

+0

對不起,我仍然在做我的A-levels,而且我對這個行業的條款知之甚少。通過引用我的意思是「專門針對它們以展示它們」,這可能是錯誤的術語,但其他人似乎理解我。兒童也許? – 2012-04-16 15:14:42

回答

5

您的保存過程似乎只將一條記錄保存到該文件。

您的加載過程將每行讀入同一個變量,覆蓋以前的值。當您從文件中讀取值時,將值寫入網格。

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追加一行。

+1

'IntToStr(ScoreRecord.Score)'寫入文本。 '我'也應該從1開始。 – 2012-04-16 15:17:29

+0

加載過程完美地工作謝謝你。 你也是正確的保存程序,但是當它在星期五測試它保存了多個名稱和分數,我假設它是重寫行,但我不記得我在那裏有什麼 – 2012-04-16 17:00:23

+0

真的很努力保存多個名稱/分數,這在我之前完成時尤其令人沮喪。它不想追加到記錄文件,有沒有辦法解決這個問題,還是我必須將其聲明爲文本文件並以不同的方式寫入(我試過了,而在另一邊讀取它變成了一場噩夢) 。 – 2012-04-17 13:01:27

4

assignfile/write/rewrite/closefile是非常老式的Pascal。在Object Pascal中,特別是在Delphi中,使用了TFileStream對象。但在這個特定的情況下,我會建議TStringList對象。它有LoadFromFile和SaveToFile方法,還有一個索引屬性值,它用「Name = Value」存儲行中的值。

+0

謝謝你,聽起來像解決我的問題。我現在會發現它,也許問我是否有更多問題。 – 2012-04-16 15:02:09

+0

儘管我可以看到這樣做會起作用,但下面的解決方案可以很好地工作,只需對我的代碼重新排序即可。不管怎樣,謝謝你 – 2012-04-16 16:50:32

相關問題