2010-11-19 8 views
1

Ich habe vor kurzem begonnen, in Delphi zu programmieren.Delphi Textdatei leer

Jetzt habe ich eine Übung.

Ich muss eine Top-Punktzahl in einer Textdatei speichern. Ich habe diese Funktion habe:

{Voeg topscore toe aan het goede bestand.} 
function addTopScore(sudokuNumber : Integer; naam : String; tijd : Integer; fouten : Integer):boolean; 
var 
    buffer : TStringList; 
    aantal, aantal2, aantal3, i, i2, i3 : Integer; 
    scoreArray : array of TArray; 
    sameScoreArray : array of TArray; 
    plaatsScoreArray : array of Integer; 
    inputS1 : String; 
    zelfde, stopChecking : boolean; 
    insertBefore : Integer; 
    outputSL : TStringList; 
    outputNR : Integer; 
begin 
    {Haal de topscores op} 
    buffer := TStringList.Create; 
    buffer.LoadFromFile('scorelijst/lijst' + IntToStr(sudokuNumber)); 
    {Initialiseer variabelen} 
    aantal := 0; 
    aantal3 := 0; 
    aantal := (buffer.Count - 1); 
    zelfde := False; 
    result := True; 
    {Vul de score array (TStringList to Array)} 
    for i := 0 to aantal do 
    begin 
    SetLength(scoreArray, i + 1); 
    inputS1 := buffer[i]; 
    scoreArray[i] := Unit2.explode(',', inputS1, 0); 
    end; 

    {Controleer waar hij moet worden ingevoerd} 
    insertBefore := 0; 
    stopChecking := False; 
    for i2 := 0 to aantal do 
    begin 
    {Als er al een punt is gevonden, hoeft niet meer gecontroleerd te worden} 
    if(stopChecking = False) then 
    begin 
     {Als er een score van dezelfde persoon beter is, moet het result false zijn} 
     if (StrToInt(scoreArray[i2][1]) < fouten) AND (scoreArray[i2][1] = naam) then 
     begin 
     result := False; 
     end; 

     {Als het aantal fouten, hetzelfde is als de huidige waarde, sla de positie op} 
     if (StrToInt(scoreArray[i2][1]) = fouten) then 
     begin 
     {aantal zelfde waarden + 1} 
     aantal3 := aantal3 + 1; 

     {Geef de arrays de goede lengte} 
     SetLength(sameScoreArray, aantal3); 
     SetLength(plaatsScoreArray, aantal3); 

     {Vul de arrays} 
     sameScoreArray[(aantal3 - 1)] := scoreArray[i2]; 
     plaatsScoreArray[(aantal3 - 1)] := i2; 

     {Er is een zelfde waarde gevonden.} 
     zelfde := True; 
     end; 

     {Als het aantal fouten groter is, dan de nieuwe} 
     if ((StrToInt(scoreArray[i2][1]) > fouten) = True) then 
     begin 
     {Stop de for loop checking} 
     stopChecking := True; 

     {Als er geen zelfde waarde is gevonden, moet hij voor deze i2 worden ingevoerd} 
     if (zelfde = False) then 
      insertBefore := i2; 
     end; 
    end; 
    end; 

    outputSL := TStringList.Create; 
    if (insertBefore > 0) then 
    begin 
    outputNR := 0; 
    for i3 := 0 to aantal do 
    begin 
     if (i3 = insertBefore) then 
     begin 
     outputSL[outputNR] := naam + ',' + IntToStr(fouten) + ',' + IntToStr(tijd); 
     outputNR := outputNR + 1; 
     end; 

     outputSL[outputNR] := scoreArray[i3][0] + ',' + scoreArray[i3][1] + ',' + scoreArray[i3][2]; 
     outputNR := outputNR + 1; 
    end; 
    end 
    else if (zelfde = True) then 
    begin 
    //Not finished. 
    end; 

    outputSL.SaveToFile('scorelijst/lijst' + IntToStr(sudokuNumber)); 
end; 

Der Eingang (scorelijst/lijst1):

test,2,10 
test,3,11 

Nun möchte ich die neue Bestnote sortieren, an der richtigen Stelle in der Textdatei. Aber der Ausgang ist leer ... Was mache ich falsch?

Kommentare sind in Niederländisch, sorry dafür.

TArray = array of string;

Antwort

2

Hat Delphi 6 TStringList.CustomSort? Wenn ja, erstellen Sie Ihre eigene Sortierroutine und verwenden Sie diese, um die StringList zu sortieren.

0

Sie sollten einfach den TStringList lassen Art selbst. d. h .:

outputSL.Sorted: = true;