Werte einer *csv Datei in eine andere übertragen

  • Guten Morgen erstmal,
    ich weiß das die Überschrift zum Thema nicht ganz passend ist, aber mir ist leider nichts besseres, zutreffenderes eingefallen.
    Ich will aber auch nicht lang um den heißen Brei reden sondern gleich zur Sache kommen.
    Ich hab noch nicht sehr viele Erfahrungen mit AutoIT, hab bisher nur sehr kleine Skripte geschrieben, das ist jetzt rund 2 Wochen her. Meine Kenntnisse sind daher leider noch nicht so ausgeprägt.
    Nunja...
    Ich habe eine Tabellen die wie folgt aussieht:

    Spoiler anzeigen

    Schueler_Nachname, Schueler_Vorname, Klassen_KlassenbezeichnungSchueler_Nachname, Schueler_Vorname, Klassen_Klassenbezeichnung
    Mustermann, Max, 05A9


    Die Tabelle hat ingesamt 866 Datensätze dieser Art.
    Diese ganzen Schüler sollen nun an einen Domänencontroller als User angelegt werden, dies will ich mit einen Powershell Skript verwirklichen. Das ist auch alles kein Problem soweit.
    Jedoch soll anhand der erstem Tabelle, eine zweite Tabelle erstellt werden, die für die Benutzeranlegung genutzt werden soll.
    Diese würde dann wie folgt aussehen

    Spoiler anzeigen

    Name,NameDomain,Passwort
    MMustermann,MMustermann@beispiel.local, TestPassword


    Sprich von der ersten Tabelle soll der erste Buchstabe des Vornamens genommen werden und vor den Nachnamen gehangen werden.
    Ich hab das auch alles soweit realisiert, jedoch bekomme ich dies nur mit dem ersten Namen hin, die ganzen Schülerdaten die danach kommen werden nicht beachtet, bzw. ich hab auch das Problem das ich mit den Skript die zweite Tablle voranfertigen lasse (Spaltennamen), jedoch wenn ich den ersten Benutzernamen in die Tabelle schreiben lasse, diese Spaltennamen überschrieben werden. Ich hoffe das ist alles soweit verständlich, ich poste hier mal mein Skript.


    Spoiler anzeigen
    [autoit]

    [autoit]
    #include
    #include
    #include

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

    GUICreate("UserCreate Version 1.0", 250, 150)
    GUISetState(@SW_SHOW)

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

    GUICTRLCreateLabel("Tabelle mit Schülerdaten", 65,90,200,25)
    $TabelleSource = GUICtrlCreateButton("Auswählen", 65, 120, 125, 25)
    GUICtrlCreateLabel("Angepasste Tablle (Speicherort waehlen)",45,20,250,25)
    $TabelleTarget = GUICtrlCreateButton("Auswählen", 65, 50, 125, 25)

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

    Do
    $msg = GUIGetMsg()

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

    If $msg = $TabelleTarget Then
    $Filesave = FileOpenDialog("Speichern der Tabellen Datei", "C:\", "Tabellen-Datei (*.csv)", 2, "Tabelle.csv")
    FileWriteLine("" & $Filesave & "", "Name,NameDomain,Passwort" & @CRLF)
    Endif

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

    If $msg = $TabelleSource Then
    $FileOpen = FileOpenDialog("Öffnen der Tabellen Datei", "C:\", "Tabellen-Datei (*.csv)", 2, "Tabelle.csv")
    $FileRead = FileRead("" & $FileOpen & "")
    FileWrite("" & $FileOpen &"", ",")

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

    $StringSplit = StringSplit("" & $FileRead & "", ",")

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

    Do
    $VornameFeld = 4
    $NachnameFeld = 5

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

    $VornameAnfang = StringLeft($Stringsplit[$VornameFeld], 1)
    $Nachname = StringTrimLeft($Stringsplit[$NachnameFeld], 6)
    FileOpen("" & $Filesave & "", 2)
    Filewrite("" & $Filesave & "","" & $VornameAnfang &"")
    FileWrite("" & $Filesave & "","" & $Nachname &"")
    FileClose("" & $Filesave & "")

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

    $VornameFeld = $VornameFeld + 3
    $NachnameFeld = $NachnameFeld + 3
    msgbox(64,"Test:", $VornameAnfang)
    msgbox(64,"Test:", $Nachname)
    Until $VornameFeld = 7

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

    Endif

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

    Until $msg = $GUI_EVENT_CLOSE

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

    Wie man im bisherigen Skript sieht wollte ich ersteinmal die ersten beiden User in die zweite Tabelle schreiben, mein Lösungsweg ist bestimmt nicht optimal bzw. es gibt wohl einen besseren.
    Ich wäre erstmal froh wenn durch ausführen des Skriptes die Spalten namen (Name,NameDomain,Passwort) erhalten bleiben würden und zumindestens unter der Spalte Name die ganzen User Daten stehen würden.
    Ich hoffe mir kann hier bei meinen Problem geholfen werden, falls noch fragen bestehen dann schießt los und ansonsten bedanke ich mich schon einmal sehr für eure Hilfe.
    Mfg
    Timsk

    Einmal editiert, zuletzt von Timsk (9. März 2010 um 13:13)

  • Hallo Timsk,

    hier ein Skript:

    Spoiler anzeigen
    [autoit]

    ;Name,NameDomain,PasswortName,NameDomain,Passwort
    ;MMustermann,MMustermann@beispiel.local, TestPassword

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

    #include <GUIConstantsEx.au3>
    #include <file.au3>
    #include <array.au3>

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

    Global $aRecords ;Array mit Schuelerdaten
    Global $sDomain = "@beispiel.local" ;Domainname
    Global $sPWD = "TestPassWort" ;vorbelegtes Passwort

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

    GUICreate("UserCreate Version 1.0", 250, 150)
    GUISetState(@SW_SHOW)

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

    GUICtrlCreateLabel("Tabelle mit Schülerdaten", 65, 90, 200, 25)
    $TabelleSource = GUICtrlCreateButton("Auswählen", 65, 120, 125, 25)
    GUICtrlCreateLabel("Angepasste Tablle (Speicherort waehlen)", 45, 20, 250, 25)
    $TabelleTarget = GUICtrlCreateButton("Auswählen", 65, 50, 125, 25)
    GUICtrlSetState($TabelleSource, $GUI_DISABLE)

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

    Do
    $msg = GUIGetMsg()

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

    If $msg = $TabelleTarget Then
    $sFileDest = FileOpenDialog("Speichern der Tabellen Datei", "C:\", "Tabellen-Datei (*.csv)", 2, "Tabelle.csv")
    ; ConsoleWrite("Save: " & $sFileDest & @CRLF)
    GUICtrlSetState($TabelleSource, $GUI_ENABLE)
    EndIf
    If $msg = $TabelleSource Then
    $sFileSource = FileOpenDialog("Öffnen der Tabellen Datei", "C:\", "Tabellen-Datei (*.csv)", 2, "Tabelle.csv")
    ; ConsoleWrite("Save: " & $sFileSource & @CRLF)
    _FileReadToArray($sFileSource, $aRecords)
    $hFileDest = FileOpen($sFileDest, 2) ;Ausgabedatei neu anlegen
    FileWriteLine($hFileDest, "Name,NameDomain,PasswortName,NameDomain,Passwort")

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

    ; Schueler_Nachname, Schueler_Vorname, Klassen_Klassenbezeichnung
    For $i = 2 To $aRecords[0] ;in $aRecods[0] ist Anzahl in $aRecords[1] = Überschrift
    $aSchueler = StringSplit($aRecords[$i], ",")
    FileWriteLine($hFileDest, StringStripWS($aSchueler[1],8) & "," & StringLeft(StringStripWS($aSchueler[2],8), 1) & StringStripWS($aSchueler[1],8) & $sDomain & "," & $sPWD)
    Next
    FileClose("" & $hFileDest & "")
    EndIf
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]

    das dein Problem löst,

    mfg (Auto)Bert

  • Sehr gut, vielen vielen dank.
    Hab zwar nun eine Weile gebraucht bis ich durch dein Skript durchgestiegen bin, aber ich bin leider noch am Anfang mit dem Einsatz von AutoIT.
    Deine Lösung hat mich jedenfalls einen Schritt weitergebracht.
    Also nocheinmal vielen dank :)

  • Hallo Timsk,

    gern geschehen. Das Skript funktioniert mit dem von dir bechriebenen Aufbau der Tabelle.CSV . Um den Domain-Namen oder das vorbelegte Passwort zu ändern musst du nur am Skriptanfang Anpassungen vornehmen:

    [autoit]

    ;Zeile 8
    Global $sDomain = "@beispiel.local" ;Domainname
    Global $sPWD = "TestPassWort" ;vorbelegtes Passwort
    ;Zeile 11

    [/autoit]

    mfg (Auto)Bert