csv Datei auslesen und in XML Datei umwandeln.

  • Hallo Leute!

    ich mache gerade eine Ausbildung zum Informatik Kaufmann und habe als Aufgabe bekommen eine csv Datei mit Hilfe von autoit auszulesen und in eine XMl Datei umzuwandeln.
    Hat jemand eine Idee wie das geht?
    Hatte an eine Schleife gedacht und vielleicht die _filereadintoarray Funktion.
    Ist mein zweiter Tag in der Ausbildung - ein wenig Hilfe von euch wäre klasse.

    mfg ;)

  • Hi,
    ich würde mir zunächst eine Struktur im XML-File überlegen, die CSV-Datei zeilenweise auslesen und die einzelnen Werte per stringsplit() am Trennzeichen trennen und in die XML-Struktur schreiben
    Wie auch sonst? :D

    Zitat

    Ist mein zweiter Tag in der Ausbildung - ein wenig Hilfe von euch wäre klasse.

    Naja, viel gemacht hast du noch nicht, Interesse deinerseits wäre gefragt!

    Zitat

    Hatte an eine Schleife gedacht und vielleicht die _filereadintoarray Funktion.

    gedacht reicht nicht :thumbdown: , schreib ein Script, stell es in den Thread und sag, was du bisher versucht hast und was nicht geklappt hat.
    Zeig an Beispielen, wie die XML-Datei aussehen soll und schreib dazu, was in deinem AutoItscript nicht funktioniert hat um diese Datei zu erstellen!

    Hier wird dir sicherlich niemand ein Script schreiben, damit du in Ruhe deine Freizeit genießen kannst!

  • Spoiler anzeigen
    [autoit]


    ; Getestet unter Windows XP Professional mit SP 3
    ; Getestet unter Windows 7 Professional 32-Bit mit SP 1

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

    Const $adOpenStatic = 3

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

    Dim $filepath = FileOpenDialog('', '', 'CSV-Datei (*.csv)')
    If $filepath = -1 Then
    ConsoleWrite('! Abbruch durch den Benutzer' & @CRLF)
    Exit
    EndIf

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

    $fso = ObjCreate('Scripting.FileSystemObject')
    Dim $cnn = ObjCreate('ADODB.Connection')
    $cnn.Provider = 'Microsoft.Jet.OLEDB.4.0'

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

    ; ggf. den Delimiter inn der Registry anpassen.
    ; HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text\Format
    $cnn.ConnectionString = StringFormat( _
    'Data Source=%s;Extended Properties="text;HDR=YES;FMT=Delimited"', _
    $fso.GetParentFolderName($filepath))
    $cnn.Open()

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

    Dim $rs = ObjCreate('ADODB.RecordSet')
    $rs.Open(StringFormat( _
    'SELECT * FROM [%s]', _
    $fso.GetFileName($filepath)), _
    $cnn, $adOpenStatic)

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

    Dim $xmlDoc = ObjCreate('Microsoft.XMLDOM')
    Dim $rootNode = $xmlDoc.createElement($fso.GetFileName($filepath))
    $xmlDoc.appendChild($rootNode)

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

    For $r = 0 To $rs.RecordCount - 1
    Dim $node = $xmlDoc.createElement('Datensatz')
    $rootNode.appendChild($node)
    For $field In $rs.Fields
    Dim $childNode = $xmlDoc.createElement($field.Name)
    $childNode.Text = $rs.Fields($field.Name).Value
    $node.appendChild($childNode)
    Next ; field
    $rs.MoveNext()
    Next ; r

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

    Dim $intro = $xmlDoc.createProcessingInstruction _
    ('xml', 'version=''1.0''')
    $xmlDoc.insertBefore _
    ($intro, $xmlDoc.childNodes(0))

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

    $xmlpath = FileSaveDialog('', $fso.GetParentFolderName($filepath), _
    'XML (*.xml)', 2, StringFormat('%s.xml', $fso.GetBaseName($filepath)))
    If @error Then
    ConsoleWrite('! Abbruch durch den Benutzer' & @CRLF)
    Exit
    EndIf
    $xmlDoc.Save($xmlpath)

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

    ShellExecute($xmlpath)

    [/autoit]