﻿;-- TIME_STAMP   2022-12-12 19:11:36

#include 'MapDataBase.au3'
#include <Array.au3>

_SimpleDB()

; verwendet diese CSV:
; https://freetestdata.com/wp-content/uploads/2021/09/Free_Test_Data_500KB_CSV-1.csv     <-- nicht normgerecht, verwendet "," | ab Zeile #10672 nur noch ",,,," - Löschen.
_CSV_Map()


Func _SimpleDB()
    Local $aFields[] = ['Name','VName','PLZ','Ort','Strasse','Nr']
    Local $MyMapDB = _MapDB_New($aFields)
    ; alternativ
    ; Local $MyMapDB = _MapDB_New('Name;VName;PLZ;Ort;Strasse;Nr')

    Local $ID
    ; DS erfassen - automatische ID Generierung
    ; Übergabe als Einzelparameter (max. 10)
    $ID = _MapDB_Add($MyMapDB, '', 'Müller', 'Hans', '12345', 'Irgendwo-Bei-Berlin', 'Hauptsr.', 15)
    ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $ID --> " & $ID & @LF)

    ; Übergabe als Array (kein Limit)
    Local $aVal[] = ['Lehmann','Hanna','06789','Halle','Hochstr.',123]
    $ID = _MapDB_Add($MyMapDB, '', $aVal)
    ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $ID --> " & $ID & @LF)

    ; Übergabe als Map
    Local $mVal[], $sVal = 'Chan,Jackie,CHN 022 300000,Tianjin,Gu Wenhua Ji,45', $aVal = StringSplit($sVal, ',',2)
    For $i = 0 To UBound($aFields) -1
        $mVal[$aFields[$i]] = $aVal[$i]
    Next
    $ID = _MapDB_Add($MyMapDB, '', $mVal)
    ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $ID --> " & $ID & @LF)

    ; Erfassung mit Übergabe ID
    $ID = _MapDB_Add($MyMapDB, 25, 'Köhler', 'Jenny', '88221', 'XMashausen', 'Fichtenweg', 23)
    ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $ID --> " & $ID & @LF)

    _ArrayDisplay(_MapDB_ToArray($MyMapDB), 'Alle Datensätze')

    ; DS modifizieren
    ; Übergabe als Einzelparameter (max. 10), Felder, die nicht verändert werden sollen, werden als Leerstring übergeben
    _ArrayDisplay(_MapDB_DSToArray($MyMapDB, 0), 'Vor Änderung')
    _MapDB_Modify($MyMapDB, 0, '', '', '12346', 'Irgendwoanders-Bei-Berlin', 'Neue Str.', 88)
    _ArrayDisplay(_MapDB_DSToArray($MyMapDB, 0), 'Nach Änderung')

    ; Übergabe als Array
    Local $aVal[] = ['Lehmann-Rosenringk','','','','','']
    _ArrayDisplay(_MapDB_DSToArray($MyMapDB, 1), 'Vor Änderung')
    _MapDB_Modify($MyMapDB, 1, $aVal)
    _ArrayDisplay(_MapDB_DSToArray($MyMapDB, 1), 'Nach Änderung')

    ; Übergabe als Map
    Local $mVal[], $sVal = ',,,,,333', $aVal = StringSplit($sVal, ',',2)
    For $i = 0 To UBound($aFields) -1
        $mVal[$aFields[$i]] = $aVal[$i]
    Next
    _ArrayDisplay(_MapDB_DSToArray($MyMapDB, 2), 'Vor Änderung')
    _MapDB_Modify($MyMapDB, 2, $mVal)
    _ArrayDisplay(_MapDB_DSToArray($MyMapDB, 2), 'Nach Änderung')

    ; Übergabe Zuweisungsstring (sicherlich häufigste Verwendung)
    _ArrayDisplay(_MapDB_DSToArray($MyMapDB, 25), 'Vor Änderung')
    _MapDB_Modify($MyMapDB, 25, 'Strasse=Waldweg|Nr=75 B')
    _ArrayDisplay(_MapDB_DSToArray($MyMapDB, 25), 'Nach Änderung')

    MsgBox(0, 'Anzahl DS', $MyMapDB.Count)

    ; als CSV speichern
    _MapDB_ToCSV($MyMapDB, @ScriptDir & '\test_db.csv')

    ; Ausgabe CSV in Console
    ConsoleWrite(FileRead(@ScriptDir & '\test_db.csv') & @CRLF)
EndFunc


Func _CSV_Map()
    Local $CSV = @ScriptDir & "\Free_Test_Data_500KB_CSV-1.csv"
    Local $Timer = TimerInit()

    Local $MyMapDB = _MapDB_FromCSV($CSV, ',')
    MsgBox(0, 'Import CSV', 'Einlesedauer: ' & (TimerDiff($Timer) / 1000) & ' s' & @CRLF & 'Anzahl Datensätze: ' & $MyMapDB.Count)

    _ArrayDisplay(_MapDB_ToArray($MyMapDB), 'Alle Datensätze')

    Local $mMatch = _MapDB_SearchAnd($MyMapDB, "NAME=Tommye|GENDER=Female|AGE=56|DATE=16/08/2025")
    MsgBox(0, 'Matches', 'Die Suche ergab' & @CRLF & __MapCountKeys($mMatch) & ' Treffer.')
    _ArrayDisplay(_MapDB_ToArray($mMatch), 'Datensätze der Suche')

    _ArrayDisplay(_MapDB_DSToArray($MyMapDB, 2785), 'Einzelner DS als Array')

    MsgBox(0, 'Einzelner Datensatz als String', _MapDB_DSToString($MyMapDB, 2790))
EndFunc