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 aus einem array endet in leerer Datei (https://www.delphipraxis.net/128406-speichern-von-daten-aus-einem-array-endet-leerer-datei.html)

Pitti911 29. Jan 2009 11:52


Speichern Von daten aus einem array endet in leerer Datei
 
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 :D dann bekommt er von mirein paar virtuelle :cheers: ausgegeben :D
ich Find ihn nich den Fehler :wall:

Klaus01 29. Jan 2009 12:03

Re: Speichern Von daten aus einem array endet in leerer Date
 
Delphi-Quellcode:
 
while (i<sizeof(hilf)) And (hilf[i].acc<>'') do
  Begin
    Write(users,hilf[i]);
    inc(i);
  end;
Es ist, so glaube ich, nicht die beste Idee
sizeOf zur Größenbestimmung von dyn. Arrays zu verwenden.


Delphi-Quellcode:
while (i <= high(hilf) and (hilf[i].acc <> '' ) do
  begin
   // ..
  end;
Grüße
Klaus

Pitti911 29. Jan 2009 12:24

Re: Speichern Von daten aus einem array endet in leerer Date
 
ja schon klar ursprünglich hab ich ja auch high genommen :D aber da das nich funktioniert hat hab ich's dann mit sizeOf probiert^^ einen Versuch wars ja wert

ich war halt relativ ratlos :(

Klaus01 29. Jan 2009 13:32

Re: Speichern Von daten aus einem array endet in leerer Date
 
.. und funktioniert es jetzt?

Wenn nicht wie schaut es denn mit
hilf[i].acc aus.
Bei dem ersten auftreten von hilf[i].acc = '' bist Du aus der Schleife raus.

Wenn Du nur die Einträge abspeichern willst die hilf[i].acc <> ''
solltest Du das mit einer if Abfrage innerhalb der Schleife machen.

Grüße
Klaus

Pitti911 29. Jan 2009 14:04

Re: Speichern Von daten aus einem array endet in leerer Date
 
stimmt -.- ich bin vllt doof xD das werd ich gleich mal probieren :D das mir immer sowas dämliches passiert^^

naja danke dir erstma

EDIT: juhhuuuuu :) :love: :bounce1: :party: :spin2: :cheers: danke dir jetzt klappts :) und hier:

:cheers: :cheers:

Pitti911 30. Jan 2009 14:47

Re: Speichern Von daten aus einem array endet in leerer Date
 
mh gleiches Programm neuer Quelltext (leicht abgeändert weil der Bequemlichkeit halber soll ein text aus nem Post der das entsprechende Format hat nur noch in ein Memo kopiert werden müssen)

aber es soll auch ne "botliste erstellt werden" das einlesen in die datei "hunter.dat" funktioniert aus dem Memo raus wunderbar aber das erstellen der botliste liefert immer wieder einen Fehler :( und zwar sowas: "" ist kein gültiger integer

hier der quelltext der Funktion:
Code:
procedure TForm1.Button1Click(Sender: TObject);
Var users: file Of Thunter;
    hilf: array of Thunter;
    Bots: file of Tbot;
    bot:array of Tbot;
    tmpbot: Tbot;
    tmp: Thunter;
    c:boolean;
    i,j,p:integer;
    s,hs,hs2,hs3:string;
begin
  Button1.Enabled:=false;
  i:=0;
  c:=true;
  Try
  If memo1.Lines.Count=2 then //Beginn einlese algorythmus aus dem Memo
  Begin
    CopyFile('hunter.dat','hunterbackup.dat',False);
    tmp.Score:=0;
    tmp.Acc:='';
    tmp.Bots:='';
    hs:=memo1.lines[0];
    hs:=trim(hs);
    tmp.Acc:=hs;
    hs:=memo1.Lines[1];
    hs:=trim(hs);
    if hs[length(hs)]<>';' then
    hs:=hs+';';
    repeat
      hs:=trim(hs);
      p:=pos(' ',hs);
      hs2:=copy(hs,1,p-1);
      Delete(hs,1,p);
      tmp.Bots:=tmp.Bots+hs2;
      p:=pos(';',hs);
      hs2:=copy(hs,1,p-1);
      Delete(hs,1,p);
      hs2:=trim(hs2);
      tmp.Bots:=tmp.Bots+' '+hs2+';';
      tmp.Bots:=trim(tmp.Bots);
      case strtoint(hs2) of
         0..90:tmp.Score:=tmp.Score+1;
        91..94:tmp.Score:=tmp.Score+2;
        95..96:tmp.Score:=tmp.Score+4;
            97:tmp.Score:=tmp.Score+6;
            98:tmp.Score:=tmp.Score+10;
            99:tmp.Score:=tmp.Score+20;
      end;
    until hs='';
  end;
  //ende des einlese algorythmus in tmp
  Assignfile(Users,'Hunter.dat');
  if Fileexists('Hunter.dat') then
    Begin
      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
        hs:='';
        hs2:='';
        if AnsiLowercase(hilf[i].Acc)=AnsiLowercase(tmp.acc) then
          Begin
            c:=false;
            s:=hilf[i].bots;
            hs:=tmp.Bots;
            Repeat
              hs:=trim(hs);
              p:=pos(' ',hs);
              hs2:=copy(hs,1,p-1);
              Delete(hs,1,p);
              p:=pos(';',hs);
              hs3:=copy(hs,1,p-1);
              Delete(hs,1,p);
              hs3:=trim(hs3);
              if pos(hs2+' '+hs3,s)=0 then
              Begin
                s:=s+' '+hs2+' '+hs3+';';
                s:=trim(s);
              end
              Else
              Begin
                case strtoint(hs3) of
                   0..90:tmp.Score:=tmp.Score-1;
                  91..94:tmp.Score:=tmp.Score-2;
                  95..96:tmp.Score:=tmp.Score-4;
                      97:tmp.Score:=tmp.Score-6;
                      98:tmp.Score:=tmp.Score-10;
                      99:tmp.Score:=tmp.Score-20;
                end;
                ShowMessage('Bot: '+hs2+' '+hs3+#13#10+'has been hunted down already');
              end;
            until hs='';
            hilf[i].Bots:=s;
            hilf[i].Score:=hilf[i].Score+tmp.score;
          end
        ELSE
          if (i=high(hilf)) AND c then
          Begin
            hilf[i]:=tmp;
        end;
      end;
    AssignFile(users,'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);
    end
  ELSE
  Begin
    i:=0;
    Rewrite(users);
    Write(users,tmp);
    Closefile(users);
    Memo1.Text:='';
  end;
  //botliste
  I:=0;
  AssignFile(bots,'bots.dat');
  if Fileexists('Hunter.dat') then
    Begin
      Reset(users);
      Setlength(hilf,Filesize(users));
      seek(users,0);
      while not EOF(users) do
      Begin
        read(users,hilf[i]);
        inc(i);
      END;
      Closefile(users);
    end;

  I:=0;
  if Fileexists('bots.dat') then
    Begin
      Reset(bots);
      Setlength(bot,Filesize(bots)+100);
      seek(bots,0);
      while not EOF(users) do         //DA IS EIN FEHLER -.- da mus bots hin xD
      Begin
        read(bots,bot[i]);
        inc(i);
      END;
      Closefile(bots);
    end
    ELSE Setlength(bot,500);
  I:=0;
  J:=0;
  Repeat
    c:=true;
    p:=pos(' ',hilf[i].Bots);
    tmpbot.Botname:=copy(hilf[i].Bots,1,p-1);
    Delete(hilf[i].Bots,1,p);
    hilf[i].Bots:=trim(hilf[i].bots);
    p:=pos(';',hilf[i].Bots);
    tmpbot.Botlvl:=strtoint(copy(hilf[i].Bots,1,p-1));
    j:=0;
    While (j<=high(bot)) AND c do
      Begin
        if (ansilowercase(bot[j].Botname)=ansilowercase(tmpbot.Botname)) And (Not (bot[j].Botname='')) then
        Begin
          c:=false;
          if tmpbot.Botlvl>bot[j].Botlvl then bot[j].Botlvl:=tmpbot.Botlvl;
        end
        ELSE
        Begin
          if c then
          Begin
            bot[j]:=tmpbot;
          end;
        end;
        inc(j);
      end;
    inc(i);
  until i=high(hilf);
  Application.ProcessMessages;
  Sortierb(bot);
  rewrite(bots);
  i:=0;
  while (i<=high(bot)) do
  Begin
    if bot[i].botname<>'' then Write(bots,bot[i]);
    inc(i);
  end;
  Closefile(bots);
  //ende Botliste
  Button1.Enabled:= true;
  Except
    showMessage('Fehleingabe bei den erlegten Bots! Bitte überprüfe das Format!!'+#13#10+'Es muss lauten:'+#13#10+'Bot1 Botlvl; Bot2 Botlvl;...;');
    CopyFile('hunterbackup.dat','hunter.dat',false);
    button1.enabled:=true;
    memo1.Text:='';
  end;
ich würd mich doch ungemein freuen wenn mir wieder so schnell und kompetent geholfen werden könnte

Pitti911 30. Jan 2009 23:29

Re: Speichern Von daten aus einem array endet in leerer Date
 
mag denn keiner was sagen?

oder versteht den quelltext keiner?

auch wenn jemand den sinn nicht versteht kann er mich ja wenigstens Fragen was der sinn is ;) ich antworte dann auch ganz lieb :)

ich wollt eigentlich nur keinen neuen thread auf machen wenn ich hier aber keine Hilfe mehr bekomme dann mach ich doch nen neuen auf

mfg Pitti

Klaus01 31. Jan 2009 08:24

Re: Speichern Von daten aus einem array endet in leerer Date
 
Guten Morgen Pitti,

pushen nach nur 10 Stunden wird hier nicht so gern gesehen.
Ausserdem wäre es hilfreich uns zu sagen wo der Fehler auftritt.
Um das genauer festzustellen kannst Du mit F8/F7 schrittweise Dein Programm
abarbeiten.

Kandidaten für Dein beschriebenebs Fehlverhalten
sind IntToStr() Operation.

Delphi-Quellcode:
tmpbot.Botlvl:=strtoint(copy(hilf[i].Bots,1,p-1));
Wenn copy einen Leerstring zurückliefert, ist das ein ungültiger Integerwert.

Wenn Du Dich mal selber mit dem Debuggen beschäftigen möchtest, findest
Du hier ein Tutorial von MaBuSe
das die ersten Schritte in diese Richtung beschreibt.


Grüße
Klaus

Pitti911 31. Jan 2009 13:16

Re: Speichern Von daten aus einem array endet in leerer Date
 
ich hab auch schon die Fehlerquelle gefunden :D zumindest die eine mit dem "" not a Valid integer is gefixt ;) danke für das tutorial :) ich glaub das wird mir in Zukunft noch viel helfen

aber das nächste Problem Kommt schon :( jetzt wird von dem algorithmus nur der erste Bot gespeichert (in der 'bots.dat') leider aber wahr :(
wo der Fehler liegt konnte ich leider nicht rausfinden

falls ich die Fehlerquelle noch finde werd ich das hier posten :D
an sonsten muss ich wohl leider noch ein bissel warten bis iwem hier die Fehlerquelle 'ins auge springt'

tja und das mit dem uppen des threads tut mir leid was is denn hier so die regel nach welcher zeit man das machen darf ;) wenn man das darf

mfg Pitti

DeddyH 31. Jan 2009 13:31

Re: Speichern Von daten aus einem array endet in leerer Date
 
Wenn nach Ablauf von 24 Stunden keine Antwort erfolgt ist, ist das Pushen legitim. Und ich möchte Dich bitten, künftig nur die relevanten Codestellen zu posten und in Delphi- statt Code-Tags einzuschließen. Mir ist das so wie oben einfach zuviel zu lesen ;)

Pitti911 31. Jan 2009 13:35

Re: Speichern Von daten aus einem array endet in leerer Date
 
ok

das problem war ja hauptsächlich das ich am anfang noch nich wusste wo denn genau der fehler liegt :( bzw das gebiet in dem er liegt

wenn ich das gewusst hätte hätt ich auch sicher nur die neuen Typen und das wichtige gepostet :roll:

Teekeks 31. Jan 2009 13:52

Re: Speichern Von daten aus einem array endet in leerer Date
 
könnte es daran liegen?
Delphi-Quellcode:
    Bots: file of Tbot;
    bot:array of Tbot;
Der File ist doch nur für Einen Wert von TBot und nicht für ein ganzes Array of TBot. Oder?

DeddyH 31. Jan 2009 13:58

Re: Speichern Von daten aus einem array endet in leerer Date
 
Neenee, das ist schon richtig so.

Pitti911 31. Jan 2009 15:07

Re: Speichern Von daten aus einem array endet in leerer Date
 
ok das mit dem speichern in der datei hab ich jetzt anders gelöst aber es hat sich mir ein weiteres Problem offenbart :( die Maximale Zeichenlänge bei

Delphi-Quellcode:
Type Thunter =record              
            Acc: String[40];
            Bots: String[255]; //genau hier da hätt ich gerne Mehr platz weil die Anzahl doch die 255 leicht übersteigt
            Score: Integer;
            end;
geht das iwie? also gibt es einen Finalisierten string typ der mehr als 255 zeichen erlaubt? (wenn der nich Finalisiert ist mag delphi die datensätze nich speichern)

und @Teekeks: wie deddyH schon gesagt hat is das schon so richtig :D

@alle: btw is mir relativ egal wie optimal oder auch nich das geschrieben is ich weiß das es sicher schnellere wege gibt^^ und auch vom speicherbedarf her günstigere aber wenn ich sehe das meine Dateien nach 2 einträgen noch nich mal ein KB ausfüllen is mir das doch relativ egal vor allem wenn man bedenkt das 1024MB RAM zur Zeit absolutes Minimum sind wenn man sich nen neuen PC kauft^^ und auch für die Processoren macht das keinen großen unterschied.
und mehr als 100 Einträge wird es wohl nie in einer der beiden Dateien geben :D selbst wenn wär der speicherbedarf immer noch lachhaft

Klaus01 31. Jan 2009 15:13

Re: Speichern Von daten aus einem array endet in leerer Date
 
Habe mal einen Kommentar eingefügt.
Delphi-Quellcode:
Repeat
    c:=true;
    p:=pos(' ',hilf[i].Bots);
    tmpbot.Botname:=copy(hilf[i].Bots,1,p-1);
    Delete(hilf[i].Bots,1,p);
    hilf[i].Bots:=trim(hilf[i].bots);
    p:=pos(';',hilf[i].Bots);
    tmpbot.Botlvl:=strtoint(copy(hilf[i].Bots,1,p-1));
    j:=0;
    While (j<=high(bot)) AND c do
      Begin
        // c wird hier false, wenn bit[j].BotName=tmpbot.BotName und bot[j].Botname <> ''
        // und c wird in dieser Schleife nie wieder true. Ist das so gewollt?
        if (ansilowercase(bot[j].Botname)=ansilowercase(tmpbot.Botname)) And (Not (bot[j].Botname='')) then
        Begin
          c:=false;
          if tmpbot.Botlvl>bot[j].Botlvl then bot[j].Botlvl:=tmpbot.Botlvl;
        end
        ELSE
        Begin
          if c then
          Begin
            bot[j]:=tmpbot;
          end;
        end;
        inc(j);
      end;
    inc(i);
  until i=high(hilf);
Grüße
Klaus

Klaus01 31. Jan 2009 15:19

Re: Speichern Von daten aus einem array endet in leerer Date
 
Zitat:

Zitat von Pitti911
ok das mit dem speichern in der datei hab ich jetzt anders gelöst aber es hat sich mir ein weiteres Problem offenbart :( die Maximale Zeichenlänge bei

Delphi-Quellcode:
Type Thunter =record              
            Acc: String[40];
            Bots: String[255]; //genau hier da hätt ich gerne Mehr platz weil die Anzahl doch die 255 leicht übersteigt
            Score: Integer;
            end;

Du willst die Bots alle in einem String speichern?
Besser geeignet wäre da doch ein Array

Delphi-Quellcode:
Type
  Thunter =record              
    Acc: String[40];
    Bots: Array [0..100] String[15];
    Score: Integer;
 end;
Geeigneter als eine Statisches Array wäre aber ein dyn. Array oder eine TList.
Dann ginge da mit dem Speichern aber nicht mehr so einfach.

Grüße
Klaus

Pitti911 31. Jan 2009 17:01

Re: Speichern Von daten aus einem array endet in leerer Date
 
das mit dem statischen Array is wahrscheinlich die beste idee :D

aber wenn dann werd ich den array wohl gleich als Array of Tbot schreiben :D
da wird die ausgabe zwar wieder etwas komplizierter aber naja was solls :D
hoffentlich geht dann alles glatt^^ also das ich einmal den quelltext ohne Fehler schreibe xD

vllt sollt ich doch mal mit so nem komischen "diagramm" das meine Lehrer immer Predigen anfangen :D
obwohl eigentlich is ja grade das diagramm immer in meinem kopf xD nur helfen tuts bei solchen probs nie^^
aber iwo muss es doch ne möglichkeit geben nen längeren Finalisierten string als den 255er geben :gruebel: da müsst ich nämlich nix mehr ändern^^ weil das speichern an sich klappt schon nur dass ich immer zu wenig zeichen habe und darum das dann oftmals nix wird :(

mal schaun ich werd das noch iwie lösen wenn keiner nen finalisierten string kennt

DeddyH 31. Jan 2009 17:05

Re: Speichern Von daten aus einem array endet in leerer Date
 
*Puh* nach diesem Post möchte ich Dich bitten, das hier einmal in Ruhe durchzulesen: http://www.delphipraxis.net/internal...t.php?t=147368

nuclearping 31. Jan 2009 17:06

Re: Speichern Von daten aus einem array endet in leerer Date
 
Zitat:

hoffentlich geht dann alles glatt^^ also das ich einmal den quelltext ohne Fehler schreibe xD
Ich hab gehört, es soll helfen, wenn man erstmal versteht was man machen will, bevor man drauflos programmiert.

Pitti911 31. Jan 2009 17:41

Re: Speichern Von daten aus einem array endet in leerer Date
 
@DeddyH: Ich weiß nicht wirklich was dein Problem ist. Meine Grundfrage war ja, nachdem ich die Probleme die ich vorher hatte gelöst habe, ob es einen Finalisierten Stringtyp gibt der mehr als die 255 Zeichen (enstrpechend ein shortstring) speichern kann. Falls sich dein Post auf das "TBot" bezieht

hier wie eben jener Typ deklariert ist:
Delphi-Quellcode:
Type Tbot = record
              Botname:string[40];
              Botlvl: byte;
            end;
ansonsten war die mein Problem ja klar. Falls nicht würde ich gerne darauf Verzichten hier darüber zu streiten und das per PM klären.
€: ok vllt bezieht sich das ja auch auf meine Rechtschreibung/Zeichensetzung aber ich glaube nicht das das ein Grund ist auf so ein Tutorial zu verlinken. In einem solchen Fall hätte auch ein netter Hinweiß wie
"achte in Zukunft bitte besser auf deine Rechtschreibung" diesen Zweck erfüllt. Falls es sich auf die Recherche bezieht muss ich sagen das ich mit dem Internet schon oft die Erfahrung gemacht habe das man oft nicht alles findet, vorallem bei doch schon etwas "spezielleren" wünschen.

@nuclearping: also ich möchte nur mal sagen das ich im Grunde schon weiß was ich machen will. Nur weil ich geschrieben habe "hoffentlich geht dann alles glatt^^ also das ich einmal den quelltext ohne Fehler schreibe xD" geschrieben habe bedeutet das noch lange nicht das ich einfach so "drauflos programmiere" das bezog sich wohl eher darauf das ich oftmals einfach nur echte Anfängerfehler mache die mir beim schreiben des Quelltextes nicht auffalen. Wie z.B. eine Variable zurückzusetzen in einer Schleife in der ich diese wieder brauche oder ähnliches. Ich hoffe du verstehst was ich meine.

konstruktive Kritik wie die von Klaus01 oder hinweise wo der Fehler liegen könnte nehme ich dankend an. Jedoch kann ich auf Kommentare wie:

Zitat:

Zitat von nuclearping
Ich hab gehört, es soll helfen, wenn man erstmal versteht was man machen will, bevor man drauflos programmiert.

getrost verzichten. :wall:

nuclearping 31. Jan 2009 17:54

Re: Speichern Von daten aus einem array endet in leerer Date
 
Ansichtssache. Für mich ist die Grenze des guten Geschmacks schon erreicht, wenn jmd einen riesigen Batzen Quellcode in ein Forum stellt und dann mit "Wer findet den Fehler" kommt. Und das gleich zwei mal. Dass sich jemand findet, der sich die Zeit und Energie nimmt, das auseinander zu klamüstern und auch noch konstruktive Tipps gibt, ist nicht selbstverständlich.
Und bis zur Seite zwei klang es auch nicht so, als ob du das programmiert hättest.

DeddyH 31. Jan 2009 18:03

Re: Speichern Von daten aus einem array endet in leerer Date
 
Mein Einwand bezog sich nicht auf sachliche Fragen, sondern auf die Lesbarkeit Deines Beitrages (Interpunktion, Groß- und Kleinschreibung, Ausschreiben von Worten). Wenn man so einen Beitrag erst 4 mal lesen muss, um ihn zu begreifen, verliert man schnell die Lust ;)

Pitti911 31. Jan 2009 18:32

Re: Speichern Von daten aus einem array endet in leerer Date
 
Ah ok das kann ich verstehen :).

was ich allerdings nicht verstehen kann ist das nuclearping es sich nicht vorstellen kann oder konnte(bis zur zweiten Seite), warum auch immer. (Eine Frage ob ich das selber programmiert habe hätte wohl auch gereicht)

aber jetzt wieder back to topic: gibt es auch einen Stringtyp der eine feste Länge hat wie zum Beispiel der shortstring halt nur länger?

Klaus01 31. Jan 2009 19:10

Re: Speichern Von daten aus einem array endet in leerer Date
 
Was Du noch ausprobieren könntest ist,
Deine bots in ein Array of Char zu packen.
Dieses kannst Du größer als 255 Zeichen machen.

Delphi-Quellcode:
TTestRecord = packed record
  s : Array [0..1023] of char;
end;
Delphi-Quellcode:
var
  rec : TTestRecord;
  s : String;
begin
  setLength(s,length(rec.s)+1);   // Länge des Strings = Länge des Arrays + 1
  move(rec.s,s[1],length(rec.s)); // kopiere das Array in den String
  s := '1111111111111111111111111111111111111111111111';
  s := s + '22222';
  move(s[1],rec.s,length(s)-1);   // kopiere den String in das Array
  setLength(s,0);
end;
Du könntest also intern mit einem String arbeiten
(durch anhängen (konkatenation) von Strings kann der String größer als 255 Zeichen werden)
wenn Du den String dann abspeichern willst kannst Du ihn dann in ein Array of Char kopieren.

Aber für das nächste Problem, mache bitte einen eigenständigen Thread auf.

Grüße
Klaus

Pitti911 31. Jan 2009 19:41

Re: Speichern Von daten aus einem array endet in leerer Date
 
ok danke dir :) jetzt hab ich wieder was gelernt :)

ich werd die frage auch soeben als erledigt markieren.

falls ich mit deinem Vorschlag nicht zurechtkommen sollte mach ich noch einen neuen Thread auf ;) aber erstmal werd ich mich mit diesem Thema ein wenig beschäftigen das kann ja nicht schaden. (Auch wenn ich der überzeugung bin das ich das nie in der Schule brauchen werde :D)

mfg Pitti und nochmal danke an alle die sich gedanken gemacht haben wie man mir helfen könnte ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 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