CSV bearbeit

  • Hallo Zusammen,

    ich habe schon die ein oder andere Erfahrung in AutoIT gesammelt. Jetzt moechte ich gerne eine CSV-Datei einlesen und mit den eingelesenen Werten arbeiten und spaeter die Datei neuerstellen.
    Ich habe eine CSV-Datei, die mit ";" getrennte Werte enthaelt. Aus dieser Datei benoetige ich zum weiterverarbeiten nur drei Zellen jeder Zeile. Wenn AutoIT fertig mit der Bearbeitung der Daten ist, soll das Ergebniss entsprechend hinter jede Zeile gehaengt werden.

    Nur, ich hab noch keine Ahnung von Arrays oder Schleifen. Kann mir jemand unterstuetzung geben bzw. ein kurzes Code-Beispiel?

    Gruß

  • Hallo und Herzlich willkommen im Forum.
    In meiner Signatur findest du einige Tutorials in denen du die Grundlagen nachlesen kannst.
    Meiner Meinung nach brauchst du zumindest mal das Wissen wie Schleifen funktionieren.
    Das was du willst kann man denke ich auch ohne Array's lösen. (wenn auch nicht so schön)

    Um dir ein Beispiel geben zu können wären genauere Angaben sehr gut.
    Ideal wären 2 Dateien, eine "Vorher" und eine Nachher" Datei, dann sieht man am besten die Veränderung.
    Ggf noch mit genauerer Erklärung.

    Gruß
    Schnitzel

  • Vorher:

    KOPF-DER-DATEI;KOPF-DER-DATEI
    Feld1;Feld2;Feld3;Feld4

    AutoIT-Skript nimm Feld3 u. Feld4, lässt die Daten durch eine Prozedur laufen, die Prozedur gibt zwei Ergebnisse wieder, die in die Datei geschrieben werden.

    KOPF-DER-DATEI;KOPF-DER-DATEI
    Feld1;Feld2;Feld3;Feld4;Feld5;Feld6

  • Würde das so machen:

    1. Datei in Array einlesen mit

    [autoit]


    #include <File.au3> ; wird für die fileread und filewrite to Array Funktionen benötigt
    Global $meineDatei ; Variable muss definiert werden
    _filereadtoarray("pfadzurdatei", $meineDatei) ; Dateiinhalt wird zeilenweise in Variable als Array gespeichert

    [/autoit]


    2. Ich gehe davon aus, dass "KOPF-DER-DATEI;KOPF-DER-DATEI" nur in Zeile 1 der Datei steht und alle weiteren Zeilen immer pro Zeile die 4 Datenfelder enthalten.
    3. eine Schleife erstellen, die das Array abarbeitet

    [autoit]


    $zeile = 2 ; 2 weil die Daten erst in Zeile 2 anfangen, Zeile 1 enthält nur die Überschriften
    while $zeile <= $meinedatei[0] ; in $meinedatei[0] steht die Größe des Arrays, bedeutet wir arbeiten nun solange in der Schleife, bis wir beim letzten Array Element ankommen
    ; als ersts müssen wir die aktuelle Zeile die ja 4 mit semikolon getrennte Einträge enthält aufsplitten um wert3 und wert4 zu erhalten
    $zeilenwerte = stringsplit( $meinedatei[$zeile], ";" ) ; teilt den string der aktuellen Zeile nach semikolon auf und speichert jeden Wert in das Array zeilenwerte
    $wert3 = $zeilenwerte[3] ; hier sollte Wert3 stehen
    $wert4 = $zeilenwerte[4] ; hier sollte Wert4 stehen
    $ergebnis = $wert3 + $wert4 ; hier müsstest du nun natürlich deine Funktion einbauen die mit deinen Werten arbeitet, in meinem Fall eine simple addition
    ; nun haben wir ein ergebnis das wir später in die datei schreiben wollen
    $meinedatei[$zeile] = $meinedatei[$zeile] & ";" & $ergebnis ; nimmt den alten inhalt und fügt das ergebnis mit semikolon hinten an
    ; wir sind nun mit dem ersten Schleifendurchlauf fertig, jetzt müssen wir die nächste Zeile nehmen
    $zeile = $zeile + 1
    wend

    [/autoit]


    4. Nachdem wir alle Werte in das array geschrieben haben müssen wir das ganze noch in die Datei schreiben

    [autoit]


    _FileWriteFromArray("pfadzurdatei", $meinedatei , 1 ) ; die 1 bedeutet dass er ab $meineDatei[1] schreiben soll, ohne die 1 würde er auch Eintrag 0 schreiben in dem ja wie wir noch wissen die Anzahl der Arrayeinträge steht, da wir das nicht wollen fangen wir bei Eintrag 1 an.

    [/autoit]

    Achtung das ganze ist ungetestet, sollte aber auf jedenfall die ungefähre Vorgehensweise zeigen.

  • Sauber, das klappt schon sehr gut - habs noch bisschen angepasst!

    Gibt es auch die Moeglichkeit, die Kopfzeile neuzuschreiben?