Hallo autoBert,
hab hier gerade ein problem, beim einlesen von XML datein, vielleicht kannst du mal drüberschauen!
das script läuft schon so halbwegs! hab aber beim 3. oder 4. durchlauf eine dopplung eines wertes!
in den xml dateinen gibt es immer einen abschnitt <MN20>rufnummer01</MN20> und
dazugehörige <DESTNAME>zielrufnummer</DESTNAME> einträge (mal einer, mal mehrere!
was will ich erreichen: es sollen alle <MN20> und die dazugehörigen <DESTNAME>in einer zeile stehen! d.h. im excel spalte 1|2|3 usw.
dabei sollen doppelte <DESTNAME> nicht mit übernommen werden.
Spoiler anzeigen
#Include <Array.au3>
#include <file.au3>
#include <Excel.au3>
Dim $aRecords, $avArray_01[1], $avArray_xx[1], $aC, $aCD
Local $z
$FileList=_FileListToArray(@DesktopDir,"*.xml")
If @Error=1 Then
MsgBox (0,"","No Folders Found.")
Exit
EndIf
If @Error=4 Then
MsgBox (0,"","No Files Found.")
Exit
EndIf
;_ArrayDisplay($FileList,"$FileList")
;erstelle excel dokument
Local $oExcel = _ExcelBookNew() ;Create new book, make it visible
For $z = 1 to $FileList[0]
;MsgBox(0,"", $FileList[$z])
$eintrag = ""
_test()
Next
Func _test()
[/autoit] [autoit][/autoit] [autoit]If Not _FileReadToArray(@DesktopDir & "\" & $FileList[$z],$aRecords) Then
MsgBox(4096,"Error", " Error reading log to Array error:" & @error)
Exit
EndIf
For $x = 1 to $aRecords[0]
$var = $aRecords[$x]
$var = StringReplace($var, " ", "")
$var = StringStripCR($var)
$var = StringStripWS($var, 3)
;Msgbox(0,'Record:' & $x, $aRecords[$x])
IF StringLeft($var, 6) = "<MN20>" Then
$var01 = $var
$var01 = StringTrimRight($var01, 7)
;Msgbox(0,'Record:' & $x, $var01)
$var01 = StringTrimLeft($var01, 6)
;Msgbox(0,'Record:' & $x, $var01)
EndIf
IF StringLeft($var, 10) = "<DESTNAME>" Then
$var02 = $var
$var02 = StringTrimRight($var02, 11)
$var02 = StringTrimLeft($var02, 10)
;Msgbox(0,'Record:' & $x, $var01 & "|" & $var02)
_ArrayAdd($avArray_01, $var01 & "|" & $var02)
EndIf
Next
;_ArrayDisplay($avArray_01)
Local $aC = _ArrayUnique($avArray_01)
_ArrayDelete($aC, 0)
_ArraySort($aC)
;_ArrayDisplay($aC)
For $i = 1 To _ArrayMaxIndex($aC, 0, 1)
;MsgBox(0,"", _ArrayMin($aC, 0, 1))
$zeile_1 = $i + 1
$eintrag = StringSplit($aC[$i], "|")
_ArrayAdd($avArray_xx, $eintrag[1])
Next
Local $aCD = _ArrayUnique($avArray_xx)
_ArrayDelete($aCD, 0)
_ArraySort($aCD)
_ArrayDisplay($aCD, "test")
;erstelle excel dokument
;Local $oExcel = _ExcelBookNew() ;Create new book, make it visible
For $i = 1 To _ArrayMaxIndex($aC, 0, 1)
;MsgBox(0,"", _ArrayMin($aC, 0, 1))
$zeile_1 = $i
$eintrag = StringSplit($aC[$i], "|")
;MsgBox(0,"",$eintrag[1] & " " & $eintrag[2])
IF $i = 1 and $aCD[1] = $eintrag[1] Then
_ExcelWriteCell($oExcel, "'"&$eintrag[1], $zeile_1 + $z, 1)
_ExcelWriteCell($oExcel, $eintrag[2], $zeile_1 + $z, 2)
;MsgBox(0,$i & " 1", $zeile_1 + $z)
Else
;_ExcelWriteCell($oExcel, $eintrag[1], $zeile_1, 3)
_ExcelWriteCell($oExcel, $eintrag[2], $zeile_1 + $z -1 , $i +1)
;MsgBox(0,$i &" 2 " & $eintrag[1] , $zeile_1 + $z -1)
EndIf
$eintrag[1] = ""
$eintrag[2] = ""
;$oExcel.Range("A"& $zeile_1 &":B"& $zeile_1) .Interior.ColorIndex = 27 ; setze Farbe
;$oExcel.Range("A1:B"&$zeile_1).Borders.LineStyle = 1 ; setze einen Rahmen um die Zellen
Next
$oExcel.Columns.AutoFit ;AutoFits the Columns for better viewing
$oExcel.Rows.AutoFit ;AutoFits the Rows for better viewing
EndFunc
[/autoit]
wo könnte der fehler liegen? hab auch mal die excel ausgabe angehangen und das markiert, was da zuviel geschrieben wird!
ich denke es liegt an einer schleife, denn pro durchlauf sollte immer nur 1 element im array sein, wenn man sich die bilder ansieht, ist aber schon im zweiten durchlauf ein zweites vorhanden!
danke
gruß gmmg