• Hallo Leute

    Dieses Skript ist zur verbesserten Verarbeiten von sehr großen CSV Dateien gedacht.

    Wenn ich von vielen hundert Spalten einer CSV-Datei nur wenige brauchte, dann kann ich die Datei hiermit anpassen.

    Bei wiederholten Aufgaben, lohnt es sich ein Profil mit einem aussagekräftigen Namen zu erstellen. Es wird dann dazu eine Verknüpfung im Programmverzeichnis erstellt. Nun braucht man nur noch die Datei(en) auf die entsprechende Verknüpfung ziehen und es wird automatisch eine angepasste Kopie der Datei im Dateiverzeichnis erstellt.

    Das ganze hat eine SQLite Basis. Es funktionieren bis zu 999 Spalten (mit unterschiedlichen Namen - gleichnamige kommen bei mir einfach nicht vor.. :D ) und Millionen von Datensätzen.

    Das Einlesen einer 1,4 GB großen Datei dauert bei mir etwa eine 1.45 Minuten, wenn die Datei in UTF8 oder UTF8 ohne BOM vorliegt. Ansonsten wird noch ANSI unterstützt. Hier kommt aber eine Konvertierungszeit hinzu, weil erst eine UTF-Kopie erstellt wird. Beim Export ähnlich. Standard ist UTF ohne BOM. Alles andere wird vom Programm noch konvertiert.


    PS: Die ConvertEncoding.au3 habe ich nur der Vollständigkeit halber in das Archiv gepackt. Sie wird nicht benötigt, da dass Programm kompiliert Bestandteil der Includes ist.


    EDIT:

    v1.1

    Die Hinweise von Zeitriss im Programm überarbeitet.

    Die Errormeldungen der SQLite.exe in die Programmanzeige übernommen.

    v1.0.1

    Auswahl ob Kopfzeilen exportiert werden oder nicht hinzugefügt.

  • Hallo autoiter,

    da hst Du wieder richtig hervorragende Arbeit geleistet. Die Arbeitsgechwindigkeit Deiner Software ist erstaunlich. Die Ergebnisse sind eindeutig prima. Sehr gute Arbeit.

    Herzlichen Dank für die Bereitstellung der Quellcode-Dateien und die Beschreibung der Features.


    Als zusätzliches Feature fände ich es klasse, wenn eventuelle (Kopf)zeilen aus der zu importierenden .csv Datei herausgenommen werden könnten (z. B. Zeile 1-4). Bei meinen csv Dateien habe ich mehrere (Kopf)zeilen, die manuell vor dem Import der CSV Datei entfernt werden müssen. Gerade bei wiederkehrenden (Profil)routinen hätte das IMHO Vorteile.

  • Hallo bazii

    danke dir :) . Ich habe das eingepflegt. War überhaupt keine Arbeit, aber eine gute Idee, auf die ich einfach nicht gekommen war..

    Im ersten Beitrag gibt es nun eine aktuelle Fassung des Programms als separaten Anhang. Die alte Version einfach mit dieser überschreiben.

    Grüße autoiter

  • Hi,

    Sehr gut zu bedienen, vor allem die über CMD aufrufbaren Profile sind denke ich eine gute Idee.

    Hier noch ein paar Dinge die mir aufgefallen sind:

    Spoiler anzeigen

    Hier sollte "$idB_DeleteProfile" stehen.

    AutoIt
    GUICtrlSetTip($g_idB_Transfer, "Das ausgewählte Profil löschen")

    $iCount ergibt dort keinen Sinn (Zeilen: 733, 745, 756, 768).

    Da die maximale Anzahl an Spalten allerdings kleiner ist als $iMaxIndex braucht man das eigentlich nicht.

    AutoIt
    If $iCount = $iMaxIndex Then
        $iMaxIndex += $iMaxIndex
        ReDim $aIndices[$iCount]
    EndIf


    "$cmdline[]"?:P

    AutoIt
    Local $aSplit = StringSplit($cmdlineraw, '" "', 1) ; Aufrufmuster: "Profilname" "1.Datei" "2.Datei" "3.Datei" ...
        If $aSplit[0] < 2 Then Exit MsgBox($MB_ICONERROR, $g_sScriptName, "Zu wenige Parameter.")
        For $i = 1 To $aSplit[0]
            If $i = 1 Then
                $aSplit[$i] = StringTrimLeft($aSplit[$i], 1)
            ElseIf $i = $aSplit[0] Then
                $aSplit[$i] = StringTrimRight($aSplit[$i], 1)
            EndIf
        Next

    mfg

    Zeitriss

  • Hallo Zeitriss

    ich bedauere, das Programm gar nicht dokumentiert zu haben. Umso toller, dass du dir dennoch die Mühe gemacht hast, mal etwas über den Quelltext zu schauen. :):thumbup:

    Hier sollte eigentlich nicht ReDim $aIndices[$iCount] sondern ein ReDim auf $iMaxIndex stehen. Aber ja, du hast vollkommen recht. Das Programm unterstützt eh nur 999 Spalten und kann nie größer als der $iMaxIndex werden. Das kann also wirklich weg. (Ich habe das geschrieben, bevor mir das Limit klar wurde. Ich war dann aber damit einverstanden.)

    "$cmdline[]"?:P

    Hahaha, oh mein Gott!

    Offensichtlich hatte ich nicht in die Hilfe geschaut. Hab ich jetzt nachgeholt. :rtfm:

    Danke dir für die Hinweise. Ganz groß Zeitriss :thumbup::thumbup:

    Grüße autoiter