Delphi文本文件为空

发布于 2024-10-03 13:25:54 字数 3224 浏览 8 评论 0原文

我最近开始用delphi编程。

现在,我有一个练习。

我必须将最高分保存在文本文件中。 我有这个函数:

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

输入 (scorelijst/lijst1):

test,2,10
test,3,11

现在,我想在文本文件中的正确位置对新的最高分进行排序。 但是,输出是空的...... 我做错了什么?

评论是荷兰语,对此深表歉意。

TArray = 字符串数组;

I recently started to programm in delphi.

Now, I've got an exercice.

I have to save a top score in a text file.
I've got this function:

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

The input (scorelijst/lijst1):

test,2,10
test,3,11

Now, I want to sort the new top score, on the right place in the text file.
But, the output is empty...
What am I doing wrong?

Comments are in dutch, sorry for that.

TArray = array of string;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瑾兮 2024-10-10 13:25:54

Delphi 6 有 TStringList.CustomSort 吗?如果是这样,请创建您自己的排序例程并使用它对 StringList 进行排序。

Does Delphi 6 have TStringList.CustomSort? If so, create your own sorting routine and use that to sort the StringList.

一个人练习一个人 2024-10-10 13:25:54

您应该简单地让 TStringList 自行排序。即:

outputSL.Sorted := true;

You should simply let the TStringList sort itself. i.e.:

outputSL.Sorted := true;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文