2013-05-08 9 views
1

J'ai besoin de trier un fichier d'enregistrements mais je ne suis pas tout à fait sûr de la façon de le faire. J'ai un fichier de dossiers et j'ai essayé de les trier en utilisant un simple tri à bulles mais je suis coincé et j'ai besoin d'aide. Quelqu'un pourrait-il m'aider? Je vais lister le code ci-dessous.trier un fichier d'enregistrements erreur

HighScoreFile = file of HighScoreRecord; 


var 
frmEnterDetails: TfrmEnterDetails; 
HighScoreMasterFile: HighScoreFile; 
HighScore:HighScoreRecord; 
FileArray:array[1..20] of HighScoreRecord; 
i:integer; 

Procedure Sort 
var 
    i,j,temp:integer; 

AssignFile(HighScoreMasterFile, 'HighScores.dat'); 
Reset(HighScoreMasterFile); 
while not eof(HighScoreMasterFile) do 
begin  
    i:=i+1; 
    read(HighScoreMasterFile, HighScore); 
    FileArray[i].Name:=HighScore.Name; 
    FileArray[i].Date:=HighScore.Date; 
    FileArray[i].FinalScore:=HighScore.FinalScore; 

    for i:=0 19 do 
    for j:=0 to 18 do 
     if FileArray[j].Score > FileArray[j+1].Score then 
     begin 
      FileArray[temp]:=FileArray[j]; 
      FileArray[j]:=FileArray[j+1]; 
      FileArray[j+1]:=FileArray[temp]; 
     end; 
end; 

Toute aide serait formidable.

+0

Votre procédure de tri est incomplète. 'i' n'est pas initialisé. L'indexation 'FileArray' devrait commencer par 1 dans votre boucle for. 'temp' n'est jamais initialisé. 'i' n'est jamais utilisé dans la boucle for. etc. –

+0

Vous faites également le tri lors de la lecture du fichier. Lire le fichier entier, et après cela faire le tri. – RBA

+0

Merci les gars pour l'aide – user2180030

Répondre

0

il est possible que ce n'est pas correct à 100%, je n'ai pas testé dans l'IDE. Vous pouvez utiliser le débogueur afin de voir comment cet algorithme fonctionne étape par étape. Aussi ce lien vous explique très bien comment le tri à bulles fonctionne http://delphi.wikia.com/wiki/Bubble_sort.

HighScoreFile = file of HighScoreRecord; 


    var 
    frmEnterDetails: TfrmEnterDetails; 
    HighScoreMasterFile: HighScoreFile; 
    HighScore:HighScoreRecord; 
    FileArray:array[1..20] of HighScoreRecord; 
    i:integer; 

    Procedure Sort 
    var 
     i,j,temp:integer; 
    begin 
    AssignFile(HighScoreMasterFile, 'HighScores.dat'); 
    Reset(HighScoreMasterFile); 
    i := 0; 
    while not eof(HighScoreMasterFile) do 
    begin  
     i:=i+1; 
     read(HighScoreMasterFile, HighScore); 
     FileArray[i].Name:=HighScore.Name; 
     FileArray[i].Date:=HighScore.Date; 
     FileArray[i].FinalScore:=HighScore.FinalScore; 
    end; 

     for i:=1 to 19 do 
     for j:=1 to 18 do 
      if FileArray[i].Score > FileArray[j+1].Score then 
      begin 
       temp := i; 
       HighScore := FileArray[temp]; 
       FileArray[temp]:=FileArray[j]; 
       FileArray[j]:=HighScore; 
      end; 
    end; 
+0

pour afficher le tableau en utilisant une étiquette, est-ce que j'utiliserais quelque chose comme ça? lblScore1.Caption: = FileArray [1] .HighSore.FinalScore – user2180030

Questions connexes