Avatar billede sproc_ket12 Nybegynder
11. august 2011 - 13:29 Der er 6 kommentarer og
1 løsning

Text fil til TreeView VB 2010

Hvordan får jeg en Textfil som her:

TOP.MAIN.MIDDLE.1
TOP.MAIN.MIDDLE.2
TOP.MAIN.MIDDLE.3
TOP.MAIN.MIDDLE.4
TOP.MAIN.MIDDLE.5
TOP2.MAIN2.MIDDLE.1
TOP2.MAIN2.MIDDLE.2
TOP2.MAIN2.MIDDLE.3
TOP2.MAIN3.MIDDLE.1
TOP2.MAIN3.MIDDLE.2

Til at se sådan ud i et TreeView:

-TOP
  -MAIN
      -MIDDLE
            -1
            -2
            -3
            -4
            -5
-TOP2
    -MAIN2
        -MIDDLE
              -1
              -2
              -3
    -MAIN3
        -MIDDLE
              -1
              -2
Avatar billede Spotgun Seniormester
12. august 2011 - 08:47 #1
Jeg er ikke så skarp ud i VB.Net, men jeg har lavet en løsning i C#. Oversat til VB.Net skulle det give:

Private Sub Test()
    Dim testdata As String =
        "TOP.MAIN.MIDDLE.1;" &
        "TOP.MAIN.MIDDLE.2;" &
        "TOP.MAIN.MIDDLE.3;" &
        "TOP.MAIN.MIDDLE.4;" &
        "TOP.MAIN.MIDDLE.5;" &
        "TOP2.MAIN2.MIDDLE.1;" &
        "TOP2.MAIN2.MIDDLE.2;" &
        "TOP2.MAIN2.MIDDLE.3;" &
        "TOP2.MAIN3.MIDDLE.1;" &
        "TOP2.MAIN3.MIDDLE.2"
    Dim input As String() = testdata.Split(";"C)

    For Each data As String In input
        ParseNodeLine(data)
    Next
End Sub

Private Sub ParseNodeLine(line As String)
    Dim data As String() = line.Split("."C)
    Dim parent As TreeNode = Nothing
    For i As Integer = 0 To data.Length - 1
        If i = 0 Then
            If Not treeView1.Nodes.ContainsKey(data(i)) Then
                treeView1.Nodes.Add(data(i), data(i))
            End If
            parent = treeView1.Nodes(data(i))
        Else
            If Not parent.Nodes.ContainsKey(data(i)) Then
                parent = parent.Nodes.Add(data(i), data(i))
            Else
                parent = parent.Nodes(data(i))
            End If
        End If
    Next
End Sub

Her er "originalen" i C# hvis det har interesse:

        private void testCase()
        {
            string testdata =
                "TOP.MAIN.MIDDLE.1;" +
                "TOP.MAIN.MIDDLE.2;" +
                "TOP.MAIN.MIDDLE.3;" +
                "TOP.MAIN.MIDDLE.4;" +
                "TOP.MAIN.MIDDLE.5;" +
                "TOP2.MAIN2.MIDDLE.1;" +
                "TOP2.MAIN2.MIDDLE.2;" +
                "TOP2.MAIN2.MIDDLE.3;" +
                "TOP2.MAIN3.MIDDLE.1;" +
                "TOP2.MAIN3.MIDDLE.2";
            string[] input = testdata.Split(';');

            foreach (string data in input)
            {
                parseNodeLine(data);
            }
        }

        private void parseNodeLine(string line)
        {
            string[] data = line.Split('.');
            TreeNode parent = null;
            for (int i = 0; i < data.Length; i++)
            {
                if (i == 0)
                {
                    if (!treeView1.Nodes.ContainsKey(data[i]))
                    {
                        treeView1.Nodes.Add(data[i], data[i]);
                    }
                    parent = treeView1.Nodes[data[i]];
                }
                else
                {
                    if (!parent.Nodes.ContainsKey(data[i]))
                    {
                        parent = parent.Nodes.Add(data[i], data[i]);
                    }
                    else
                    {
                        parent = parent.Nodes[data[i]];
                    }
                }
            }
        }
Avatar billede Mads Larsen Nybegynder
12. august 2011 - 09:33 #2
Noget i denne her stil?
Det er godt nok ikke fra en tekstfil, men det burde ikke være det store arbejde at ændre :)


        Dim t As TreeView = TreeView1
        Dim ArrList As New ArrayList

        ArrList.Add("Top.MAIN.MIDDLE.1")
        ArrList.Add("Top.MAIN.MIDDLE.2")
        ArrList.Add("Top.MAIN.MIDDLE.3")
        ArrList.Add("Top.MAIN.MIDDLE.4")
        ArrList.Add("Top.MAIN.MIDDLE.5")
        ArrList.Add("Top2.MAIN2.MIDDLE.1")
        ArrList.Add("Top2.MAIN2.MIDDLE.2")
        ArrList.Add("Top2.MAIN2.MIDDLE.3")
        ArrList.Add("Top2.MAIN3.MIDDLE.1")
        ArrList.Add("Top2.MAIN3.MIDDLE.2")


        Dim Top As TreeNode
        Dim Main As TreeNode
        Dim Middle As TreeNode
        Dim Item As TreeNode

        Dim TopName As String = ""
        Dim MainName As String = ""
        Dim MiddleName As String = ""

        For i As Integer = 0 To ArrList.Count - 1
            Dim Str() As String = Split(ArrList(i), ".")

            If Not TopName = Str(0) Then
                TopName = Str(0)
                Top = t.Nodes.Add(Str(0))
                Main = Top
            End If

            If Not MainName = Str(1) Then
                MainName = Str(1)
                Main = Top.Nodes.Add(Str(1))
                Middle = Main
            End If

            If Not MiddleName = Str(2) Then
                MiddleName = Str(2)
                Middle = Main.Nodes.Add(Str(2))
            End If
            Item = Middle.Nodes.Add(Str(3))
        Next
Avatar billede sproc_ket12 Nybegynder
12. august 2011 - 10:38 #3
Tak til spotgun, det var lige det jeg manglede. IT-Guffe tak for det, men den anden løsning er bedre da jeg kan sætte flere punktummer uden at lave koden om.
Avatar billede Spotgun Seniormester
12. august 2011 - 10:44 #4
Godt du kunne bruge løsningen. Men du skulle vist ikke selv have taget pointene for det...
Avatar billede Mads Larsen Nybegynder
12. august 2011 - 10:59 #5
Oh det beklager jeg :-P Så ikke der var kommet en anden løsning da jeg endelig var færdig med koden ;)
Avatar billede sproc_ket12 Nybegynder
15. august 2011 - 13:46 #6
Undskyld Spotgun, det var ikke med vilje. Kan jeg lave det om ?
Avatar billede Spotgun Seniormester
15. august 2011 - 13:53 #7
Sagtens :)

Lav et nyt spørgsmål med titlen "Point til Spotgun" og et link til dette spørgsmål, så lægger jeg et svar til dig der.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester