Einzelnen Beitrag anzeigen

BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

wieder mal 2 Stringlisten vergleichen, Zugriff funzt net

  Alt 2. Okt 2009, 10:22
Hallo und guten Tag an alle DP´ler,

Habe ein Problem das hier zwar schon öfter besprochen wurde, aber leider klappt dort ein Zugriff nicht. Also folgende Situation: Ich habe 2 Stringlisten und möchte überprüfen, welche der Elemente in beiden und welche in nur einer der beiden Listen stehen. Habe dafür NICHT den häufig benutzen (folgenden) Algorithmus genutzt, den ich hier häufiger gefunden hab:
Delphi-Quellcode:
Var
A, B:Integer;
begin
For A := 0 To Memo2.Lines.Count-1 do
begin
    For B := 0 To Memo1.Lines.Count -1 do
        If Memo1.Lines[B] = Memo2.Lines[A] Then
        begin
            Memo3.Lines.Add(Memo2.Lines[A]);
        end;
    end;
end;
Sondern da ich lediglich Integer Werte in meinen Listen hab, füge ich die Listen in eine temporären Liste zusammen und soriere sie. Das bedeutet gleiche Zahlen stehen somit immer hinter einander. Ich fange dann vorne an und schaue, ob der i.te- und der i.te+1-Wert gleich sind. Wenn das der Fall ist, lösche ich diese und führe an der selben Stelle danach meine Überprüfung nochmal durch, wenn die nicht gleich sind, erhöhe ich i. Das funzt auch gut, hab dann eine List, mit in der ich nur die Elemente gefunden habe die nicht in beiden Listen vorkommen. Jetzt möchte ich diese nur noch kennzeichnen, aus welcher Liste sie kommen. Die Elemente aus der einen Liste sollen ein "-" vorgestellt bekommen, die anderen nicht, also prüfe ich einfach jedes noch Verbleibende Element der temporären Liste mit einer der beiden Listen, kommt der Wert in der Liste vor, kommt der Wert augenscheinlich aus dieser Liste und soll nicht gekennzeichnet werden, kommt er nicht vor, soll er das "-" vorgestellt bekommen. Hier liegt jetzt das Problem, denn er macht das nicht.

Hier der Algorithmus dafür (in diesem habe ich das vor setzen des "-" erzwingen wollen und hab deswegen in der gekennzeichneten else-Anweisung allen ein "-" vorgesetzt - Werte bleiben trozdem positiv)
Delphi-Quellcode:
  sLTempList := TStringList.Create;
  ComBuffer := TComport.Create;
  result := false;
  try
    sLTempList.Assign(List); // die erste Liste in die temporäre Liste aufnehmen
    List.Clear;
    for i := 0 to ComBuffer.Anzahl - 1 do
      begin
        List.Add(inttostr(ComBuffer.Comportnummer[i]));
        sLTempList.Add(inttostr(ComBuffer.Comportnummer[i])); // die Werte der 2.Liste ergänzen
      end;

    sLTempList.Sort; // sortieren

    i := 0;
    repeat
      if i+1 <= sLTempList.Count - 1 then
        begin
          if sLTempList[i] = sLTempList[i+1] then // Überprüfen, ob i und i+1 Wert gleich sind
            begin
              sLTempList.Delete(i+1); //beide Löschen
              sLTempList.Delete(i); //beide Löschen
            end
          else // die else-Anweisung darf nicht gelöscht werden, sonst startet das Programm nicht
            begin
              {for j := 0 to List.Count - 1 do {if sLTempList[i] = List[j] then // Hier soll irgendwann mal die Entscheidung folgen, ob Wert gekennzeichnet wird oder nicht
                                            else sLTempList[i] := '-' + sLTempList[i]; }
//ist noch falsch!!
              sLTempList[0] := '-' + sLTemplist[0]; //Erzwungene Kennzeichnung, die nicht funktioniert!!!
              i := i+1;
            end;
        end;
    until ((i+1) > (sLTempList.Count - 1));
    iAnzahl := sLTempList.Count;
    result := true;
  finally
    doComportChange(sLTempList, List);
    ComBuffer.Free;
    sLTempList.Free;
  end;
Was ist an der Zuweisung des eigentlichen Strings dort falsch? Eigentlich kann das ja nicht so schwer sein, aber ich sehe gerade gar keinen Fehler. In einem Memo, wo die Werte des sLTempList angezeigt werden, kann ich nur sehen, dass die entsprechenden Werte alle positiv bleiben.

Vielen Dank im Voraus
BAMatze

[Edit] 1. Algorithmus ergänzt (hatte ich vergessen)[/Edit]
2. Account Sero
  Mit Zitat antworten Zitat