Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hi,

folgendes Problem: es müssen zwei grosse Exceldateien durchlaufen werden.

Es soll geprüft werden, ob Spalte A von Exceldatei 1 in Spalte B, C oder D von Exceldatei 2 enthalten ist.

Das Ganze ist mittels foreach- Schleifen durch zwei DataTables und der Regex- Funktion sehr zeitintensiv und schreit nach Optimierung!

Leider bin ich mit Dictionary nicht wirklich weitergekommen, da Spalte A d. Exceldatei 1 nicht eindeutig ist.

Bin für jeden Tipp dankbar! Besten Dank und Gruss! sessai

Hi,

folgendes Problem: es müssen zwei grosse Exceldateien durchlaufen werden.

Es soll geprüft werden, ob Spalte A von Exceldatei 1 in Spalte B, C oder D von Exceldatei 2 enthalten ist.

Das Ganze ist mittels foreach- Schleifen durch zwei DataTables und der Regex- Funktion sehr zeitintensiv und schreit nach Optimierung!

Leider bin ich mit Dictionary nicht wirklich weitergekommen, da Spalte A d. Exceldatei 1 nicht eindeutig ist.

Bin für jeden Tipp dankbar! Besten Dank und Gruss! sessai

Statt einem Dictionary könnte man eine Collection vom Typ KeyValuePair nutzen.

Ein Ansatz wäre hier vielleicht LINQ (to Objects bzw to DataSet / DataTable) --> Join ListeA mit ListeB

Dabei würde alle Datensätze herausfallen, bei denen die (INNER) JOIN-Klausel nicht zutrifft.

Hi,

folgendes Problem: es müssen zwei grosse Exceldateien durchlaufen werden.

Es soll geprüft werden, ob Spalte A von Exceldatei 1 in Spalte B, C oder D von Exceldatei 2 enthalten ist.

Das Ganze ist mittels foreach- Schleifen durch zwei DataTables und der Regex- Funktion sehr zeitintensiv und schreit nach Optimierung!

Leider bin ich mit Dictionary nicht wirklich weitergekommen, da Spalte A d. Exceldatei 1 nicht eindeutig ist.

Bin für jeden Tipp dankbar! Besten Dank und Gruss! sessai

Warum nicht per Hashtable / Dictionary ?

Als Key den inhalt der Spalte A Zellen, als Value ob es on B,C,D von File 2 enthalten ist. Wenn Spalte A doppelte Einträge hat, dann musst du das ja nicht mehr doppelt prüfen.

Ich würd das in das Dictionary schreiben, und halt per Contains prüfen ob es den Wert schon im Dictionary gibt, damit ich nicht in die Exception renn.

Ansonsten würd ich eventuell die Daten erstmal sortieren, und z.b. mit Binärer Suche arbeiten, anstatt auf gut Glück durch File 2 zu loopen. Es gibt ja den ein oder anderen Suchalgorhytmus der etwas effektiver ist als bootforce.

Gruß

Sven

Könntest Du evtl. ein Beispiel nennen, wie genau das "Suchen" verlaufen soll?

Im Grunde geht es darum:

Tabelle 1 Spalte A

123456789

Tabelle 2 Spalte B

543217893

Tabelle 2 Spalte C

123456789

Tabelle 2 Spalte D

523453453

Und die Antwort wäre in dem Fall: (D)

Meinst Du das so?

Antwort C wäre doch jetzt mein Treffer!?

Bei einem Treffer müsste ich den entsprechenden Datensatz inkl. weiteren Spalten zwischenspeichern bzw. später ausweisen.

Geht das alles mit einem Dictionary?

Das Ganze muss wöchentlich laufen.

Eine Oracle- DB steht zur Verfügung.

Huch, äh, natürlich C :D

Die Frage ist: was willst Du mit einem Dictionary erreichen?

Letztlich geht es um einen effizienten Suchalgortihmus, der nach Übereinstimmungen sucht.

Da in Deinem Fall die komplette Spalte übereinstimmen muss, ist der Algorithmus recht simpel:

1) Prüfe, ob Zeile 1 der Spalte mit der Referenzzeile übereinstimmt.

2) Wenn "Nein", Spalte verwerfen und (wenn vorhanden) mit nächster Spalte weitermachen => (1).

3) Wenn "Ja", dann solange mit dem Spaltenvergleich fortfahren, bis alle relevanten Werte als übereinstimmend erkannt worden sind - bzw. beim ersten Unterschied, Spalte wieder verwerfen und bei (2) wieder einsteigen

Fertig.

Alternativ: Wenn die Spalten unterschiedliche Länge haben, könntest Du zuerst die Länge abgleichen, dann die erste Zeile überprüfen und dann den Inhalt.

Durch die entsprechenden Überprüfungen sparst Du schon ein wenig an Laufzeit, bzw. mit einem break kannst Du den Loop jederzeit verlassen.

Das wäre jetzt meine Vorgehensweise aus der Hüfte geschossen.

Ich tu mich da ein bisschen schwer das Ganze umzusetzen ...

meine Exceldateien sind folgendermassen aufgebaut:

Excel 1: Spalte LASTNAME, FIRSTNAME, MIDDLENAME

Excel 2: Spalte NAME, VORNAME, GEBURTSNAME

zu Excel 2: hier können Werte mehrfach vorkommen, die Spalte KTO wäre mein eindeutiger Schlüssel, meine Idee war dass ich für den Key ein CONCAT von KTO und den restlichen Spalten mache?!

Der Check: es soll geprüft werden ob Excel1.LASTNAME, VORNAME und MIDDLENAME in einer der Spalten von Excel 2 vorhanden ist.

Und hier frag ich mich ob das mit einer Hashtable so alles möglich ist?!

Ich bin dankbar für jeden Tipp! :)

tja, und genau da fängt's schon an:

dann hab ich zwei DataTables und kann diese mittels LINQ auswerten bzw. mein Ergebnis in eine neue DataTable schreiben?

ich hab noch nie mit LINQ gearbeitet, wenn auch schon davon gelesen bzw. gehört.

wie fang ich da am besten an?

welchen Vorschlag kannst du denn machen?

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.