Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 2 Arrays vergleichen... (https://www.delphipraxis.net/115760-2-arrays-vergleichen.html)

finalr 17. Jun 2008 15:47


2 Arrays vergleichen...
 
Hi,

ich habe hier 2 Arrays und möchte diese gerne vergleichen, soweit auch kein Problem !

Delphi-Quellcode:
  for lauf1 := 1 to j do begin
    for lauf2 := 1 to i do begin
       if sku[lauf1] = Tempsku[lauf2] then begin
         ShowMessage('OK');
       end else begin
         ShowMessage('nicht vorhanden');
         // hierzu muss ich wissen, in welchem es nicht vorhanden ist ! 
       end;
    end;
  end;
Nun möchte ich gerne wissen, wie ich herausfinde, wenn ein Wert im 1. Array drinsteht, aber im 2. Array nicht ! Dazu muss ich aber wissen, in welchem es NICHT drinsteht.

Irgendwie habe ich keine Idee. Vielleicht kann mir jemand helfen.

Gruss Daniel

Sherlock 17. Jun 2008 15:59

Re: 2 Arrays vergleichen...
 
Delphi-Quellcode:
if sku[lauf1] = Tempsku[lauf2] then
  begin
    ShowMessage('OK');
  end
  else
  begin
    ShowMessage('nicht vorhanden');
    // hierzu muss ich wissen, in welchem es nicht vorhanden ist !
  end;
Na, was macht denn die erste Zeile hier? Die guckt doch, ob das Arrayelement des ersten Arrays im zweiten Array vorkommt, oder? Dann hat sich doch schon die Frage erledigt.

Edit: Oder steh ich grad aufm Schlauch? :gruebel:

Sherlock

mquadrat 17. Jun 2008 15:59

Re: 2 Arrays vergleichen...
 
Du könntest das ganze in zwei Teile teilen:
- Erster Array durchgehen und schauen, welche Elemente im Zweiten nicht vorkommen
- Zweites Array durchgehen und schauen, welche Elemente im Ersten nicht vorkommen

Einfach für jeden Array-Eintrag das jeweils andere Array durchlaufen und in einer boolean Variable merken, ob du es schon gefunden hast. Bist du alle Einträge des Vergleichsarrays durch und deine Variable steht immernoch auf false, existiert das Element im Vergleichsarray nicht.

Das wäre eine ganz simple Vorgehensweise.

finalr 17. Jun 2008 16:26

Re: 2 Arrays vergleichen...
 
Delphi-Quellcode:
if sku[lauf1] = Tempsku[lauf2] then
  begin
    ShowMessage('OK'); // wird angezeigt, wenn gleich ist..
  end
  else
  begin
    ShowMessage('nicht vorhanden'); // wird bei jedem Werte angezeigt, solange nicht gleich ist.
  end;
end;
An einer Boolean-Variabel hatte ich auch schon gedacht, aber da in beiden Arrays sich ca. 100 Werte befinden relativ problematisch...

irgendwie habe ich in dieser hinsicht gerade eine blockade. ich raffe es gerade nicht...

freak4fun 17. Jun 2008 16:30

Re: 2 Arrays vergleichen...
 
Zitat:

Zitat von finalr
Nun möchte ich gerne wissen, wie ich herausfinde, wenn ein Wert im 1. Array drinsteht, aber im 2. Array nicht ! Dazu muss ich aber wissen, in welchem es NICHT drinsteht.

Das machst du aber nicht mit deinem Code. :shock: Bei 100 Werten musst du dann wahrscheinlich sehr oft "OK" klicken. Was willst du denn genau machen?

finalr 17. Jun 2008 16:56

Re: 2 Arrays vergleichen...
 
Ich habe 2 Exceltabellen aus den Tabellen lesen ich jeweile die ganzen Artikelnummern aus (sku):
- 1 Exceltabelle => 1. Array => Temp.xls
- 2 Exceltabelle => 2. Array => Blub.xls

Bis hierhin kein Problem.

Nun möchte ich die Artikelnummern die in den Arrays sind vergleichen und wenn im Temp.xls eine Artnr vorhanden ist, welche in Blub.xls nicht vorhanden ist, dann muss ich das wissen !

Und wenn in Blub.xls eine Artnr vorhanden, welche in Temp.xls nicht vorhanden ist, dann ist das egal!
Vllt jetzt ein bisschen verständlicher...

Gruss Daniel

dominikkv 17. Jun 2008 17:03

Re: 2 Arrays vergleichen...
 
Delphi-Quellcode:
for lauf1 := 1 to j do
  begin
    gefunden := False;
    for lauf2 := 1 to i do
      if sku[lauf1] = Tempsku[lauf2] then
        begin
          gefunden := True;
          Break;
        end;
    if Gefunden then
      ShowMessage('OK') else
      ShowMessage('nicht in TempSku!');
  end;

for lauf1 := 1 to j do
  begin
    gefunden := False;
    for lauf2 := 1 to i do
      if sku[lauf2] = Tempsku[lauf1] then
        begin
          gefunden := True;
          Break;
        end;
    if Gefunden then
      ShowMessage('OK') else
      ShowMessage('nicht in Sku!');
  end;
viel spass beim "ok" klicken^^

Klaus01 17. Jun 2008 18:16

Re: 2 Arrays vergleichen...
 
Hallo,

sind pro Tabelle nur eindeutige Werte zulässig?
Oder können Einträge auch in einer Tabelle mehrfach vorkommen?

Wenn die Daten pro Tabelle eindeutig sind,
dann sollten zwei Schleifen reichen.

Delphi-Quellcode:
for j:=high(sku) downto 0 do
  for i:= high(tempSku) downto 0 do
     if sku[j] = tempSku[i] then
       begin
         sku[j]:=0;
         tempSku[i]:=0;
       end;
Jeder Wert der in einer der beiden Tabellen ungleich 0 ist,
ist in der jeweiligen anderen Tabelle nicht enthalten.

... oder habe ich da einen Denkfehler?

Grüße
Klaus

marabu 17. Jun 2008 19:03

Re: 2 Arrays vergleichen...
 
Hallo,

ich würde die Artikelnummern in zwei sortierte String-Listen (alternativ Integer-Listen) eintragen:

Delphi-Quellcode:
procedure SubtractStrings(minuend, subtrahend, difference: TStrings);
var
  i: Integer;
begin
  difference.Clear;
  for i := 0 to Pred(minuend.Count) do
    if subtrahend.IndexOf(minuend[i]) < 0 then
      difference.Add(minuend[i]);
end;
Getippt und nicht getestet.

Grüße vom marabu

finalr 17. Jun 2008 23:15

Re: 2 Arrays vergleichen...
 
Vielen Dank erstmal für eure Antworten...ich werde alle Varianten einmal ausprobieren...

Zitat:

Zitat von Klaus01
Hallo,

sind pro Tabelle nur eindeutige Werte zulässig?
Oder können Einträge auch in einer Tabelle mehrfach vorkommen?

Die Einträge sind eindeutig also pro Array kann die Artikelnummer nur einmal vorkommen.

Gruss Daniel


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:22 Uhr.
Seite 1 von 2  1 2      

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