TreevIew mit csv füllen!

  • Hallo und guten Abend,

    ich weis leider nicht weiter. Ich habe eine Stückliste im csv Format die ich gerne in ein TreeView einlesen möchte.
    In der CSV sind die Teil mit USG_P-XXXXXX und die Baugruppen mit USG_A-XXXXXX benannt.
    Ich habe gedacht, dass man das über die Positions Nr. machen könnte, aber leider weiss ich nicht mehr weiter.

    Der aufbau der CSV ist folgender:

    PositionNr, ET-Nummer; Bezeichnung
    1 USG_A-383482 Baugruppe1
    1.2 USG_P-438748 Teil1
    2 USG_A-394934 Baugruppe 2

    So und hier mein versuch...

    [autoit]


    Func _StartTest()
    $input = GUICtrlRead($lbOpen) ; Lese den Path zur Datei
    $aResult = _ParseCSV($input, "", ', 4) ;Die csv wird in ein Array geschrieben ( bsp. $aResult[10][5] )
    $count = _FileCountLines($Input) ;Lese wieviel zeihlen es gibt!

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

    ;Fülle das TreeView
    For $i = 1 to $count -1
    $Split = StringSplit($aResult[$i][1],".")

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

    If @error Then
    $aLen = StringLen($Split[1])
    For $a = 0 to $Split[0]-1

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

    Local $idGeneralitem = GUICtrlCreateTreeViewItem($aResult[$i][1]&"-"&$aResult[$i][2]&" - "& $aLen, $TreeView1)
    ;For $b = 0
    Next
    EndIf

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

    ;Local $idGeneralitemSub = GUICtrlCreateTreeViewItem($aResult[$i][1]&"-"&$aResult[$i][2]&" - "& $aLen, $idGeneralitem) ; Fühge ein Node hinzu!

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

    Next
    ;_ArrayDisplay($aResult)
    EndFunc

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

    Wenn mir jemand einen Tipp oder eine Idee hat wäre das Super :D

    Gruß pat2381

  • Also ich würde das ganze mit einem zweidimensionalen Array abbilden, das so aussieht:

    [autoit]

    Global $aTreeview[1][2]; [x][0] = CtrlID, [x][1] = PositionNr

    [/autoit]


    So kannst du wenn du ein neues Item anlegen willst immer rausfinden wer der zugehörige Parent sein soll. (Nämlich die ID wo die PositionsNr passt)

    Im Prinzip kannst du dann wenn du eine ID 1.2.3 anlegen willst einfach das Array durchsuchen nach der PositionsNR 1.2 (letze zahl wegschneiden).
    Wenn du einen Treffer hast dann hast du auch die zugehörige Parent-ControlID die du brauchst um das Item anzugelegen
    Das Array dann einfach mit der neuen ControlID + PositionsNR füttern.

    Soweit zum ablauf. Ich hätte auch ein fertiges Beispiel, aber ich denke es ist besser wenn dus erstmal selbst probiert.
    Könnte sonst etwas kompliziert sein^^

  • Hallö,

    erst mal herzlichen Dank für den Tipp.
    Bin mir noch nicht ganz sicher, ob ich das richtig verstanden habe, wie du das meinst.
    Besonders die umsetzung ist mir noch nicht ganz klar.

    Ich glaube (ohne es zu wissen :D )das es doch ein wenig Komplizierter ist.

    Ich habe mal, die CSV Datei angehängt, dort kann man auch nochmal schön sehen, wie der zusammenhang der PositionsNr und den Baugruppen ist.

    Eine Baugruppe hat nämlich nicht immer eine Ganzzahl als PositionsNr. Es kann auch mal sein das eine Baugruppe die Nummer hat -> z.B 9.1.3.2.2

    Gruß pat2381

    Spoiler anzeigen

    9.1;USG_P-023698.SLDPRT;ET-00109324;;;;;;;;;;
    9.2;Kopie_D0229799.sldprt;ET-00066022;;;;;;;;;;
    9.3;USG_A-007252.SLDASM;ET-00109239;;;;;;;;;;
    9.3.1;USG_P-022234.sldprt;ET-00098129;;;;;;;;;;
    9.3.2;USG_P-000420.SLDPRT;ET-00045705;;;;;;;;;;
    9.3.3;USG_P-023801.SLDPRT;ET-00110462;;;;;;;;;;
    9.3.4;USG_A-007279.SLDASM;ET-00109329;;;;;;;;;;
    9.3.4.1;USG_P-023700.SLDPRT;ET-00109328;;;;;;;;;;
    9.3.4.2;USG_P-023629.sldprt;ET-00108109;;;;;;;;;;
    9.3.5;USG_P-023676.SLDPRT;ET-00109288;;;;;;;;;;
    9.3.6;USG_P-023741.SLDPRT;ET-00109388;;;;;;;;;;
    9.3.7;USG_P-023644.SLDPRT;ET-00109238;;;;;;;;;;
    9.3.8;USG_P-023702.SLDPRT;ET-00109331;;;;;;;;;;
    9.3.9;USG_P-023675.SLDPRT;ET-00109287;;;;;;;;;;
    9.3.10;SM620D0218513.sldprt;ET-00048228;;;;;;;;;;
    9.3.11;USG_P-023643.SLDPRT;ET-00109237;;;;;;;;;;
    9.3.12;USG_A-007294.SLDASM;ET-00109387;;;;;;;;;;
    9.3.12.1;USG_P-023629.sldprt;ET-00108109;;;;;;;;;;
    9.3.12.2;USG_P-023740.SLDPRT;ET-00109386;;;;;;;;;;
    9.3.13;USG_P-023678.SLDPRT;ET-00109290;;;;;;;;;;
    9.3.14;USG_P-023674.SLDPRT;ET-00109285;;;;;;;;;;
    9.4;USG_P-023685.SLDPRT;ET-00109306;;;;;;;;;;
    9.5;Kopie_D0248382.sldasm;ET-00066299;;;;;;;;;;
    9.5.1;Kopie_D0235178.sldasm;ET-00066066;;;;;;;;;;
    9.5.1.1;Kopie_D0228903.sldprt;ET-00066018;;;;;;;;;;
    9.5.1.2;Kopie_Sicherungsring DIN 471 FST 20.sldprt;ET-00066801;;;;;;;;;;
    9.5.1.3;Kopie_D0235161.sldprt;ET-00066065;;;;;;;;;;
    9.5.1.4;Kopie_Sicherungsring DIN 472 FST 47.sldprt;ET-00066805;;;;;;;;;;
    9.5.1.5;Kopie_Rillenkugellager 6204-2RSR.sldprt;ET-00066688;;;;;;;;;;
    9.6;SM620D00320275_A.sldprt;ET-00047154;;;;;;;;;;
    9.7;USG_A-007272.SLDASM;ET-00109309;;;;;;;;;;

  • Ok könnte auch sein dass ich da was falsch verstanden habe^^
    Ich hatte den aufbau der Treeview so verstanden, dass eine Nr. 9.3.1 ein ChildItem zum 9.3 ist.
    Ein 9.3.4.1 ist das Child zum 9.3.4. Das wiederum ist ein Child von 9.3

    Mit deiner CSV also so ein aufbau (- steht für ein Child, -- ein Child des Childs )

    Spoiler anzeigen
    [autoit]

    9.1;USG_P-023698.SLDPRT;ET-00109324;;;;;;;;;;
    9.2;Kopie_D0229799.sldprt;ET-00066022;;;;;;;;;;
    9.3;USG_A-007252.SLDASM;ET-00109239;;;;;;;;;;
    -9.3.1;USG_P-022234.sldprt;ET-00098129;;;;;;;;;;
    -9.3.2;USG_P-000420.SLDPRT;ET-00045705;;;;;;;;;;
    -9.3.3;USG_P-023801.SLDPRT;ET-00110462;;;;;;;;;;
    -9.3.4;USG_A-007279.SLDASM;ET-00109329;;;;;;;;;;
    --9.3.4.1;USG_P-023700.SLDPRT;ET-00109328;;;;;;;;;;
    --9.3.4.2;USG_P-023629.sldprt;ET-00108109;;;;;;;;;;
    -9.3.5;USG_P-023676.SLDPRT;ET-00109288;;;;;;;;;;
    -9.3.6;USG_P-023741.SLDPRT;ET-00109388;;;;;;;;;;
    -9.3.7;USG_P-023644.SLDPRT;ET-00109238;;;;;;;;;;
    -9.3.8;USG_P-023702.SLDPRT;ET-00109331;;;;;;;;;;
    -9.3.9;USG_P-023675.SLDPRT;ET-00109287;;;;;;;;;;
    -9.3.10;SM620D0218513.sldprt;ET-00048228;;;;;;;;;;
    -9.3.11;USG_P-023643.SLDPRT;ET-00109237;;;;;;;;;;
    -9.3.12;USG_A-007294.SLDASM;ET-00109387;;;;;;;;;;
    --9.3.12.1;USG_P-023629.sldprt;ET-00108109;;;;;;;;;;
    --9.3.12.2;USG_P-023740.SLDPRT;ET-00109386;;;;;;;;;;
    -9.3.13;USG_P-023678.SLDPRT;ET-00109290;;;;;;;;;;
    -9.3.14;USG_P-023674.SLDPRT;ET-00109285;;;;;;;;;;
    9.4;USG_P-023685.SLDPRT;ET-00109306;;;;;;;;;;
    9.5;Kopie_D0248382.sldasm;ET-00066299;;;;;;;;;;
    -9.5.1;Kopie_D0235178.sldasm;ET-00066066;;;;;;;;;;
    --9.5.1.1;Kopie_D0228903.sldprt;ET-00066018;;;;;;;;;;
    --9.5.1.2;Kopie_Sicherungsring DIN 471 FST 20.sldprt;ET-00066801;;;;;;;;;;
    --9.5.1.3;Kopie_D0235161.sldprt;ET-00066065;;;;;;;;;;
    --9.5.1.4;Kopie_Sicherungsring DIN 472 FST 47.sldprt;ET-00066805;;;;;;;;;;
    --9.5.1.5;Kopie_Rillenkugellager 6204-2RSR.sldprt;ET-00066688;;;;;;;;;;
    9.6;SM620D00320275_A.sldprt;ET-00047154;;;;;;;;;;
    9.7;USG_A-007272.SLDASM;ET-00109309;;;;;;;;;;

    [/autoit]

    Du willst es anders oder?

  • Hallo,

    genau so wie du es gemacht hast möchte ich das haben. :D

    Nur als beispiel:

    Spoiler anzeigen


    9 --> Baugruppe
    -9.1-->Teil
    -9.2-->Baugruppe
    --9.2.1-->Teil
    --9.2.2-->Baugruppe
    ---9.2.2.1--Teil
    -9.2-->Teil

    Aber ich glaube das ist genau so wie due es gemacht hast. :rolleyes:

  • Ok vllt hilft dir ja mein Script weiter^^

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include "_CSV.au3"

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

    Global $aTreeView[1][2]; [x][0] = CtrlID, [x][1] = PositionNr
    Global $aCSV = _ParseCSV('test.csv', ';')
    _ArrayDisplay($aCSV)
    GUICreate("")
    $aTreeView[0][0] = GUICtrlCreateTreeView(5, 5, 390, 390)
    For $i = 0 To UBound($aCSV) - 1
    If _ArraySearch($aTreeView, $aCSV[$i][0], 0, 0, 0, 2, 1, 0) > -1 Then ConsoleWrite('Positionsparameter existiert schon: ' & $aCSV[$i][0] & @LF)
    Select
    Case StringRegExp($aCSV[$i][0], '^\d+\.\d+$')
    _ArrayAdd($aTreeView, $aCSV[$i][0] & '|' & GUICtrlCreateTreeViewItem($aCSV[$i][1], $aTreeView[0][0]))
    ConsoleWrite('Top Item: ' & $aCSV[$i][0] & @LF)
    Case StringRegExp($aCSV[$i][0], '^(\d+\.){2,}\d+$')
    $iHit = _ArraySearch($aTreeView, StringLeft($aCSV[$i][0], StringInStr($aCSV[$i][0], '.', 0, -1)-1), 0, 0, 0, 2, 1, 0)
    If $iHit > -1 Then
    _ArrayAdd($aTreeView, $aCSV[$i][0] & '|' & GUICtrlCreateTreeViewItem($aCSV[$i][1], $aTreeView[$iHit][1]))
    ConsoleWrite('Child Item: ' & $aCSV[$i][0] & @LF)
    Else
    ConsoleWrite('Parent ID existiert nicht: ' & $aCSV[$i][0] & @LF)
    EndIf
    Case Else
    ConsoleWrite('Positionsparameter ungültig: ' & $aCSV[$i][0] & @LF)
    EndSelect
    Next
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Mit der csv aus Post4 von dir sollte das funktionieren.
    Im include _CSV.au3 hab ich nur die _ParseCSV funktion drin. Musste ich mir vorhin googln^^
    (obwohl die OutlookEX.au3 auch gegangen wäre)

    • Offizieller Beitrag

    Hier mal meine Variante:

    Spoiler anzeigen
    [autoit]


    #include <GuiTreeView.au3>

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

    $sFile = FileRead(@ScriptDir & '\treeview2.txt') ; <- CSV-Datei Dateiname/-Pfad evtl. anpassen!
    $aItems = StringSplit($sFile, @CRLF, 1)
    If Not IsArray($aItems) Then Exit

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

    $hGui = GUICreate('test', 300, 400)
    $idTreeView = GUICtrlCreateTreeView(10, 10, 280, 380)
    GUISetState()
    For $i = 1 To $aItems[0]
    $sSearch = StringLeft($aItems[$i], StringInStr($aItems[$i], ';') - 1)
    $aItems[$i] = StringRegExpReplace($aItems[$i], ';{2,}', '')
    $aItems[$i] = StringReplace($aItems[$i], ';', ' ')
    $hFoundItem = _GUICtrlTreeView_FindItem($idTreeView, $sSearch, True)
    If $hFoundItem Then
    _GUICtrlTreeView_SetText($idTreeView, $hFoundItem, $aItems[$i])
    Else
    Do
    $hParent = _GUICtrlTreeView_FindItem($idTreeView, $sSearch, True)
    If Not $hParent Then $sSearch = StringRegExpReplace($sSearch, '(.+)\..*', '$1')
    Until $hParent Or StringLen($sSearch) = 1
    _GUICtrlTreeView_AddChild($idTreeView, $hParent, $aItems[$i])
    EndIf
    Next
    Do
    Until GUIGetMsg() = -3

    [/autoit]