Einzelnen Beitrag anzeigen

Pitti911

Registriert seit: 28. Jan 2009
22 Beiträge
 
#1

Speichern Von daten aus einem array endet in leerer Datei

  Alt 29. Jan 2009, 11:52
in folgener OnClick-Routiene sollen daten aus einer Datei in einen Dyn. Array eingelesen werden, nach einem Bestimmten Begriff gesucht werden(dann werden paar vergleiche angestellt)

und dann Falls gefunden Daten editiert und falls der eintrag nicht vorhanden ist ein neuer dazugesetzt werden

aber iwie Endet das ganze wenn der eintrag schon Vorhanden ist in totalem Wirrwar -.-

aber schaut euch den code selber an:
Code:
Type Thunter =record                   // das datenformat in dem gespeichert werden soll
            Acc: String[40];
            Bots: String[255];
            Score: Integer;
            end;

procedure Sortier(var A: array of Thunter); //sortieralgorythmus
var
  i: Integer;
  j: Integer;
  tmp: Thunter;
begin
  for i:= 1 to high(A) do
  begin
    j:= i;
    tmp := A[i];
    while (j > 0) and (A[j-1].Score > tmp.Score) do
    begin
      // Verschieben:
      A[j]:= A[j-1];
      Dec(j);
    end;
    A[j]:= tmp;
  end;
end;



procedure TForm1.Button1Click(Sender: TObject);
Var users: file Of Thunter;
    hilf: array of Thunter;
    c:boolean;
    i:integer;
    s:string;
begin
  i:=0;      //loop Variable null setzen
  c:=true;   //abfrage Variable Falsch setzen
  Assignfile(Users,'Hunter.dat'); //datei zuweisen
  if Fileexists('Hunter.dat') then
    Begin                                //falls existiert
      Reset(users);
      Setlength(hilf,Filesize(users)+1);
      seek(users,0);
      while not EOF(users) do
      Begin
        read(users,hilf[i]);
        inc(i);
      END;
      closefile(users);
      for i := 0 to high(hilf) do
      Begin
        if AnsiLowercase(hilf[i].Acc)=AnsiLowercase(Labelededit1.Text) then
          Begin
            c:=false;      //auf gefunden setzen ;) wichtig für paar zeilen später
            if pos(Ansilowercase(labelededit2.Text+' '+Labelededit3.text),Ansilowercase(hilf[i].Bots)+',')=0 then
            Begin
              s:=hilf[i].bots;
              hilf[i].Bots:=s+', '+Labelededit2.text+' '+Labelededit3.text;
              case strtoint(Labelededit3.Text) of
              0..90: hilf[i].Score:=hilf[i].Score+1;
              91..94:hilf[i].score:=hilf[i].score+2;
              95..96:hilf[i].score:=hilf[i].score+4;
                  97:hilf[i].score:=hilf[i].score+6;
                  98:hilf[i].score:=hilf[i].score+10;
                  99:hilf[i].score:=hilf[i].score+20;
              end;
            END
            Else Showmessage('bot wurde bereits vom entsprechenden Hunter erlegt');
          end
        ELSE
          if (i=high(hilf)) AND c then     //falls nicht gefunden dann Neunen 'acceinttrag' anlegen  (das funktioniert soweit getestet auch sehr gut)
          Begin
            hilf[i].Acc:=Labelededit1.Text;
            hilf[i].Bots:=labelededit2.Text+' '+Labelededit3.text;
            case strtoint(Labelededit3.Text) of
              0..90: hilf[i].Score:=1;
              91..94:hilf[i].score:=2;
              95..96:hilf[i].score:=4;
                  97:hilf[i].score:=6;
                  98:hilf[i].score:=10;
                  99:hilf[i].score:=20;
            end;
          end;
      end;
    CopyFile('hunter.dat','hunterbackup.dat',False);
    Delay(20);
    AssignFile(users,'hunter.dat');
    Rewrite(users);
    sortier(hilf);
    i:=0;   // loop wieder null setzen für das einspeichern der daten
    while (i<sizeof(hilf)) And (hilf[i].acc<>'') do
      Begin
        Write(users,hilf[i]);
        inc(i);
      end;
    closefile(users);
    end       //iwo hiervor muss der Fehler stecken aber wo???
  ELSE
  Begin
    i:=0;
    Rewrite(users);
    setlength(hilf,1);
    hilf[0].Acc:=labelededit1.Text;
    hilf[0].Bots:=labelededit2.Text+ ' '+ Labelededit3.text;
    case strtoint(Labelededit3.Text) of
       0..90:hilf[i].Score:=1;                                                      //funktioniert einwandfrei
      91..94:hilf[i].score:=2;
      95..96:hilf[i].score:=4;
          97:hilf[i].score:=6;
          98:hilf[i].score:=10;
          99:hilf[i].score:=20;
    end;
    Write(users,hilf[0]);
    Closefile(users);
  end;

end;

Falls jemand den Fehler findet und mir auch verrät wo dann bekommt er von mirein paar virtuelle ausgegeben
ich Find ihn nich den Fehler
  Mit Zitat antworten Zitat