Zum Inhalt springen

Riesige Exceldateien durchlaufen / Stringsuche


sessai

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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! :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...