DVD Archiv

  • Also Arrays sind auf 2^24 (16.777.216) Einträge "begrenzt". Das dürfte somit wohl kein Problem darstellen. Bleibt noch die maximale Dateigröße, da es sich ja um nur eine Datei handelt. Kommt dann auf das Dateisystem an: Bei FAT32 ist die Dateigröße auf 4GB begrenzt. Ob die Datei aber wirklich so groß wird? Kannst Du ja mal durchrechnen, wieviel Bytes pro DVD benötigt werden und wie viele DVDs Du eingeben möchtest.

    aber ich dachte ab 4000 items wird das Autoit Array ziemlich langsam... Ich dachte ich habe das mal gelesen?! :?:

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • hiho,
    also mit dem _arraysort komm ich nicht zurecht, ich hab jetzt schon xxx möglichkeiten getestet, aber ich komm einfach nicht drauf.....kann mir jmd die lösung verraten?

    • Offizieller Beitrag

    franzp: Ich denke nicht, dass die Anzahl der Array-Elemente dazu führt, dass AutoIt langsamer wird (habe schon Arrays mit über 100.000 Einträgen benutzt). Es könnte aber sein, dass AutoIt langsamer wird, wenn der Arbeitsspeicher zur Neige geht und Windows Auslagerungsspeicher benutzen muss. Soll heißen, wenn in den Arrays sehr viele Informationen stehen und somit der vorhandene Arbeitsspeicher nicht mehr ausreicht. Das sollte aber bei einem DVD-Archiv mit Nur-Text-Inhalt nicht so schnell vorkommen. Es sei denn, es gibt noch Leute, die Windows mit weniger als 512 MB benutzen. ;)

  • Oscar . Ich glaube ich habe das verwechsel mit der Funktion _arraydisplay. Die zeigt doch erstmal "nur" 4000 items an. richtig? Erst wenn an der $iLVIAddUDFThreshold schraubt geht mehr. Oder ist das auch schon wieder falsch ;( Naja ich habs trotzdem mit sqlite gemacht, weil das gerade bei Abfragen bestimmt schneller ist als die Daten aus einer TXT Datei zu lesen. Und man kann gleich ganze Dateien in die DB speichern. Das geht mit TXT files eher schlecht.

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

    • Offizieller Beitrag

    Diese "Fehlfunktion" von _ArrayDisplay gab es tatsächlich mal. Wurde aber mittlerweile behoben. In der aktuellen AutoIt-Version werden auch größere Arrays richtig angezeigt.

    Und keine Sorge, ich will SQL nicht schlecht machen. Mein Beispiel sollte nur zeigen, dass es auch ohne geht, wenn man mit SQL noch nicht so die Erfahrung hat.

  • ich muß nochmal nachfragen zum sortieren, kann doch niht so schwer sein.

    also, ich möchte gern nach

    Spoiler anzeigen
    [autoit]

    $ListView1 = GUICtrlCreateListView("Film | Staffel | Genre | Darsteller | Beschreibung", 0, 54, 1033, 641)

    [/autoit]


    sortieren

    also muß doch jetzt jeweils film, staffel, genre & darsteller ein array werden. falls ich das jetzt richtig verstanden habe....aber wie?
    es soll ja so werden, das wenn ich auf zb genre drücke, das es halt danach sortiert ist ect.

    grüße

  • die hab ich mir natürlich schon angesehen....ich probier einfach noch was weiter rum. ist denn dieses >arraydisplay zwingend erforderlich? wenn ja, ist $Listview in meinem fall die id die ich da eingeben muß?

  • Spoiler anzeigen
    [autoit]

    $aInput = StringSplit("Film | Staffel | Genre | Darsteller ", "|")
    _ArraySort($aInput[1],1,0,0,0)
    _ArrayDisplay($aInput[1], $ListView1)

    [/autoit]


    eine der vielen möglichkeiten die ich schon probiert hab, mal mit stringsplit mal ohne, kann mir evtl bitte jmd sagen was ich machen muß? hänge da jetzt schon 2 tage dran und komm einfach nicht dahinter.

    und das hier

    Spoiler anzeigen
    [autoit]

    Local $avArray[5][3] = [ _
    [5, 20, 8], _
    [4, 32, 7], _
    [3, 16, 9], _
    [2, 35, 0], _
    [1, 19, 6]]

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

    _ArrayDisplay($avArray, "$avArray BEFORE _ArraySort()" )
    _ArraySort($avArray, 0, 0, 0, 0)
    _ArrayDisplay($avArray, "$avArray AFTER _ArraySort() ascending column 0" )
    _ArraySort($avArray, 0, 0, 0, 1)
    _ArrayDisplay($avArray, "$avArray AFTER _ArraySort() ascending column 1" )
    _ArraySort($avArray, 0, 0, 0, 2)
    _ArrayDisplay($avArray, "$avArray AFTER _ArraySort() ascending column 2" )

    [/autoit]


    bringt mich auch nicht wirklich weiter

    • Offizieller Beitrag

    Ich habe das Script um eine Sortierfunktion erweitert und noch einen kleinen Bug (beim laden der Datenbank) beseitigt:

    Spoiler anzeigen
    [autoit]


    #include<GuiListView.au3>
    #include<Array.au3>
    #include<GUIConstantsEx.au3>
    #include<ListViewConstants.au3>

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

    ;Form1
    $Form1 = GUICreate("DVD Archiv", 1034, 716, 195, 112)

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

    ;Auswahl
    $ListView1 = GUICtrlCreateListView("Film | Staffel | Genre | Darsteller | Beschreibung", 0, 54, 1033, 641, $LVS_SHOWSELALWAYS)
    Global $iLVState = GUICtrlGetState($ListView1), $iOldLVState = $iLVState

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

    Global $aDVD[1][5] ;das Array, in dem das Archiv gespeichert wird
    Global $iDVDCounter = 0 ;Zähler, für die Anzahl der DVDs
    Global $sFilename = @ScriptDir & '\DVD-Archiv.txt' ;Dateiname der 'Datenbank'

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

    If FileExists($sFilename) Then _LoadDVDs()

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

    _GUICtrlListView_SetItemCount($ListView1, $iDVDCounter + 1) ;Platz reservieren im Listview
    _GUICtrlListView_AddArray($ListView1, $aDVD) ;das Array im Listview anzeigen
    $Button3 = GUICtrlCreateButton("Markierte Einträge löschen", 25, 25, 180, 20)

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

    ;Menü
    $MenuItem1 = GUICtrlCreateMenu("Datei")
    $MenuItem3 = GUICtrlCreateMenuItem("Neuer eintrag", $MenuItem1)
    $MenuItem4 = GUICtrlCreateMenuItem("Suche", $MenuItem1)
    $MenuItem2 = GUICtrlCreateMenuItem("Beenden", $MenuItem1)
    $MenuItem5 = GUICtrlCreateMenu("Hilfe")
    $MenuItem6 = GUICtrlCreateMenuItem("Hilfe", $MenuItem5)

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

    ;Form2
    $Form2 = GUICreate("Neuer Eintrag", 611, 544, 194, 118)

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

    $Label1 = GUICtrlCreateLabel("Film", 8, 32, 22, 17)
    $Label2 = GUICtrlCreateLabel("Staffel", 8, 64, 34, 20)
    $Label3 = GUICtrlCreateLabel("Genre", 8, 96, 33, 20)
    $Label4 = GUICtrlCreateLabel("Darsteller", 8, 128, 48, 20)
    $Label5 = GUICtrlCreateLabel("Beschreibung", 8, 160, 69, 20)

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

    Global $aInput[5]
    $aInput[0] = GUICtrlCreateInput("", 96, 24, 449, 21)
    $aInput[1] = GUICtrlCreateInput("", 96, 56, 449, 21)
    $aInput[2] = GUICtrlCreateInput("", 96, 88, 449, 21)
    $aInput[3] = GUICtrlCreateInput("", 96, 120, 449, 21)
    $aInput[4] = GUICtrlCreateEdit("", 96, 160, 449, 321)

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

    $Button1 = GUICtrlCreateButton("Speichern", 136, 504, 113, 20)
    $Button2 = GUICtrlCreateButton("Beenden", 8, 504, 113, 20)

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

    ;Form3
    $Form3 = GUICreate("Suche", 479, 185, 193, 125)

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

    $Label1 = GUICtrlCreateLabel("Suche", 8, 56, 35, 20)

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

    GUICtrlCreateInput("", 72, 56, 305, 21)

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

    GUISetState(@SW_SHOW, $Form1)

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

    While 1
    $Msg = GUIGetMsg(1)
    Switch $Msg[0]
    Case $GUI_EVENT_CLOSE ; Fenster schließen
    Switch $Msg[1]
    Case $Form1
    Exit
    Case $Form2
    GUISetState(@SW_HIDE, $Form2)
    Case $Form3
    GUISetState(@SW_HIDE, $Form3)
    EndSwitch
    Case $MenuItem3 ; Menü Neuer Eintrag
    GUISetState(@SW_SHOW, $Form2)
    Case $MenuItem4 ; Menü Suche
    GUISetState(@SW_SHOW, $Form3)
    Case $Button3
    $aItems = _GUICtrlListView_GetSelectedIndices(GUICtrlGetHandle($ListView1), True)
    For $i = 1 To $aItems[0]
    _ArrayDelete($aDVD, $aItems[$i])
    Next
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView1)) ;Listview löschen
    _GUICtrlListView_SetItemCount($ListView1, $iDVDCounter + 1) ;Platz reservieren im Listview
    _GUICtrlListView_AddArray($ListView1, $aDVD) ;das Array im Listview anzeigen
    $iDVDCounter -= $aItems[0]
    Case $MenuItem2
    Exit
    Case $Button2 ; Fenster "Neuer Eintrag" schließen
    GUISetState(@SW_HIDE, $Form2)
    Case $Button1 ; Speichern
    For $i = 0 To 4 ; Neue Einträge auslesen und ins Array übernehmen
    $aDVD[$iDVDCounter][$i] = GUICtrlRead($aInput[$i])
    GUICtrlSetData($aInput[$i], '')
    Next
    _SaveDVDs() ;Datenbank speichern
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView1)) ;Listview löschen
    _GUICtrlListView_SetItemCount($ListView1, $iDVDCounter + 1) ;Platz reservieren im Listview
    _GUICtrlListView_AddArray($ListView1, $aDVD) ;das Array im Listview anzeigen
    $iDVDCounter += 1 ;Zähler um 1 erhöhen
    ReDim $aDVD[$iDVDCounter + 1][5]
    EndSwitch
    $iLVState = GUICtrlGetState($ListView1) ; Abfrage welche Spalte den Focus besitzt
    If $iLVState <> $iOldLVState Then ; Wenn der Anwender auf einen anderen Spaltenkopf geklickt hat
    $iOldLVState = $iLVState
    _ArraySort($aDVD, 0, 0, $iDVDCounter-1, $iLVState) ; Array entsprechend sortieren
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView1)) ;Listview löschen
    _GUICtrlListView_SetItemCount($ListView1, $iDVDCounter + 1) ;Platz reservieren im Listview
    _GUICtrlListView_AddArray($ListView1, $aDVD) ;das Array im Listview anzeigen
    EndIf
    WEnd

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

    Func _SaveDVDs()
    Local $sTemp
    Local $hFile = FileOpen($sFilename, 2+8)
    If $hFile <> -1 Then
    FileWriteLine($hFile, $iDVDCounter)
    For $i = 0 To $iDVDCounter
    $sTemp = ''
    For $j = 0 To 4
    $sTemp &= $aDVD[$i][$j] & '|'
    Next
    FileWriteLine($hFile, StringTrimRight($sTemp, 1))
    Next
    FileClose($hFile)
    EndIf
    EndFunc

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

    Func _LoadDVDs()
    Local $aTemp
    Local $hFile = FileOpen($sFilename, 0)
    If $hFile <> -1 Then
    $iDVDCounter = FileReadLine($hFile)
    ReDim $aDVD[$iDVDCounter + 1][5]
    For $i = 0 To $iDVDCounter
    $aTemp = StringSplit(FileReadLine($hFile), '|')
    For $j = 0 To 4
    $aDVD[$i][$j] = $aTemp[$j + 1]
    Next
    Next
    FileClose($hFile)
    $iDVDCounter += 1
    ReDim $aDVD[$iDVDCounter + 1][5]
    EndIf
    EndFunc

    [/autoit]

    Jetzt werden die Einträge, bei einem Klick auf den Spaltenkopf, entsprechend sortiert.

  • danke dir, mit dem oldlv und lv wär ich nie drauf gekommen....danke nochmal.....

    aber die suche...die will ich alleine rausbekommen.....obs mir gelingt? ka

  • hiho,
    hab gerade etwas zeit gefunden für die suche.
    hab jetzt mal eben

    Spoiler anzeigen
    [autoit]

    ;Suche
    If GUICtrlRead($Suche_Input) Then
    _ArraySearch($aDVD, $aInput)
    _GUICtrlListView_AddArray($ListView2, $aDVD)
    EndIf

    [/autoit]


    geschrieben.
    jetzt trägt er natürlich alles ein was er findet. wie bekomm ich es hin, das er nach dem abc findet?
    und dann auch anzeigt, ob es filme, staffeln ect sind, also in der jeweiligen spalte....
    ich denke ihr wißt was ich meine

    und wenn ich das og eingebe, dann schließt er nicht mehr richtig das programm


    was ich noch eingefügt habe:
    bei eintrag löschen schließt das fenster nach jedem löschvorgang, vorher mußte man auf abbrechen drücken.

    was noch hinzukommt:
    eintrag bearbeiten, das fenster hab ich von eintrag erstellen übernommen, weiteres flogt noch

    Einmal editiert, zuletzt von Emma-En (14. November 2008 um 20:23)