Abspeichern eines Arrays (Datenbank)

  • Hey,

    ich habe ein 2D-Array(mit maybe 1000 Einträgen), dass ich ab und an mal abspeichern will (Generieren dauert 1 Minute) und das auch wieder füllen will, wenn das Programm startet.
    Welche Möglichkeit ist am Besten Eurer Meinung nach? Für sowas sind Inis nicht optimal, oder?!
    SQLite würde ich mir auch angucken, aber auf autoitscript wird der Post nicht mehr gepflegt und bin mir nicht sicher, ob ich für 64 und 32 bit dann die gleiche .DLL nehmen könnte.

    Also: Was ist Eurer Meinung nach die "professionellste" Lösung dafür :D?

    LG,
    Aca

    Einmal editiert, zuletzt von Acanis (14. August 2012 um 18:20)

  • Ich nutze für sowas CSV Dateien. Das einlesen dauert selbst bei 1000 und mehr Datensätzen nur wenige ms. Eine Datenbank mag vllt etwas performanter sein, aber bei 1000 Datensätzen lohnt sich das eigentlich noch nicht.

  • CSV war ein gutes Stichwort, habe was von SeuBo gefunden, danke! ;D

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    FileDelete(@TempDir & "\example.csv")
    FileWrite(@TempDir & "\example.csv", "a1;b1;c1;d1;e1" & @CRLF & "a2;b2;c2;d2" & @CRLF & "a3;b3;c3;d3;e3;f3" & @CRLF & "a4;b4;c4;d4;e4")
    MsgBox(0, "", "Alte Datei")
    ShellExecuteWait("notepad", @TempDir & "\example.csv")

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

    $sCSV = FileRead(@TempDir & "\example.csv")
    ConsoleWrite($sCSV & @CRLF)

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

    ; CSV to Array
    Local $iCol, $iIndex, $sRead, $aRow, $aCSV, $iUB2 = 10
    $aCSV = StringSplit($sCSV, @CRLF, 1)
    Local $aCSV_2D[$aCSV[0]][10], $iUB = $aCSV[0]

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

    For $i = 1 To $aCSV[0]
    $aRow = StringSplit($aCSV[$i], ";", 3)

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

    For $j = 0 To UBound($aRow) - 1
    If $j > $iUB2 - 1 Then
    ReDim $aCSV_2D[$iUB][$iUB2 + 10]
    $iUB2 += 10
    EndIf
    $aCSV_2D[$i - 1][$j] = $aRow[$j]
    Next
    If $j > $iCol Then $iCol = $j
    Next
    ReDim $aCSV_2D[$iUB][$iCol]

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

    _ArrayDisplay($aCSV_2D) ; Show 2D Array
    $aCSV_2D[1][2] = "Neuer Wert!" ; CHange array Value
    _ArrayDisplay($aCSV_2D) ; Show 2D Array

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

    ; Array to CSV
    Local $sRet, $iUB = UBound($aCSV_2D, 1), $iUB2 = UBound($aCSV_2D, 2)
    For $i = 0 To $iUB - 1
    For $j = 0 To $iUB2 - 1
    If $aCSV_2D[$i][$j] <> "" Then $sRet &= $aCSV_2D[$i][$j] & "||"
    Next
    $sRet &= "|"
    Next
    $sRet = StringReplace(StringReplace($sRet, "|||", @CRLF), "||", ";")

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

    ; Create New CSV
    FileDelete(@TempDir & "\example.csv")
    FileWrite(@TempDir & "\example.csv",$sRet )
    MsgBox(0, "", "Neue Datei")
    ShellExecuteWait("notepad", @TempDir & "\example.csv")

    [/autoit]

    Schau ich mir das mal an :)!

    Oscar : Hatte ich auch erst gedacht, aber arbeite iwie ungern mit FileRead und sowas... Schreibe nur grade eine Programm für jemanden, der damit "sauberes" AutoIt erlernen will und wollte gern noch Alternativen haben und hören, wie ihr "Profi-Progger" das lösen würdet :D. CSV ist ja im Grunde auch nichts anderes, als dein Vorschlag, ne? :)

    Liebe Grüße,
    Aca

    Wie immer danke für die schnelle und gute Hilfe :D!!! :love: