Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi booleanvariable immer false? (https://www.delphipraxis.net/68664-booleanvariable-immer-false.html)

Nicodius 3. Mai 2006 15:37


booleanvariable immer false?
 
hmm

ich überprüfe hier zwei listen miteinander - sollte ein wert in der anderen auftauchen wird für den durchgang eine boolean variable umgeschalten damit sollte es nicht der fall sein der wert aus einer 3ten liste geladen werden kann...

irgendwie bleibt aber change immer false :(

Delphi-Quellcode:
procedure TForm1.DoItClick(Sender: TObject);
var hilftext, lw : String;
    i,e : Integer;
    liste, liste2 : TSTringdynarray;
    text : String;
    change : boolean;
begin
  change := false;
  memo1.Text := memo1.text + ' ';
  liste := explode(' ',Memo1.Text);
  liste2 := explode(' ',Memo1.Text);

  for i := low(liste) to high(liste) do
    liste[i] := sortWirrWarr(liste[i]);

   for i := low(liste) to high(liste) do
   begin

     if length(liste[i]) > 3 then   // das zB soll gleichbleiben
     begin

       for e := 0 to Virtlist.Count-1 do

         if liste[i] = Virtlist[e] then // wenn liste[i](wirrwar) gleich listeneintrag[e]
         begin
           liste[i] := Virtlist1[e]; // wort austauschen mit richtiger Wortliste
           change := true; //änderung stadtgefunden
         end

     end
     else
       liste[i]:= liste2[i];

     if change = false then
       liste[i]:= liste2[i]; // bei der letzten überprüfung eines wortes bleibt es gleich
     change := false;
   end;
ich such schon ewig was da falsch sein könnte :( auch die schleife schon durchgestept

grüße Nico

mkinzler 3. Mai 2006 15:40

Re: booleanvariable immer false?
 
In Zeile 36 setzt du die Variable in jedem Fall auf false.

Die Muhkuh 3. Mai 2006 15:45

Re: booleanvariable immer false?
 
Außerdem nicht auf

Delphi-Quellcode:
if BoolVar = false / true then
prüfen, sondern auf

Delphi-Quellcode:
if BoolVar then

// oder

if not BoolVar then

Nicodius 3. Mai 2006 15:56

Re: booleanvariable immer false?
 
Delphi-Quellcode:
 if change = false then
       liste[i]:= liste2[i]; // bei der letzten überprüfung eines wortes bleibt es gleich
     change := false;
das liegt daran dass am ende change auch immer auf false gesetzt wird (muss ja wieder auf true schaltbar sein damit man den ursprünglichen wert behält)


ja das mit dem not hab ich korregiert danke :D aber das wars leidern icht geht immer noch nix :(

markusj 3. Mai 2006 16:37

Re: booleanvariable immer false?
 
Nico, hast du schon eine Ausführen auf die Position von Change := true gemacht?
Dann einen Step weiter gehen und den Variablenwert analysieren ... wenn er dann immer noch false ist, stimmt was nicht ... oder Optimierts der Compiler so zusammen, dass es trotzdem geht?

mfG
Markus

marabu 3. Mai 2006 17:39

Re: booleanvariable immer false?
 
Hallo Nico,

wenn du deine VirtList sortierst, dann musst du nicht ständig über die ganze Liste iterieren. In meinem Code ist SortedList die Liste mit den normierten Strings (CINO für Nico) und in TextEdit steht der zu verwendende Buchstabenvorrat. In Objects steht der Index des nicht-normierten Strings im Wörterbuch - bei mir eine ListBox:

Delphi-Quellcode:
procedure TDemoForm.MatchButtonClick(Sender: TObject);
var
  i: Integer;
begin
  if SortedList.Find(SortedString(Uppercase(TextEdit.Text)), i) then
  begin
    i := Integer(SortedList.Objects[i]);
    ShowMessage(ListBox.Items[i]);
  end;
end;
Grüße vom marabu

Nicodius 3. Mai 2006 18:15

Re: booleanvariable immer false?
 
hey danke :thumb:


aber könntest du mir anhang meines beispiels dass noch nochmal erklären

ich hab ein memo -

da kommen normale sätze rein
die wörter kommen in eine liste - eine weitere liste nimmt die nach buchstaben sortieren wörter dann auf

dann gibts ein wörterbuch und ein wörterbuch sortiert

ich vergleiche listesortiert mit wörterbuchsortiert und sollte etwas zutreffen nehm ich den index und nehm das richtige wort aus wortlistekorrekt

--> sollte ein wort weniger als 4 buchstaben haben(mittelbuchstabe also nicht austauschbar) oder ein wort nicht im wörterbuchstehen(weils korrekt geschrieben wurde oder halt einfach nicht da ist)
nehm ich wieder das ursprüngliche wort was in der unsortieren liste ist

anschliesend füge ich per implodefunction den alten satz wieder zusammen


und eben jene schritte finden dort statt


grüße Nico


ps.: die idee entstand in rahmen eines wettbewerbes von wem anderen un dich hab eigentlich dass ganze nach delphi exportiert(also die idee) - nicht dass mir da wer was vorwirft ;) - der delphicode wird natürlich sobald er korrekt ist veröffentlicht ;)

marabu 4. Mai 2006 13:37

Re: booleanvariable immer false?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Nico,

Zitat:

Zitat von Nicodius
die idee entstand in rahmen eines wettbewerbes

glaube ich nicht - es handelt sich um ein Standardverfahren zum Korrigieren von Buchstabendrehern.

Schau dir die Demo mal an - und versuche zu verstehen. Keine Angst, es bleibt noch genug Arbeit für dich.

Freundliche Grüße vom marabu

Nicodius 4. Mai 2006 13:44

Re: booleanvariable immer false?
 
vielen herzlichen Dank :)

ich schaus mir gerade an - einfach super :thumb:


der unterscheid ist halt dass du das problem mit den zwei listen nicht hast da du mit dem inputquery ja
immer korrigieren lässt ;) was natürlich ne angenehme variante ist - danke =)

grüße Nico :)


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