Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Speichern von Daten in einen Array überschreibt vorherige (https://www.delphipraxis.net/129305-speichern-von-daten-einen-array-ueberschreibt-vorherige.html)

Pitti911 16. Feb 2009 18:23


Speichern von Daten in einen Array überschreibt vorherige
 
Ich bins wieder :hi:

mancher mag sich vllt noch an mich erinnern :D

Es ist wieder relativ viel Quellcode aber ich bemühe mich nur das wichtigste zu schreiben den rest werd ich mit ... "rauskommentieren" und kurz schreiben was das macht ;)

Das Problem ist das in der Datei 'hunter.dat' am ende immer nur der zuletzt eingefügte Datensatz steht und ich nicht weiß warum :(

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var users: file Of Thunter;
    hilf: array of Thunter;
    Bots: file of Tbot;
    bot:array of Tbot;
    tmpbot: Tbot;
    acc: string[40];
    c,fa,fb:boolean;
    i,k,j,p,l:integer;
    hs,hs2:string;
begin
  Button1.Enabled:=false;
  i:=0;
  c:=true;
  if Fileexists(ExtractFilePath(ParamStr(0))+'bots.dat') then
  Begin
// ... einlesen der vorhandenen Daten aus den Files das sollte eigentlich stimmen drum lass ich das hier weg ;) anzahl der Einträge in den Botlisten in k gespeichert
  Try
  If memo1.Lines.Count=2 then //Beginn einlese algorythmus aus dem Memo
  Begin
    hs:=memo1.lines[0];
    hs:=trim(hs);
    Acc:=hs;
    hs:=memo1.Lines[1];
    hs:=trim(hs);
    if hs[length(hs)]<>';' then
    hs:=hs+';';
    fa:=true;
    repeat
// ...                      Die im Memo stehenden Daten werden zerlegt und in tmpbot abgespeichert
      for I := 0 to high(hilf) do
      Begin
        if ansilowercase(hilf[i].Acc)=ansilowercase(acc) then
        Begin
          fa:=false;
          hilf[i].Score:=hilf[i].Score+haddbot(tmpbot,hilf[i].botl);
        end
        ELSE
        Begin
          if (i=high(hilf)) and fa then
          Begin
            setlength(hilf,high(hilf)+2);
            fa:=false;
            hilf[i].Acc:=acc;
            hilf[i].Botl[0]:=tmpbot;
            case hilf[i].Botl[0].Botlvl 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;
      end;
      c:=addbot(tmpbot,bot);
      I:=0;
      if c then inc(k);
    until hs='';
  end;
  //ende des einlese algorythmus in Botlisten
  assignfile(bots,ExtractFilePath(ParamStr(0))+'bots.dat');
  Sortierb(bot);
  rewrite(bots);
  i:=0;
  while (i<=high(bot)) do
  Begin                                                                           //hier is dann halt das speichern der Daten die in den Arrays stecken in die Dateien
    if bot[i].botname<>'' then Write(bots,bot[i]);
    inc(i);
  end;
  Closefile(bots);
  //ende Botliste
  AssignFile(users,ExtractFilePath(ParamStr(0))+'hunter.dat');
  Rewrite(users);
  sortierH(hilf);
  i:=0;
  while (i<=high(hilf)) do
    Begin
      if hilf[i].Acc<>'' then
      Write(users,hilf[i]);
      inc(i);
    end;
  closefile(users);
  Memo1.Text:='';
  Button1.Enabled:= true;
  Except
//Fehlerbehandlung (bei exceptions) die klappt auch ganz gut :D
  end;

end;


Bitte schimpft nicht zu sehr mit mir weil das schon wieder so viel Quelltext ist aber die Liste der Hunter will einfach immer nur den zuletzt gespeicherten behalten :(

und das Forum is einfach SUPI :love:

sirius 16. Feb 2009 18:27

Re: Speichern von Daten in einen Array überschreibt vorherig
 
Hast du mal im Debugger geprüft, wie oft "write" aufgerufen wird?

Pitti911 16. Feb 2009 19:25

Re: Speichern von Daten in einen Array überschreibt vorherig
 
ich habs grad ausprobiert (wenn alles laufen sollte wie ich will sollte es zwei mal ausgeführt werden)
aber das Programm hat die Anweisung nur ein mal ausgeführt :(

€DIT: Kann man das auch anders überprüfen als jede Zeile einzeln ausführen zu lassen und zu zählen?

sirius 16. Feb 2009 21:10

Re: Speichern von Daten in einen Array überschreibt vorherig
 
über debugger so:
Du setzt ein breakpoint an die stelle (F5)

Pitti911 17. Feb 2009 09:25

Re: Speichern von Daten in einen Array überschreibt vorherig
 
ja ok so hab ich das ja auch gemacht ;) aber hat jemand eine Ahnung warum Write nur ein mal ausgeführt wird? und kann ich mir die Datensätze iwie Anzeigen lassen so wie sie in dem Array stehen?

sirius 17. Feb 2009 09:28

Re: Speichern von Daten in einen Array überschreibt vorherig
 
Schua mal im Menu Start, da gibt es so sachen, wie "Ausdruck hinzufügen" [Strg][F5], "Auswerten/ändern" [Strg][F7] .... Damit kannst du alle Werte überwachen.

Pitti911 17. Feb 2009 11:24

Re: Speichern von Daten in einen Array überschreibt vorherig
 
das mit dem Werte überwachen hab ich nicht gemacht aber mir ist aufgefallen dass ich beim einlesen 'Hunter.dat' und bei der Ausgabe 'hunter.dat' geschrieben hatte :wall: das problem ist jetzt behoben allerdings wird jetzt immer der Wert der schon in der Datei stand einfach nur dupliziert :wall:

ich hab also nicht wirklich was verändert nur stimmen jetzt die Dateibezeichnungen auch überein :dancer2:

Edit:
Ich depp man sollte doch das überprüfen was in den Dateien steht^^
da wird jetzt wenigstens alles korrekt gespeichert also muss der Fehler wohl oder übel in der Ausgabe liegen. Allerdings werde ich mich damit erstmal selber befassen


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz