Aus einer Textdatei sortierte Listen erstellen

  • Hallo zusammen,

    ich bin neu hier und auch neu im AutoIT Scripting.

    Ich habe gerade einen neuen Job begonnen und wusste nicht dass ich ich auch programmieren muss ;-).

    Vielleicht kann ich ja hier ein paar Tips bekommen.

    Folgende Situation:

    Ich habe eine Textdatei, die enthält etliche Datensätze (jeweils pro Zeile), die Daten sind durch ein ";" getrennt. Die Zeilenlänge ist unterschiedlich.

    An der 2. Position ist jeweils die Kundennummer eingetragen.

    Ich möchte jetz aus dieser einen Textdatei mehrere machen, die immer nur 1 Kunden erhalten und alle dessen Aufträge. Diese Dateien sollen dann mit der Kundennummer im Dateinamen abgespeichert werden.

    Ich habe es bisher geschafft, die Datei zu öffnen mittels Fileopen und Filereadline und mir auch die Datensätze in der MsgBox anzeigen zu lassen.
    Jetzt scheitert es allerdings an der Sortierroutine und das Schreiben in die neuen Dateien.

    autoit.de/wcf/attachment/4177/

    Veien Dank schon mal
    Ich habe die AU3 mal in den Anhang gepackt.

    gusuk

    Einmal editiert, zuletzt von gusuk (26. März 2009 um 19:17)

  • Erster Tip meinerseits, schau dir mal die String Befehle in der Hilfe an... Stringsplit usw..

    Edit: Es sind mehrere Sätze Pro zeile die mit einem ";" getrennt sind und es sind auch mehrere Zeilen in der Textdatei?

    Wenn ja, FileReadLine in ein Array speichern. Dann diese Arrays in einer Do...Until schleife mit StringSplit Trennen.

    Bitte korrigieren falls ich mich Irrre ;)

    Einmal editiert, zuletzt von SiLenCa (25. März 2009 um 18:15)

  • Erster Tip meinerseits, schau dir mal die String Befehle in der Hilfe an... Stringsplit usw..

    Edit: Es sind mehrere Sätze Pro zeile die mit einem ";" getrennt sind und es sind auch mehrere Zeilen in der Textdatei?

    Wenn ja, FileReadLine in ein Array speichern. Dann diese Arrays in einer Do...Until schleife mit StringSplit Trennen.

    Bitte korrigieren falls ich mich Irrre ;)

    Hallo und Danke für die schnelle Antwort,

    Ja, ich habe mir die Befehle bereits aus der Hilfedatei angesehen, jedoch fehlt mir als Programmierneuling die Syntax und das Doing.
    Ich habe vor 15 Jahren zwar mal in C Programmiert, aber Autoit ist da etwas anders.

    Stringsplit ist denke ich schon OK, aber ich habe noch ein Problem mit den Schleifen und danach mit der Ausgabe in die Datei.
    Das Auslesen der Daten hat bereits geklappt, aber ich habe keine Ahnung wie ich die Sortierung hinkriegen soll.

    Wäre mal für ein Beispiel dankbar.

    THX

    gusuk

  • Poste doch mal eine (Beispiel-)Datensatz-Datei und schreib dazu, was davon wo gespeichert werden soll.

    Hallo,

    OK ich habe mal einen Beispieldatensatz in den Anhang gepackt.
    Es geht um die Sortierung nach dem 2.ten Wert. Alle Einträge die in der 2ten Spalte identisch sind sollen zusammengefasst, und in einer Datei gespeichert werden, die dann auch den Namen des Wertes aus der 2ten Spalte hat und die Dateiendung ".split"
    Die Anzahl der unterschiedlichen Einträge variiert täglich. Es können bis zu 18 verschiedene Nummern werden und dementsprechend auch 18 verschiedene Dateien erzeugt werden.

    Der Sinn besteht darin, die Nummern entsprechen Kundennummern und dann kann ich in jeweils einer Datei sehen was der entsprechende Kunde an 1 Tag bestellt hat.


    THX a lot

    gusuk

    Einmal editiert, zuletzt von gusuk (26. März 2009 um 19:18)

    • Offizieller Beitrag

    Mal so auf die Schnelle:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3> ; wenn die Liste bereits sortiert vorliegt, dann kann diese Zeile weg
    Global $aFile = StringSplit(FileRead(@ScriptDir & '\export_rcv090324052240.txt'), @CRLF, 1)
    _ArraySort($aFile) ; wenn die Liste bereits sortiert vorliegt, dann kann diese Zeile weg
    Global $hTmp = '', $hFile, $aData
    For $i = 1 To $aFile[0]
    $aData = StringSplit($aFile[$i], ';')
    If $aData[0] = 1 Then ContinueLoop
    If $hTmp <> $aData[2] Then
    If $hTmp <> '' Then FileClose($hFile)
    $hFile = FileOpen(@ScriptDir & '\' & $aData[2] & '.split', 2)
    $hTmp = $aData[2]
    EndIf
    FileWrite($hFile, $aFile[$i] & @CRLF)
    Next
    FileClose($hFile)

    [/autoit]
  • Wie wärs damit?

    [autoit]

    Local $tmparr, $kunde, $file, $file2,$writeline

    [/autoit][autoit][/autoit][autoit]

    $file = Fileopen (@WorkingDir & "\export_rcv090324052240.txt",0)
    While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop

    $tmparr = StringSplit($line,";")


    If FileExists(@WorkingDir & "\" & $kunde & ".txt") Then
    $begin = 3 ;Bestehende dateien ab spaltenummer __ erweitern.
    Else
    $begin = 2
    EndIf

    $kunde = $tmparr[2]
    $writeline = ""
    For $i = $begin To $tmparr[0] -1
    $writeline = $writeline & $tmparr[$i] & ";"
    Next

    $file2 = FileOpen ( @WorkingDir & "\" & $kunde & ".split", 1 )

    FileWrite($file2,$writeline)
    FileClose ($file2)

    ;MsgBox(0, "Line read:", $line)
    Wend

    [/autoit][autoit][/autoit][autoit]

    FileClose ($file)

    [/autoit]
  • Hi Leute,

    Vorab schon mal .....super vielen Dank....

    ich versuche das morgen mal zu implementieren.


    8) THX a lot

    Gusuk

  • Hallo zusammen,

    ich möchte mich ganz herzlich für die Unterstützung bedanken.

    Ich konnte mit Eurer Hilfe das ganze fertigstellen.

    BIG THX to ALL :thumbup: