Daten Aufbereiten

  • Hallo miteinander,

    ich lese auf einer Webseite verschiedene Artikelnummern und deren Lieferanten aus, das ganze Speichere ich dann in eine TXT Datei.
    Die erste Zeile ist die Überschrift und danach kommen die Daten der Webseite.

    Datum;Herstellernummer;EAN;Lieferantenname;EK;Hersteller;Produkt;Beschreibung1;URL

    Ich habe in einer Datei wenn ich fertig bin mit auslesen ca. 180.224 Zeilen drin stehen.

    Jedoch habe ich die ein uns die selbe Herstellernummer auch x mal drin stehen mit unterschiedlichen Lieferanten und Preise.

    ich würde meine Neu gewonnene TXT Datei gerne aufbereiten so das jede Artikelnummer nur noch 1 mal drin vorkommt und dahinter dann die Lieferanten und deren preise aufgelistet sind.

    ich mache mal ein Beispiel.

    TXT Datei, alle Zellen sind mit einem Semikolon ";" getrennt!

    Datum Herstellernummer EAN Lieferantenname EK Hersteller Produkt Beschreibung1 URL
    13.02.17 00214 EAN123456789 Muster-Lieferant1 10,00 Hersteller Handy mit Display http://www......de
    13.02.17 00214 EAN123456789 Muster-Lieferant2 10,50 Hersteller Handy mit Display http://www......de
    13.02.17 00214 EAN123456789 Muster-Lieferant3 10,29 Hersteller Handy mit Display http://www......de
    13.02.17 00215 EAN123456789 Muster-Lieferant2 11,29 Hersteller Handy mit Display http://www......de
    13.02.17 00215 EAN123456789 Muster-Lieferant3 11,00 Hersteller Handy mit Display http://www......de
    13.02.17 00215 EAN123456789 Muster-Lieferant1 10,60 Hersteller Handy mit Display http://www......de

    So würde ich sie gerne aufbereiten lassen als CSV Datei

    Herstellernummer Hersteller Produkt Beschreibung1 Muster-Lieferant1 Muster-Lieferant2 Muster-Lieferant3
    00214 Hersteller Handy mit Display 10,00 10,50 10,29
    00215 Hersteller Handy mit Display 10,60 11,29 11,00


    Was ich mir bis jetzt im Kopf überlegt habe.


    1) Alles aus der TXT Datei in ein Array lesen
    2) Das Array_TXT Sortieren nach Lieferantenname
    3) Alle Lieferantenname in ein neues Array schreiben
    4) ARRAY_Lieferantenname alle Duplikate Löschen
    5) Neue CSV Datei erstellen
    6) Kopf in die CSV Datei schreiben
    Herstellernummer; Hersteller, Produkt, Beschreibung1; (Array_Lieferantenname)

    7) Array_TXT Sortiren nach Herstellernummer

    8) zeilenweise lesen

    8.1) ist Herstellernummer Gleich Herstellernummer von Ziele darüber dann ergänze die letzte Zeile in der neuen CSV Datei

    8.1.1) Position des Lieferantenname suchen und den EK wert dort in die Zeile eintragen.

    8.2) ist Herstellernummer nicht Gleich Herstellernummer von Ziele darüber, dann schreibe eine neue Zeile


    Ist meine Vorgehensweise richtig?

    oder mache ich da was zu Kompliziert? und es gibt einen einfacheren Weg?


    Habe auch schon dran gedacht bevor ich in eine Datei schreibe alles in ein neues Array zu schreiben und erst wenn ich fertig bin dann alles in eine Datei zu schreiben.

    Was meint ihr? wie würdet Ihr das machen?


    Wenn das Array fertig ist sollte alles sortiert sein.


    Gruß Mücke

  • Richtig, das wäre dann so.

    Nicht jeder Lieferant Lieferst alle Artikel.

    Nur wie bereite ich die Daten am besten auf? so das ich am wenigsten Aufwand damit habe? und es Effektiv ist?

    Da ich noch keine Ahnung habe wie ich Daten Sortieren etc. muss ich mich da so oder so einlesen, wollte jedoch nicht Tage lang mit dem Falschen Lösungsansatz herum machen wollen. und dann merken das ein anderer weg effektiver wäre.

  • Nur wie bereite ich die Daten am besten auf? so das ich am wenigsten Aufwand damit habe? und es Effektiv ist?

    Je nachdem was du mit den Daten am Ende anstellen willst würde ich andere Lösungsmöglichkeiten verfolgen.
    Wenn du selbst per Hand mit dem Datensatz weiterarbeiten willst würde ich mir dementsprechend viel Mühe geben, damit ich im Nachhinein die erwähnten 10 leeren Spalten z.B. nicht habe.

    Soll das ganze aber danach mit AutoIt oder einem anderen Programm verarbeitet werden, dann kann dir das Problem mit den 10 Spalten z.B. egal sein.

    Ich schätze mal nicht das die Rechenzeit ins unermessliche steigt, dass du jeden Schritt bis zum maximum optimieren musst.
    Schreibe einfach Code der zuverlässig, flott und wartbar ist im Hinblick darauf, was mit den Daten am Ende passieren soll.

  • was möchte ich machen.

    1. Den Günstigsten preis je Artikel finden
    2. Den Günstigsten preis je Artikel in eine EK Liste eintragen
    3. eine Übersicht aller Lieferanten.

    Wenn ich je ziele eine Artikel nummre habe und die Lieferanten in den Überschriften stehen dann kann ich im Excel mit KKLEINSTE mir den Günstigsten preis suchen lassen.
    und mit einem SVerweis kann ich mir dann den preis in meine EK liste eintragen.

    Das ist der Hintergrund.

    ist das Sortieren und schreiben in ein Array leichter wie in eine Datei?


    ich möchte das Selber machen denn wenn ich irgend wann mehr Daten habe dann möchte ich das Script erweitern können und nicht vor einem Code sitzen denn ich nicht verstehe.

  • Hallo @Muecke

    Ich biete dir nicht genau, was du möchtest. Ich hoffe, ich biete dir aber eine bessere Möglichkeit, als das ganze Gebaue und Umgebaue von Arrays, nur damit du am Ende mit Excel den günstigsten Preis für ein Produkt hast..
    Wenn du Excel hast, hast du vielleicht auch Access? Das könnte ein guter Zeitpunkt sein, sich damit mal zu beschäftigen. Jedenfalls finde ich, hier geht es damit los, dass Datenbanken interessant werden. Hier ist es noch sehr einfach, aber vielleicht, möchtest du morgen eine Liste mit Artikeln, die noch ein oder zwei weitere Kriterien erfüllen..


    Hier habe ich dir mal ein Beispiel erstellt, dass nicht die gewünschte csv für Excel besorgt, aber mal zeigt, wie man das mit Datenbanken machen könnte.
    1. Es wird erst die Webdaten.txt in ein Array gespeichert (statt erst eine txt zu schreiben, bietet sich das einfache Weiterarbeiten mit deinem Array natürlich an).
    2. SQlite Datenbank wird erstellt (_SQliteStart).
    3. SQlite Datenbank wird mit deinem Array befüllt (_SQliteFillDB).
    4. SQlite Datenbank wird nach dem Produkt Handy durchsucht. Die Ergebnisse werden nach EK sortiert. (_SQliteSearchItem)


    Schau mal bspw. hier https://www.tutorialspoint.com/sqlite/index.htm nach weiteren Möglichkeiten deine Ergebnisse zu filtern usw. und spiel ein wenig mit dem Code.


    Zur Ausführung müssen die unten angehängten Dateien zusammen in einem Verzeichnis liegen.

    (Skript.au3=das Skript, included_Base64_db.au3=SQlite.dll, Webdaten.txt=Deine Beispieldaten von der Website)


    Das Skript:

    Spoiler anzeigen
  • @autoiter

    Du solltest vor Ausführung der Zeile 8 besser überprüfen, ob das Unterverzeichnis "\Data\" existiert und falls nicht, es ggf. anlegen...

    AutoIt
    If Not FileExists($sWorkDir & "SQLite3_x86.dll") Then
    	If Not FileExists($sWorkDir) Then DirCreate($sWorkDir)
    	_sqlite3_x86dll(True, $sWorkDir)
    EndIf


    PS: Ich würde das auch mit SQLite machen.

  • Hi @Bitnugger,

    Nein, das ist nicht notwendig. Das macht doch schon die Funktion von UEZ, wenn man True mitgibt. ;)
    Man kann sicher noch weitere Prüfungen einbauen usw.. Der Code funktioniert aber und soll @Muecke ja nur zeigen, dass man in dieser Struktur die meisten Infos mit einer SQL-Abfrage erhalten kann.

    Grüße autoiter

  • Nein, das ist nicht notwendig. Das macht doch schon die Funktion von UEZ, wenn man True mitgibt.

    Nope... macht sie nicht!

    Denn dazu müsste die Zeile 389 in dem Script included_Base64_db.au3 so aussehen:

    AutoIt
    Local Const $hFile = FileOpen($sSavePath & "\sqlite3_x86.dll", 26)
    ; $FO_OVERWRITE  ( 2) = Write mode (erase previous contents)
    ; $FO_CREATEPATH ( 8) = Create directory structure if it doesn't exist (See Remarks).
    ; $FO_BINARY     (16) = Force binary mode (See Remarks).
    ;
    ; 2 + 8 + 16 = 26

    Dort steht aber:

    AutoIt
    Local Const $hFile = FileOpen($sSavePath & "\sqlite3_x86.dll", 18)
  • Oha, tatsächlich habe ich das nicht geprüft, bevor ich dir widersprochen habe. Asche auf mein Haupt. Danke dir.
    .. Zum Glück hat es den Muecke eh nicht interessiert :D

    Grüße autoiter

  • hallo miteinander,

    sorry das ich etwas weg war, komme nicht täglich dazu meine Scripte zu pflegen ;-).

    ich bin noch nicht dazu gekommen mir das näher anzuschauen, da ich erst ein mal wissen wollte wie der für mich am unkomplizierteste weg ist so etwas umzusetzen.

    Ich habe zwar Excel jedoch kein Access, und mit SQL kenne ich mich auch gar nicht aus.

    ich werde mich hoffentlich die nächsten tage damit etwas intensiver beschäftigen können, und melde mich dann wider.

    Danke erst mal für eure Hilfe.

    gruß Mücke