wie nutzt man Listview(Item) performant / besser ?

  • Hallo ich versuche gerade eien channel editor zu basteln und habe hierzu ein, zwei Fragen ;)

    Es geht um eine etwas längere Liste die dargestellt werden soll (und wenn möglich auch sortierbar)
    Es sind so ca 500 -1500 zeile, der Umfang kann variieren.
    Leider muss man die einzelnen Zeilen ja noch zerlegen, und es gibt auch Gruppeneinträge die mit einem Doppelpunkt beginnen.

    Hier ein paar Zeilen, damit ich weiß ob ich schon mal auf dem richtigen Weg bin:

    [autoit]


    $List1 = GUICtrlCreateListview("Nr.|1|2|3|4|5|6|7|8|9|10|11|12|13", 40, 88, 529, 240)

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

    Func sort_chanels()
    _FileReadToArray($channel_file, $channels)
    For $i = 1 to UBound($channels,1) -1
    If StringLeft($channels[$i],1) = ":" Then
    $b=$i & "|" & $channels[$i]& "||||||||||||"
    Else
    $a=StringSplit($channels[$i],":")
    $b=$i & "|" & $a[1] & "|" & $a[2] & "|" & $a[3] & "|" & $a[4] & "|" & $a[5] & "|" & $a[6] & "|" & $a[7] & "|" & $a[8] & "|" & $a[9] & "|" & $a[10] & "|" & $a[11] & "|" & $a[12] & "|" & $a[13]
    EndIf
    GUICtrlCreateListViewItem($b,$List1)
    Next
    EndFunc

    [/autoit]

    Mein Problem ist zum einen das die PPV Sender von Premiere einem | im Namen haben, welcher als Trenner interpretiert wird.
    Wenn ich das auch noch je Zeile abprüfe dauert es ja noch länger.Wie also am geschicktesten?
    Oer wie blende ich die Gui solange aus, ist das "Grid" nachtäglich sortierbar?

    [autoit]

    HIT24;PREMIERE:12070:hC34:S19.2E:27500:1023:1024=deu:32:1702,1722,1837,1833,1834,9C4,1801,B00:168:133:1:0
    GOLDSTAR TV,GOLDSTAR;PREMIERE:12070:hC34:S19.2E:27500:3839:3840=deu:32:1702,1722,1837,1833,1834,9C4,1801,B00:518:133:1:0
    HEIMATKANAL,HEIMAT;PREMIERE:12070:hC34:S19.2E:27500:1279:1280=deu:32:1702,1722,1837,1833,1834,9C4,1801,B00:22:133:1:0
    .;PREMIERE:12031:hC34:S19.2E:27500:3839:3840=deu:0:1722,1831,1702,1801:27:133:4:0
    :Premiere Digital
    PREMIERE DIREKT,DIREKT;PREMIERE:12031:hC34:S19.2E:27500:2815:2816=deu,2817=deu;2819=deu:0:0:18:133:4:0
    D 1 - 06|45:12070:hC34:S19.2E:27500:511:512=deu,513=deu;515=deu:0:1722,1702,1831,1801,1830:212:133:1:0

    [/autoit]


    hier mal ein paar Daten

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • [autoit]

    Func sort_chanels()
    opt("GUIDataSeparatorChar","€")
    _FileReadToArray($channel_file, $channels)
    For $i = 1 to UBound($channels,1) -1
    If StringLeft($channels[$i],1) = ":" Then
    $b=$i & "€" & $channels[$i]& "€€€€€€€€€€€€"
    Else
    $a=StringSplit($channels[$i],":")
    $b=$i & "€" & $a[1] & "€" & $a[2] & "€" & $a[3] & "€" & $a[4] & "€" & $a[5] & "€" & $a[6] & "€" & $a[7] & "€" & $a[8] & "€" & $a[9] & "€" & $a[10] & "€" & $a[11] & "€" & $a[12] & "€" & $a[13]
    EndIf
    GUICtrlCreateListViewItem($b,$List1)
    Next
    EndFunc

    [/autoit]


    ok aber das € zeichen scheint nicht vorhanden zu sein :)
    Wie könnte man da ganze nun beschleunigen, ich denke das die Anzeige während des Bestückens verlangsamt die Ausführung extrem.

    Ein anderes Script was die Datei umformt läuft recht schnell im Vergleich hierzu, mach ich irgend etwas falsch?

    Kann man die Listbox nachträglich anders sortieren, ohne _Arraysort($channels) und erneutes Bestücken.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Moin,

    versuch es doch einmal anders herum ... ;)

    [autoit]

    $List1 = GUICtrlCreateListview("Nr.|1|2|3|4|5|6|7|8|9|10|11|12|13", 40, 88, 529, 240)

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

    Func sort_chanels($channel_file)

    Local $channels,

    $hfile = FileOpen ($channel_file, 0)
    $str = FileRead ($hfile)
    If StringInStr ($str, '|') Then
    $str = StringReplace ($str, '|', '-') ; D 1 - 06|45 = D 1 - 06-45
    EndIf
    $str = StringReplace ($str, ':', '|') ; ... der umgekehrte Weg ...
    $channels = StringSplit ($str, @CRLF, 1)

    For $i = 1 to $channels[0][0]
    If StringLeft($channels[$i],1) == "|" Then
    $channels[$i] = $i & $channels[$i] & "||||||||||||"
    Else
    $channels[$i] = $i & "|" & $channels[$i]
    EndIf
    GUICtrlCreateListViewItem($channels[$i], $List1)
    Next
    FileClose ($hfile)
    EndFunc

    [/autoit]


    LG
    Greenhorn