Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Programmschritt wird übersprungen..warum?...


Stinger47 - Mo 01.01.07 02:53
Titel: Programmschritt wird übersprungen..warum?...
hi erstma..^^
es soll OnFormCreate überprüft werden ob irgendeine zeile des RichEditfelds dem aktuellen datum entspricht..
das datum falls vorhanden steht immer alleine in einer zeile....

Delphi-Quelltext
 
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
{ ... }
begin

  k:= RichEdit1.GetTextLen;
  richedit1.Lines.LoadFromFile('c:\abcde.abc');


  for I := 0 to RichEdit1.Lines.Count
        do
          begin
            if RichEdit1.Lines[i] = DateToStr(Now)
              then
                begin
                  Flag := False;              //hier überspringt er und geht gleich in die folgende if-anweisung
                  if RichEdit1.Lines[k] <> '' //kurze frage funzt das mit dem <> das es als "nicht leer" gilt die zeile?
                    then
                      begin
                        RichEdit1.Text  :=    RichEdit1.Text + #13#10;
                      end;
                  RichEdit1.SelStart:=  RichEdit1.GetTextLen;
                  Exit;
                end
              else
               Flag    := True;
          end;
end;


Zeile 84 überspringt er und geht gleich in zeile 85 aber die zeile ist wichtig....
wenn ich die if-anweisung auskommentiere arbeitet er uch zeile 84 ab sonst net....
thx schonma im voraus...:)


jaenicke - Mo 01.01.07 04:56

Hmm, eigentlich sollte das schon abgearbeitet werden. Bist du sicher, dass danach Flag immer noch True ist? Vielleicht sieht es nur im Debugger so aus als würde das übersprungen werden.

Ach so: Wenn Flag eine lokale Variable ist, dann wird die Anweisung natürlich nicht ausgeführt, weil der Compiler merkt, dass die nix bringt. Schließlich würde der Wert bei einer lokalen Variable ja nie verwendet. Aber ich gehe mal davon aus, dass das eine globale Variable ist, alkso eine, die nicht nur in der Prozedur vorhanden ist.


Stinger47 - Mo 01.01.07 05:18

Danke hat funktioniert..^^
hatte sie auf lokal und net global nun macht ers aber nun haperts immernoch woanders aba komt in nen neuen post...
dank dir und frohes neues..;)


jaenicke - Mo 01.01.07 05:26

Dir auch ein frohes neues Jahr.
Und noch ne kleine Erklärung hinterher, falls dir das folgende nicht klar sein sollte...

Wenn du eine Variable lokal deklarierst, dann existiert sie nur so lange wie die Prozedur ausgeführt wird. Sie wird also praktisch vor der Ausführung angelegt und direkt danach gelöscht (einfach gesagt). Bei der nächsten Ausführung ist der Wert einer lokalen Variablen dann nicht der, den sie zuletzt bei der letzten Ausführung hatte!
Bis zur ersten Zuweisung ist der Wert einer lokalen Variablen bei jeder Ausführung der Prozedur undefiniert.


Popov - Mo 01.01.07 09:43

1.) Auch wenn solche Sätze lustig aussehen, sie sind unheimlich schwer zu lesen:
Zitat:
hatte sie auf lokal und net global nun macht ers aber nun haperts immernoch woanders aba komt in nen neuen post...

Du tust dir mit net, aba, ers usw. keinen Gefallen, weil du Gefahr läufst, daß einige Leute sich sowas nicht antun und erst garnicht zu ende durchlesen. Dann machst du es aber auch denen schwer die helfen wollen, aber diesen Unsinn lesen müssen. Sowas ist lustig bei OffTopic, aber nicht im ersten Gespräch.

2.) Entweder du hast einen verkürzten Code oder die Variable Falg hat keinen Sinn. In diesem Fall bringt es nichts sie global zu machen. Und laut dem Code den man hier sehen kann ist Flag zu nichts nütze. In 99,99% aller Fälle erkennt der Compiler schon richtig ob eine Variable nötig ist und entfernt unsinnige oder unnötige Zeile. Also, nicht global machen, sondern ganz entfernen.