2012-04-16 2 views
2

하나의 프로그램으로 텍스트 파일에 이름과 점수를 저장하려고 시도하고 다른 파일의 파일에서로드하려고합니다. 문제는 파일 전체 또는 단순히 이름을로드하는 대신 각 이름을 참조하는 것입니다.델파이 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

저장 프로시 저는 하나의 레코드 만 파일에 저장하는 것처럼 보입니다.

로드 프로시 저는 각 행을 동일한 변수로 읽어 들여 이전 ​​값을 덮어 씁니다. 파일에서 값을 읽으면 그리드에 값을 씁니다.

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은 매우 오래된 스타일의 파스칼입니다. 오브젝트 파스칼과 특히 델파이에는 사용할 TFileStream 객체가 있습니다. 그러나이 특별한 경우에는 TStringList 개체를 제안합니다. LoadFromFile 및 SaveToFile 메서드가 있지만 "Name = Value"라는 줄에 값을 저장하는 인덱스 속성 값도 있습니다.

+0

내 문제의 수정 소리가 들리셔서 고맙습니다. 나는 지금 그것에 대해 알아보고 더 많은 이슈가 있는지 물어볼 것입니다. –

+0

비록 이것이 효과가 있었음을 알았지 만, 아래 코드는 단순히 코드를 재정렬하여 멋지게 작동했습니다. 어쨌든 고마워. –