Abgleichen von Dateien

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von DocJunioR, 04.08.2005.

  1. #1 DocJunioR, 04.08.2005
    DocJunioR

    DocJunioR Grünschnabel

    Dabei seit:
    04.08.2005
    Beiträge:
    2
    Zustimmungen:
    0
    Hallo

    Ich habe das Problem, dass ich eine Textdatei mit einer Oracle-DB abgleichen muß.

    Das Ganze läuft so, dass ich mir die Daten aus der Oracle-DB in eine Datei spoole, mit Trennzeichen "::".
    Die Textdatei auf dem Rechner hat das Gleiche Trennzeichen, jedoch einen anderen Aufbau.

    Nun muß ich schauen, ob die Dateneinträge aus der Oracle-DB anders aussehen als die Einträge in der Textdatei. Anschließend muß ich die entsprechenden Datensätze aus Oracle entfernen, ändern oder hinzufügen.

    Kann mir da wer nen Tipp oder noch besser nen Codeschnipsel geben, mit dem ich das Ganze lösen kann?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Gummibear, 04.08.2005
    Gummibear

    Gummibear Computerversteher

    Dabei seit:
    19.07.2005
    Beiträge:
    100
    Zustimmungen:
    0
    Ort:
    Schweiz
    $ diff datei1 datei2

    Das zeigt Dir die Unterschiede zwischen den 2 Dateien.
     
  4. #3 Wolfgang, 04.08.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Der Vorschlag mit diff wird scheitern, wenn die Struktur der Dateien nicht gleich ist.
    Wenn ich das richtig verstehe, soll nach Abschluß der Aktion genau das in der Datenbank stehen, was im Text-File 1 steht. Das ist dann der Fall, wenn die Daten die dort nicht vorkommen auch aus der DB raus sollen.
    Wenn dem so ist, könntest du einfach die Datensätze in die entsprechende Reihenfolge bringen und dann die gesamte DB/Tabelle löschen und die Datei einfügen.
    Ich kenne die Oracle-DB Syntax nicht, aber da wirst du sicher selbst die Insert Statments kennen.
    Umsortieren der Felder in deiner DB kannst du relativ einfach via AWK wobei der FS hier eben :: ist. Alternativ kannst du das alles auch in ein perlscript packen, was gleich alles erledigt.
    Schritt hier Textdatei einlesen , via split mit :: als Trennzeichen, die Felder umsortieren wie benötigt, und dann mit dem DBI Modul die Datensätze die nicht gleich sind einfügen.
    Das ist alles sehr generisch, aber umfasst die Vorgehensweise.
    Sind es nur wenige Daten, ist es wohl performanter die gesamte umsortierte Datei einzuspielen.
    Ist die Datenmenge größer, so lassen sich auch beide Dateien nach der Umformatierung der ersten direkt vergleichen, Fallabhängig die Statements erzeugen.
    Dabei spielt es natürlich noch eine Rolle, ob du mit der richtigen Reihenfolge oder entsprechenden Indexierung als key arbeitest.
    Aber wie gesagt, mit Oracle kenn ich mich garnicht aus. Für sql oder mysql ist das aber mit perl ein sehr schnell zu erstellendes wrapper-script.
    Hoffe etwas geholfen zu haben.
    Gruß Wolfgang
     
  5. #4 DocJunioR, 05.08.2005
    DocJunioR

    DocJunioR Grünschnabel

    Dabei seit:
    04.08.2005
    Beiträge:
    2
    Zustimmungen:
    0
    Hmm.. also an Perl hab ich ehrlich gesagt noch garnicht gedacht.
    Eigentlich nur, weil ich es nicht sonderlich mag. (seeehr kryptisch)
    Auf der anderen Seite bin ich eben Programmierer und muß tun, was ein Programmierer tun muß.
    Ich denke, dass das ständige Löschen von Daten hier leider nicht geduldet wird, obwohl es sich tatsächlich nur um ein oder 2 dutzend Einträge handelt..

    Wie dem auch sei, werd mich dan mal auf die Suche nach meinem PERL-Buch begeben..
     
  6. #5 Wolfgang, 05.08.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Naja du musst ja nicht perl dafür verwenden, das ist nur ein Vorschlag von mir gewesen.
    Ich kenne mich halt mit perl am besten aus, so dass ich die Vorteile im Einsatz von perl sowohl in der shell als auch im web als auch bei der Bereitstellung der Schnittstellen zu Datenbanke etc zu schätzen weiss.
    Das unterscheidet perl ja grundsätzlich von z.B. php
    Wenn deine Datensätze ein garantiert festes Format haben, kannst du die Umsortierung natürlich leicht auch mit awk oder sed erledigen.
    z.B. Machen folgende Einzeiler das Gleiche.

    echo "A::B::C::D"|awk -F"::" '{print $3"::"$2"::"$1"::"$4}'
    C::B::A::D
    echo "A::B::C::D"|perl -a -F"::" -ne 'print "$F[2]::$F[1]::$F[0]::$F[3]"'
    C::B::A::D

    Das geht mit perl sogar noch kürzer, aber ich wollte es nicht kryptischer machen als es ist
    :D
    Dann musst du die Dateien eventuell sortieren und dann könntest du natürlich auch diff darauf loslassen und oder in einer Schleife Datensatz für Datensatz einlesen und abhängig von dem Vergleich gleich deinen INSERT|UPDATE|DELETE String zusammenbauen.
    Zum Schluss dann natürlich noch die Datenbankschnittstelle entsprechend füttern.
    Da dachte ich eben an perl, da du dort alles schön in einem script vereinen kannst, und es genügend Module gibt um die Sache zu vereinfachen.

    Gruß Wolfgang
     
Thema:

Abgleichen von Dateien

Die Seite wird geladen...

Abgleichen von Dateien - Ähnliche Themen

  1. Ohne Clustering Datenbanken abgleichen

    Ohne Clustering Datenbanken abgleichen: Moin, ist Jemandem eine Möglichkeit bekannt MySQL Datenbanken ohne clustering untereinander abzugleichen? Das muss nicht in Echtzeit geschehen...
  2. Lautstärke von Videos abgleichen

    Lautstärke von Videos abgleichen: Hi Leute, es geht um folgendes Problem, ich hoffe Ihr könnt mir helfen: Ich hab einige Videos (hauptsächlich Musikvideos), die alle im MPEG...
  3. Systemzeit abgleichen!?

    Systemzeit abgleichen!?: Ich hab seit der Umstellung auf die Winterzeit(vielleicht aber auch ein anderer Zeitpunkt, keine Ahnung!) des öfteren mal Probs mit meiner...
  4. Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen

    Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen: Hallo, ich habe ein Verzeichnis, darin enthalten sind mehrere Dateien. Nun möchte ich alle Dateien (Parameter $1) gegen eine konstante Datei...
  5. Dateien selektieren und zählen

    Dateien selektieren und zählen: Hallo, das ist mein erster Beitrag, bitte entschuldigt, falls nicht alles richtig geschrieben ist. Ich muss meine erste Hausaufgabe als...