Array-Zuweisung Problem

  • Hallöchen!

    Ich habe da so ein paar Probleme mit einer Array Zuweisung... Ich habe eine XML Datei erstellt in dieser befindet sich eine Ordnerstruktur mit entsrechendem Viewstate. Ich kann sie auslesen, aber mit der Zuweisung klappt das nicht so richtig. Also wenn ich einen Ordner in einem Ordner erstelle und dieser enthält Dateien, werden sie den falschen Ordner zugewiesen. Ich teste und versuche schon über ner Woche, und kriege es einfach nicht hin... Eigentlich wollt ich Ordner in mindestens 5 Ebenen darstellen können, aber es klappt nur in 2 Ebenen so richtig!
    Die .bmp Dateien gehören in den Images Ordner, werden aber dem vorigen Ordner zugewiesen; der text Ordner gehört auch in den Data Ordner und nicht in´s Stammverzeichniss.

    Ich komm voll nicht weiter, habe das Script schon mehrmals umgebaut, mal ohne Array´s dann wieder mit Array´s; nichts klappt ?(

    Die XML Datei wird als einfaches Textfile eingelesen, und nicht als Objekt; ich habe schon versucht eine XML-UDF mit einzubauen, kam aber garnicht damit klar :whistling: ... Wie gesagt, das Auslesen der XML klappt tadellos; auch das Filtern der gewünschten Positionen funzt. Aber ich schnall das mit den Array-Zuweisungen nicht. Wenn '<Folder' Ausgelesen wird, soll das Array um eins erweitert werden, und wenn '</Folder' gelesen wird soll das Array wieder um eins gekürzt werden. Das habe ich auch mit Ubound gelöst, nur irgendwie kommt er irgendwann auf den Wert -1; was eigentlich garnicht sein kann, er wurde ja vorher ertellt (1) und anschliessend wieder entfernt (0) ?( Und vorallem klappt es bis in die 2.te Ebene, und dann geht garnichts mehr???


    Und wie kann ich Icons in den Treeview einfügen, weil ich wollt nen Icon für Ordner und welche für die Dateien haben damit sie sich besser unterscheiden lassen.


    Kann mir jemand bitte helfen, krieg echt nen Kragen inzwischen :D
    Oder gibt es da vielleicht einen besseren weg???


    P.S. Ich habe die Dateien wieder gelöscht, da ich sie im nächsten Post als Spoiler eingefügt habe.

    Grüsse!

    Einmal editiert, zuletzt von Techmix (15. Februar 2010 um 11:32)

  • [Push]

    Ich versuch es nochmal :rolleyes:

    Also ich habe gestern nocheinmal versucht das hinzubekommen, leider wieder ohne Erfolg...
    Wie gesagt, das Auslesen der Datei funzt; nur die Zuweisungen nicht. Wo liegt hier der Hund begraben?? Ich finde den Fehler einfach nicht, oder ich bekomme das mit den Array´s nicht richtig hin. **StaubAusDenAugenWisch**

    Ich denke das die Fehler sich zwischen Zeile 116 - 132 & Zeile 143 - 150 sowie in Zeile 82 - 86 & Zeile 98 - 106 tümmeln. Die ersten beiden Angaben sollen ein Array mit dem jetzigen 'Ordner' füllen und die letzten beiden sollen das Array mit dem jetzigen 'Ordner' leeren.


    Script:

    Spoiler anzeigen
    [autoit]


    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.5.3 (beta)
    Author: Techmix

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

    Script Function:
    Ich krieg ne Pelle...

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

    #ce ----------------------------------------------------------------------------

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

    #include <GUIConstantsEx.au3>
    #include <GuiStatusBar.au3>
    #include <GuiToolbar.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <TreeViewConstants.au3>

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

    Global $Projekt_Name, $Projektfile[1], $Projekt_Tree, $Folder_last[10]
    Global $TreeView, $Folder_Folder[1], $Folder_excludeFiles[1], $Folder_filter[1], $Folder_name[1], $File_name[1], $Folder_path[1], $Folder_File[1], $ViewState_f[1], $ViewState_o[1]

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

    _GUI()
    _OpenFile()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func _OpenFile()
    $Projektfile_Path = @ScriptDir & "\test.xml"
    If Not @error Then
    ; Zeilen des Textes einlesen bis EOF
    $datei = FileOpen($Projektfile_Path, 0)
    $i=0
    While 1
    $ProjektLine= FileReadLine($datei, $i+1)
    If @error = -1 Then ExitLoop
    ReDim $Projektfile[$i+1]
    $Projektfile[$i]= $ProjektLine
    $i=$i+1
    Wend
    FileClose($datei)
    endif
    _ShowProjekt()
    EndFunc

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

    Func _ShowProjekt()
    Local $Folder_Open, $Folder_Just_Open, $fold, $file, $view
    for $i = 0 to UBound($Projektfile)-1
    $ProjektLine = $Projektfile[$i]
    If @error = -1 Then ExitLoop

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

    ;~ Projektnamen raussuchen
    if StringInStr($ProjektLine, "<Project name") Then
    $Projekt_Name = StringReplace($ProjektLine,'<Project name="', "")
    $Projekt_Name = StringReplace($Projekt_Name,'">', "")

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

    ;~ Programiersprache raussuchen
    ElseIf StringInStr($ProjektLine, "<Language") Then
    $Projekt_Language = StringReplace($ProjektLine,'<Language="', "")
    $Projekt_Language = StringReplace($Projekt_Language,'"></Language>', "")

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

    ;~ Projekt 'SciTE-Session' raussuchen
    ElseIf StringInStr($ProjektLine, "<Buffers") Then
    $Projekt_Buffers = StringReplace($ProjektLine,'<Buffers="', "")
    $Projekt_Buffers = StringReplace($Projekt_Buffers,'"></Buffers>', "")

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

    ;~ Geöffnete Lokale-Verzeichnisse raussuchen
    ElseIf StringInStr($ProjektLine, "<Directorys") Then
    $Projekt_Directorys = StringReplace($ProjektLine,'<Directorys="', "")
    $Projekt_Directorys = StringReplace($Projekt_Directorys,'"></Directorys>', "")

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

    ;~ XML-Structur 'Ordner Schliessen' raussuchen
    ElseIf StringInStr($ProjektLine, "</Folder>") Then
    $Folder_Just_Open = 0
    $Folder_last[$Folder_Open] = $Folder_last[$Folder_Open]
    if $Folder_Open> 0 then $Folder_Open = $Folder_Open - 1

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

    ;~ XML-Structur 'Ordner Öffnen' raussuchen
    ElseIf StringInStr($ProjektLine, "<Folder") Then
    $fold=$fold+1
    ReDim $Folder_Folder[$fold], $Folder_excludeFiles[$fold], $Folder_filter[$fold], $Folder_name[$fold], $Folder_path[$fold]
    $Projekt_Folder = StringReplace($ProjektLine,'<Folder excludeFiles="', "")
    $Projekt_Folder = StringReplace($Projekt_Folder,'" filter="', "--")
    $Projekt_Folder = StringReplace($Projekt_Folder,'" name="', "--")
    $Projekt_Folder = StringReplace($Projekt_Folder,'" path="', "--")
    $Projekt_Folder = StringReplace($Projekt_Folder,'">', "")

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

    ;~ XML-Structur 'Ordner Schliessen' raussuchen
    If StringInStr($Projekt_Folder, "</Folder>") Then
    if $Folder_Open> 0 then $Folder_Open = $Folder_Open - 1
    $Folder_Just_Open = 0
    $Projekt_Folder = StringReplace($Projekt_Folder,'</Folder>', "")
    $Folder_last[$Folder_Open]= $Folder_last[$Folder_Open+1]
    Else
    $Folder_Just_Open = 1
    EndIf

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

    ;~ XML-Structur Ordner-Vorgaben übertragen
    $array = StringSplit($Projekt_Folder, '--', 1)
    $Folder_excludeFiles[$fold-1] = $array[1]
    $Folder_filter[$fold-1] = $array[2]
    $Folder_name[$fold-1] = $array[3]
    $Folder_name[$fold-1] = StringStripWS($Folder_name[$fold-1], 8)
    $Folder_path[$fold-1] = $array[4]

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

    ;~ XML-Structur Ordner zuweisen
    If $fold = 1 then
    $Projekt_Tree = GuiCtrlCreateTreeViewItem($Projekt_Name, $TreeView)
    $Folder_last[$Folder_Open]= $Projekt_Tree
    $Folder_Open = 0
    $Folder_Just_Open = 0
    elseIf $Folder_Open = 0 and $Folder_Just_Open = 0 then
    $Folder_Folder[$fold-1] = GuiCtrlCreateTreeViewItem($Folder_name[$fold-1], $Projekt_Tree)
    $Folder_last[$Folder_Open]= $Folder_Folder[$fold-1]
    ElseIf $Folder_Open = 0 and $Folder_Just_Open = 1 then
    $Folder_Folder[$fold-1] = GuiCtrlCreateTreeViewItem($Folder_name[$fold-1], $Projekt_Tree)
    $Folder_Open = $Folder_Open + 1
    $Folder_last[$Folder_Open]= $Folder_Folder[$fold-1]
    Elseif $Folder_Open = 1 and $Folder_Just_Open = 1 then
    $Folder_Folder[$fold-1] = GuiCtrlCreateTreeViewItem($Folder_name[$fold-1], $Folder_last[$Folder_Open])
    EndIf
    GUICtrlSetColor(-1, 0x0000C0)

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

    ;~ XML-Structur 'Datei' raussuchen
    ElseIf StringInStr($ProjektLine, "<File") Then
    $file=$file+1
    ReDim $Folder_File[$file], $File_Name[$file]
    $FileName = StringReplace($ProjektLine,'<File path="', "")
    $File_Name[$file-1]= StringReplace($FileName,'"></File>', "")
    $File_Name[$file-1]= StringStripWS($File_Name[$file-1],8)

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

    ;~ XML-Structur Datei zuweisen
    If $Folder_Open = 0 and $Folder_Just_Open = 0 then
    $Folder_File[$file-1] = GuiCtrlCreateTreeViewItem($File_Name[$file-1], $Projekt_Tree)
    ElseIf $Folder_Open = 0 and $Folder_Just_Open = 1 then
    $Folder_File[$file-1] = GuiCtrlCreateTreeViewItem($File_Name[$file-1], $Projekt_Tree)
    Elseif $Folder_Open = 1 and $Folder_Just_Open = 1 then
    $Folder_File[$file-1] = GuiCtrlCreateTreeViewItem($File_Name[$file-1], $Folder_last[$Folder_Open])
    EndIf

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

    ;~ XML-Structur 'View-State' raussuchen
    elseIf StringInStr($ProjektLine, "<ViewState>") Then
    while 1
    $i=$i+1
    $view=$view+1
    ReDim $ViewState_f[$view], $ViewState_o[$view]
    $ProjektLine = $Projektfile[$i]
    If StringInStr($ProjektLine, "</ViewState>") Then ExitLoop
    $ViewState = StringReplace($ProjektLine,'<View f="', "")
    $ViewState = StringReplace($ViewState,'"></e>', "")
    $ViewState = StringReplace($ViewState,'" o="', "--")
    $ViewState= StringStripWS($ViewState,8)
    $array = StringSplit($ViewState, '--', 1)
    $ViewState_f[$view-1] = $array[1]
    $ViewState_o[$view-1] = $array[2]
    wend

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

    ;~ XML-Structur View-State zuweisen
    for $j = 0 to UBound($ViewState_o)-1
    if $j=0 and $ViewState_o[$j] = "true" Then
    GUICtrlSetState($Projekt_Tree, BitOR($GUI_EXPAND, $GUI_DEFBUTTON))
    elseif $ViewState_o[$j] = "true" Then
    GuiCtrlSetState($Folder_Folder[$j+1], $GUI_EXPAND)
    EndIf
    next
    EndIf
    next
    EndFunc

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

    Func _GUI()
    #Region ### START Koda GUI section ### Form=c:\programme\autoit3\scite\koda\forms\studio.kxf
    $Form1 = GUICreate("Test Tree", 183, 505, 191, 111)
    $TreeView = GUICtrlCreateTreeView(5, 5, 168, 495)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    EndFunc

    [/autoit]

    XML

    Spoiler anzeigen
    [autoit]


    <Project name="Test">
    <Language="AutoIt3"></Language>
    <Buffers="*.session"></Buffers>
    <Directorys="*.dir"></Directorys>
    <Folder excludeFiles=".bak;.vhw;.pnps;.pnproj;CVS;.svn;Thumbs.db;build.bat;clean.bat" filter="*" name="Test" path="\">
    <Folder excludeFiles=".bak;.vhw;.pnps;.pnproj;CVS;.svn;Thumbs.db" filter="*" name="data" path="data\">
    <Folder excludeFiles=".bak;.vhw;.pnps;.pnproj;CVS;.svn;Thumbs.db" filter="*" name="images" path="images\">
    <File path="neu.bmp"></File>
    <File path="oeffnen.bmp"></File>
    <File path="speichern.bmp"></File>
    <File path="drucken.bmp"></File>
    <File path="auschneiden.bmp"></File>
    <File path="kopieren.bmp"></File>
    <File path="einfuegen.bmp"></File>
    <File path="zurueck.bmp"></File>
    <File path="vor.bmp"></File>
    <File path="suchen.bmp"></File>
    <File path="ersetzen.bmp"></File>
    <File path="schliessen.bmp"></File>
    <File path="lesezeichenspringen.bmp"></File>
    <File path="lesezeichensetzen.bmp"></File>
    <File path="ausfuehren.bmp"></File>
    </Folder>
    <Folder excludeFiles=".bak;.vhw;.pnps;.pnproj;CVS;.svn;Thumbs.db" filter="*" name="text" path="text\">
    <File path="test.txt"></File>
    </Folder>
    </Folder>
    <File path="ReadMe.txt"></File>
    </Folder>
    </Project>

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

    <ViewState>
    <View f="Test" o="true"></e>
    <View f="Test\data" o="false"></e>
    <View f="Test\text" o="true"></e>
    </ViewState>

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

    <ToDo>
    <Do It="Ein Script das diese XML schnell auslesen kann."></Do>
    </ToDo>

    [/autoit]


    Hmmm und wenn man diese als XML als Objekt behandeln könnte, würde das einen Vorteil bringen?? Hat schon jemand mit der XML.udf gearbeitet, also ich meine ob jemand vielleicht ein beispiel Script für mich hat :thumbup:

    Grüsse!

    [Edit]
    Wenn ich in der XML-Datei dem Viewstate um den Eintrag : '<View f="Test\data\images" o="false"></e>' erweitere (welcher ja auch eigentlich vorhanden ist) gibt´s noch nen Error in Zeile 175 ?(

    Brauch echt hilfe, Leute!!!

    2 Mal editiert, zuletzt von Techmix (15. Februar 2010 um 11:33)

    • Offizieller Beitrag

    Ich habe das schon 3-mal durchgelesen, aber ich weiß noch immer nicht was es werden soll. :wacko:
    Also du willst irgendwie die XML-Datei verarbeiten.
    Aber wie soll das fertige Ergebnis aussehen?
    Wir können am besten helfen, wenn wir folgende Infos haben:
    - Zustand vorher (das ist XML-Datei)
    - gewünschter Zustand (??)

    Aber nicht mit Worten umschreiben, sondern an einem Bsp.