Allgemeine Hilfe Verbesserungen und Fragen zum Array

  • Hallo Leute,
    ich bin relativ neu in Autoit und versuche mich gerade daran aus verschiedenen Quellen (txt, xls) daten zu ziehen und sie zu einem excelprotokoll zusammenzufügen und auszuwerten.
    ansich klappt das ganze recht gut ich habe nur 2 probleme.

    1. problem: ich lese ein array ein und benutze die werte dann später in meinem code, nur leider ist ein wert in diesem array plötzlich "leer".
    Wie man sieht mache ich das mit einer einfachen for-schleife. die Msgbox hatte ich einfach mal zum testen. in der werden mir alle daten die ich haben möchte korrekt angezeigt.
    außerhalb der schleife fehlt mir aber plötzlich $WertArray[7], mit "1-6" kann ich ohne probleme arbeiten.


    Problem Nr.2
    Das erstellen des Protokolls dauert zu lange.
    Natürlich programmiere ich nach bestem wissen und gewissen, allerdings geht das sicher noch um einiges besser und kompakter.
    Ich poste einfach mal meinen ganzen Code, vielleicht findet ja jemand die Zeit um mir effektive tipps zu geben.
    Vielen dank schon mal im Voraus.


  • Hallo mmk1988,

    hast da ja schon ein ganz ordentliches Script fabriziert!

    Grundsätzlich: Es ist recht schwierig dein Script zu analysieren, da eben nicht alle Daten einsehbar sind, also was wie und wo in der Excel Liste steht, also sei nicht enttäuscht, wenn nicht so viel Hilfe gegeben wird.

    Zu deinem 1.Problem: Für mich sieht es korrekt aus. Wie gesagt, kann man es aber nicht nachvollziehen was genau geschieht, das nicht alle Daten verfügbar sind.
    Frage 1: Sehe ich es richtig, du hast eine INI Datei, aus der du Werte liest? Kennst du den Befehl INIRead? Damit kann man geziehlt Werte aus eine INI Datei lesen, das ganze mit der Schleife kannst du dir dadurch erleichter.


    Zu deinem Problem 2: Lös erst mal Problem 1, dann kannst du Problem 2 angehen :D


    Spaß beiseite,
    Auch hier würde ich eher mit Arrays arbeiten, also den gesamten Bereich den du ab zwischen Zeile 12 und 34 machst in ein Array lesen und dann mit ArraySearch oder Schleifen das Array durcharbeiten.
    Du kannst dann deine gesuchten Werte auch in ein Array schreiben und auf einmal in die Excel Tabelle schreiben - geht viel schneller als mit einer schleife jeden Wert einzeln zu schreiben.


    Was hältst du davon dich zunächst mal mit den Arrays zu beschäftigen, denn ich glaube, da liegt die Lösung für deine beiden Probleme.


    Was mir sehr gefällt ist, dass du schon einiges kommentierst - das ist wirklich wichtig!


    lg
    s.koni

    Einmal editiert, zuletzt von s.koni (11. November 2016 um 08:42)

  • hi, danke schon mal für dein Feedback :)

    Genau, ich lese einmal aus einer ini und einmal aus einer excel.
    INIRead war mir bisher leider nicht bekannt :( wieder etwas gelernt.
    ich hänge die 2 Dateien einfach mal an, es sind sowieso nur Testwerte. Was bisschen erschwerend dazu kommt, in der Excel stehen Messwerte, je nach dem wie viele Messungen gemacht werden verändert sich die Anzahl der Einträge.
    Deswegen auch die Auskommentierte Variable:


    Code
    ;Anzahl der Messungen
    ;$Anzahl = controlgettext($hWnd,"","[NAME:MeasCountTextBox]")
    $Anzahl = 5

    Zum Testen nehme ich einfach 5.

    Entschuldige die blöde Frage aber, was für ein Vorteil hat "$PAR[0] = 8"? ist eine reine Verständnis frage.

    • Offizieller Beitrag

    $PAR[0] = 8 ; Gewöhn dir am besten gleich an, die Dimensionen des Arrays im Array selbst zu speichern, so geht es viel leichter mit schleifen usw.

    Hier könnten wir gleich wieder Grundsatzdiskussionen führen. :P
    Ob das Führen der Elementezahl des Arrays an dessen 0-Index vorteilhaft ist, sei mal dahingestellt. Wir sind es halt von vielen AutoIt-internen Funktionen so gewöhnt.
    Ich halte es nur dann für sinnvoll, wenn ich ein Array dynamisch gestalten möchte, weil ich dann keine extra Variable anlegen muss um UBound auszulesen, und mit dem Wert der Variablen+x ein ReDim durchzuführen.

    @mmk1988
    In meiner Signatur findest du ein Tutorial zu Arrays. Sollte dir für den Anfang weiter helfen.

  • Hallo mmk1988,

    bekommst du die Daten als csv-Datei? Musst du die Daten in Excel haben? Ich habe die csv Datei mal eingelsen mittels _FileReadToArray eingelsen. So würdest du dir das Einlesen der Daten evtl. erleichtern.
    Aus dem Array nimmst du die Daten die du brauchst und schreibst sie in eine neues Array, in der reihenfolge wie du sie in Excel dann haben willst. Dann kannst du eine neue leere Excel Datei erstellen lassen und die benötigten Daten per _Excel_RangeWrite eintragen.

    Einen schnelleren Weg wüsste ich jetzt nicht.

    AutoIt
    #include <File.au3>
    local $a
    _FileReadToArray(@ScriptDir & "\Temporäre Minflow-Werte.csv",$a,$FRTA_COUNT,";")
    _ArrayDisplay($a)

    Eine Möglichkeit für die optische Anpassungen wäre ein VBA-Script, in der Excel Tabelle, die beim Starten der Excel Datei ausgeführt wird - auch aus dem Gesichtspunkt der geschwindigkeit - das du nachdem du die Daten übertragen hast aus AutoIt heraus anstößt.

    BugFix : Stimmt, das mit den Dimensionen im Array muss nicht sein, ist aber oft sehr hilfreich! Aber eine Grundsatzdiskussionen würde ich dazu nicht anfangen. Es ist halt so, wie der Anwender oder Benutzer leichter klar kommt.
    Für jemand der mit Arrays anfängt zu arbeiten ist es eine gute Hilfe. Wenn man sicherer ist mir Arrays kann man die Dimensionen mit UBound gezielt abfragen. Beides geht, beides ist erlaubt und beides hat seine Vor- und Nachteile.

    lg
    Steffen

    Einmal editiert, zuletzt von s.koni (14. November 2016 um 12:24)