User Tools

Site Tools


vba:classes:liststream

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
vba:classes:liststream [18.01.2023 12:31:26]
yaslaw [Initialisierungs-Methoden]
vba:classes:liststream [02.08.2023 11:40:26] (current)
yaslaw [Funktions-Aliase]
Line 86: Line 86:
     [1] => <​Date>​ 22.03.2020     [1] => <​Date>​ 22.03.2020
     [2] => <​Date>​ 23.03.2020     [2] => <​Date>​ 23.03.2020
 +)</​code>​
 +
 +Achtung! ListStream kann auch statisch verwendet werden. Muss dann aber über initialize() gefüttert werden
 +<code vb>​ListStream.initialize("​[a,​b,​c]"​)
 +d ListStream.list
 +<​Dictionary> ​ (
 +    [0] => <​String>​ '​a'​
 +    [1] => <​String>​ '​b'​
 +    [2] => <​String>​ '​c'​
 +)</​code><​code vb>​Public Sub test1()
 +    ListStream.initialize ("​[a,​b,​c]"​)
 +End Sub
 +
 +Public Sub test2()
 +    d ListStream.list
 +End Sub
 +'​Direktfenster:​
 +test1
 +test2
 +<​Dictionary> ​ (
 +    [0] => <​String>​ '​a'​
 +    [1] => <​String>​ '​b'​
 +    [2] => <​String>​ '​c'​
 )</​code>​ )</​code>​
  
Line 117: Line 140:
 Für einige Methoden gibt es noch Aliase. Für einige Methoden gibt es noch Aliase.
   * **k**{Methode}:​ Dieselbe Methode, aber auf den Key angewendet. zB. ''​obj.diff(..,​ ctKey) -> obj.kDiff(..)''​   * **k**{Methode}:​ Dieselbe Methode, aber auf den Key angewendet. zB. ''​obj.diff(..,​ ctKey) -> obj.kDiff(..)''​
 +  * **i**{Methode}:​ Dieselbe Methode, aber auf den Index angewendet. zB. ''​obj.remove(1,​ ctKey) -> obj.iRemove(1)''​
   * **v**{Methode}:​ Dieselbe Methode, aber auf den Value angewendet. zB. ''​obj.diff(..,​ ctValue) -> obj.vDiff(..)''​   * **v**{Methode}:​ Dieselbe Methode, aber auf den Value angewendet. zB. ''​obj.diff(..,​ ctValue) -> obj.vDiff(..)''​
   * **t**{Methode}: ​    ​Wendet die Methode auf die Keys und die Values gleichzeitig an.   * **t**{Methode}: ​    ​Wendet die Methode auf die Keys und die Values gleichzeitig an.
Line 124: Line 148:
   * {Methode}**K**:​ Dieselbe Methode, gibt aber kein ListSream zurück sondern den Key. zB: ''​Key = obj.popK()''​   * {Methode}**K**:​ Dieselbe Methode, gibt aber kein ListSream zurück sondern den Key. zB: ''​Key = obj.popK()''​
   * {Methode}**LS**:​ Bei Methoden die normalerweise einen Wert zurückgeben,​ gibt es hier den LS zurück   * {Methode}**LS**:​ Bei Methoden die normalerweise einen Wert zurückgeben,​ gibt es hier den LS zurück
 +  * {Methode}**N**:​ Dieselbe Methode, gibt aber kein ListSream zurück sondern den Node. zB: ''​node = obj.popN()''​
 +  * {Methode}**E**:​ Dieselbe Methode, gibt aber kein ListSream zurück sondern die ListStreamEntity.
 +Es gibt auch kombinationan davon. zB. **k**Remove**V**()
 +  ​
 +
 +==== Node ====
 +Als Node wird ein einzelner Eintrag bezeichnet inkl. des Keys und der Position in der Liste. Damit es keine weitere Klasse braucht, ist das in dem Fall ein Array(1 to 3).
 +
 +Die einzelnen Elemente könne über den Array-Index abgerufen werden. Die Array-Indexe der einzelnene Teile sind im Enum enuWorkWith hinterlegt. Das ergibt eine Array(key, value, index)
 +<code vb>d listStream("​{a:​1,​b:​2,​c:​3}"​).getNode(1)
 +<​Variant()> ​ (
 +    [#1] => <​String>​ '​b'​
 +    [#2] => <​Long>​ 2
 +    [#3] => <​Integer>​ 1
 +)
 +
 +d listStream("​{a:​1,​b:​2,​c:​3}"​).getNode(1)(wwKey)
 +<​String>​ '​b'​
 +
 +set ls = listStream("​{a:​1,​b:​2,​c:​3}"​)
 +ls.toNext
 +d ls.getNode
 +<​Variant()> ​ (
 +    [#1] => <​String>​ '​b'​
 +    [#2] => <​Long>​ 2
 +    [#3] => <​Long>​ 1
 +)
 +</​code>​
 ==== Zugriff auf das Listenobjekt ==== ==== Zugriff auf das Listenobjekt ====
 Auf die aktuelle Liste, ein Dictionary, kann jederzeit von aussen mit der Eigenschaft list zugegriffen werden Auf die aktuelle Liste, ein Dictionary, kann jederzeit von aussen mit der Eigenschaft list zugegriffen werden
Line 187: Line 239:
  
 ==== ByReference ==== ==== ByReference ====
-Normalerweise ist ListStream ​nicht byReference. Das heisst, das jeder weitere Schritt ​eine Kopie anlegt und das Original ​unberührt lässt. Das ist der Standard.+Normalerweise ist ListStream byReference. Das heisst, das jeder weitere Schritt das Original ​mitverändert.
 \\ Man kann es auf 2 Arten überschreiben. \\ Man kann es auf 2 Arten überschreiben.
   - Beim Erstellen den Paramteter auf True setzen: ''​Set ls_1 = ListStream(Array(1,​ 2, 3, 4), , True)''​   - Beim Erstellen den Paramteter auf True setzen: ''​Set ls_1 = ListStream(Array(1,​ 2, 3, 4), , True)''​
Line 193: Line 245:
  
 Hier ein Test um das Verhalten zu zeigen. Man sieht gut, wi das Original mit angepasst wurde, da ls_2.list nur eine Referenz auf ls_1.list hat. Hier ein Test um das Verhalten zu zeigen. Man sieht gut, wi das Original mit angepasst wurde, da ls_2.list nur eine Referenz auf ls_1.list hat.
-<code vb> ​   Dim ls_1 As ListStream+<code vb>Public Sub test() 
 +    Dim ls_1 As ListStream
     Dim ls_2 As ListStream     Dim ls_2 As ListStream
     ​     ​
-    Set ls_1 = ListStream(Array(1,​ 2, 3, 4))+    Set ls_1 = ListStream(Array(1,​ 2, 3, 4), , False  'Hier wird mit False byRef ausgeschaltet
     Set ls_2 = ls_1.filterByEval("#​{item} mod 2 = 0")     Set ls_2 = ls_1.filterByEval("#​{item} mod 2 = 0")
     ​     ​
Line 209: Line 262:
     Debug.Print "==Mit Referenz =="     Debug.Print "==Mit Referenz =="
     Debug.Print "​Orignal:​ ", ls_1.toJSON(ltArray)     Debug.Print "​Orignal:​ ", ls_1.toJSON(ltArray)
-    Debug.Print "​Ableitung",​ ls_2.toJSON(ltArray)</​code>​+    Debug.Print "​Ableitung",​ ls_2.toJSON(ltArray) 
 +     
 +    '​Methode innerhalb der Verarbeitung die Reference mittels clone() zu unterbreuchen 
 +    Set ls_1 = ListStream(Array(1,​ 2, 3, 4)) 
 +    Set ls_2 = ls_1.mapEval("#​{value}+2"​).clone.filterByEval("#​{item} mod 2 = 0") 
 +    Debug.Print "==Mit Referenz, nach dem ersten Arbeitsschritt unterbrochen ==" 
 +    Debug.Print "​Orignal:​ ", ls_1.toJSON(ltArray) 
 +    Debug.Print "​Ableitung",​ ls_2.toJSON(ltArray) 
 +End Sub</​code>​
 <​code>​==Ohne Referenz == <​code>​==Ohne Referenz ==
 Orignal: ​     [1,2,3,4] Orignal: ​     [1,2,3,4]
Line 215: Line 276:
 ==Mit Referenz == ==Mit Referenz ==
 Orignal: ​     [2,4] Orignal: ​     [2,4]
-Ableitung ​    ​[2,​4]</​code>​+Ableitung ​    [2,4] 
 +==Mit Referenz, nach dem ersten Arbeitsschritt unterbrochen == 
 +Orignal: ​     [3,4,5,6] 
 +Ableitung ​    ​[4,​6] 
 +</​code>​
 ==== Übersicht über die Methoden ==== ==== Übersicht über die Methoden ====
 ^ Methode ^ Beschreibung ^ Rückgabewert ^ Einchränkung ^ ^ Methode ^ Beschreibung ^ Rückgabewert ^ Einchränkung ^
Line 227: Line 292:
 | [[#range]] | Erstellt eine Instanz aus einem Bereich | ListStream | | | [[#range]] | Erstellt eine Instanz aus einem Bereich | ListStream | |
 | [[#fill]] | Eine Instanz. Definiert über Start, Länge und Fix-Wert | ListStream | | | [[#fill]] | Eine Instanz. Definiert über Start, Länge und Fix-Wert | ListStream | |
 +| [[#​fillkey]] | Erstellt eine Liste aus einer Auflistung von Keys und einem Standardwert | ListStream | |
 | [[#clone]] | Ein Klon der bestehenden Liste | ListStream | | | [[#clone]] | Ein Klon der bestehenden Liste | ListStream | |
 | [[#​combine]] | Kombiniert 2 LIsten. Die erste als Keys, die Zweite als Werte | ListStream | | | [[#​combine]] | Kombiniert 2 LIsten. Die erste als Keys, die Zweite als Werte | ListStream | |
Line 697: Line 763:
 === remove() === === remove() ===
 Entfernt ein Item anhand des Indexes aus der Liste  Entfernt ein Item anhand des Indexes aus der Liste 
-<​code>​ListStream = obj.add([key], [keyTypeFlag],​ [wert])</​code>​+<​code>​ListStream = obj.remove([key], [keyTypeFlag],​ [outVlaue], [outKey]) 
 +ListStream = obj.kRemove(key,​ [outVlaue]) 
 +ListStream = obj.iRemove(index,​ [outVlaue], [outKey]) 
 +value = obj.kRemoveV(key,​ [outKey]) 
 +key = obj.kRemoveK(key,​ [outValue]) 
 +value = obj.iRemoveV(index,​ [outKey]) 
 +key = obj.iRemoveK(index,​ [outValue])</​code>​
  
 ^ Parameter ^ Typ ^ Beschreibung ^ ^ Parameter ^ Typ ^ Beschreibung ^
 | key | Variant | Index oder Key des Datensatzen | | key | Variant | Index oder Key des Datensatzen |
 | keyTypeFlag | enuIndexOrKey | Flag der aussagt, ob der Paramter key ein Key oder ein Index ist | | keyTypeFlag | enuIndexOrKey | Flag der aussagt, ob der Paramter key ein Key oder ein Index ist |
-wert | Variant | Wert der entfernt wird - schau myVar im Beispiel |+outVlaue ​| Variant | Wert der entfernt wird - schau myVar im Beispiel ​
 +| outKey | Variant | Key/Index der entfernt wird |
 | return | ListStream | Rückgabewert | | return | ListStream | Rückgabewert |
  
Line 708: Line 781:
 {0 => a, 2 => c} {0 => a, 2 => c}
 ? myVar ? myVar
-b</​code>​+b 
 +'​kRemove() 
 +d ListStream("​{a:​1,​b:​2,​c:​3}"​).kRemove("​b",​ v).list 
 +<​Dictionary> ​ ( 
 +    [a] => <​Long>​ 1 
 +    [c] => <​Long>​ 3 
 +
 +d v 
 +<​Long>​ 2 
 + 
 +'​iRemoveK 
 +Set ls = ListStream("​{a:​1,​b:​2,​c:​3}"​) 
 +d ls.iRemoveV(1,​ k) 
 +<​Long>​ 2 
 +d k 
 +<​String>​ '​b'​ 
 +d ls.list 
 +<​Dictionary> ​ ( 
 +    [a] => <​Long>​ 1 
 +    [c] => <​Long>​ 3 
 +
 +</​code>​
 ---- ----
 === shift() === === shift() ===
 Shift ist vor allem in Stacks sehr nützlich. Obersten Eintrag herausnehmen. Wenn keine Keys vorhanden sind, wird der Index nachgeführt. Shift ist vor allem in Stacks sehr nützlich. Obersten Eintrag herausnehmen. Wenn keine Keys vorhanden sind, wird der Index nachgeführt.
-<​code>​ListStream = obj.shift([wert])</​code>​+<​code>​ListStream = obj.shift([outValue], [outKey]) 
 +Variant = obj.shiftV([outKey]) 
 +Variant = obj.shiftK([outValue])</​code>​
  
 ^ Parameter ^ Typ ^ Beschreibung ^ ^ Parameter ^ Typ ^ Beschreibung ^
-wert | Variant | Wert der entfernt wird - schau myVar im Beispiel |+outValue ​| Variant | Wert der entfernt wird - schau myVar im Beispiel ​
 +| outKey | Variant | Key der entfernt wird |
 | return | ListStream | Rückgabewert | | return | ListStream | Rückgabewert |
  
-<code vb>arr = array("a","b","c"+<code vb>d ListStream("{a:1,b:2,c:3}"​).shift().list
-'​Erster Eintrag rausnehmen und in myVar speichern +
-d ListStream(arr).shift(myVar).list+
 <​Dictionary> ​ ( <​Dictionary> ​ (
-    [0] => <String'​b'​ +    [b] => <Long2 
-    [1] => <String'​c'​+    [c] => <Long3
 ) )
-myVar.list+ListStream("​{a:​1,​b:​2,​c:​3}"​).shiftV() 
 +<​Long>​ 1 
 +d ListStream("​{a:​1,​b:​2,​c:​3}"​).shiftK()
 <​String>​ '​a'​ <​String>​ '​a'​
  
-'Hat die Liste einen key, dann wird er beibehalten +'Den Wert und Key auslesen 
-d ListStream("​{A:a,B:b,C:​c}"​).shift(myVar).list+d ListStream("​{a:​1,b:2,c:3}"​).shift(v, k).list
 <​Dictionary> ​ ( <​Dictionary> ​ (
-    [B] => <String'​b'​ +    [b] => <Long2 
-    [C] => <String'​c'​+    [c] => <Long3
 ) )
-myVar.list+
 +<​Long>​ 1 
 +d k
 <​String>​ '​a'</​code>​ <​String>​ '​a'</​code>​
 ---- ----
 === pop() === === pop() ===
 Wie [[#shift]], aber mit dem letzten Eintrag Wie [[#shift]], aber mit dem letzten Eintrag
-<​code>​ListStream = obj.pop([wert])</​code>​+<​code>​ListStream = obj.pop([outValue], [outKey]) 
 +Variant = obj.popV([[outKey]) 
 +Variant = obj.popK([[outValue])</​code>​
  
 ^ Parameter ^ Typ ^ Beschreibung ^ ^ Parameter ^ Typ ^ Beschreibung ^
-wert | Variant | Wert der entfernt wird - schau myVar im Beispiel |+outValue ​| Variant | Wert der entfernt wird - schau myVar im Beispiel ​
 +| outKey | Variant | Key der entfernt wird |
 | return | ListStream | Rückgabewert | | return | ListStream | Rückgabewert |
  
Line 2307: Line 2409:
     Debug.Print ls.value ​       'a     Debug.Print ls.value ​       'a
     Debug.Print ls.value(1) ​    '​b</​code>​     Debug.Print ls.value(1) ​    '​b</​code>​
 +
 +=== node ===
 +node an der Position [[#pos]]
 +<​code>​node = ls.node([pos])</​code>​
 +
 +^ Parameter ^ Typ ^ Standard ^ Beschreibung ^
 +| pos | Long | Aktuelle Position | |
 +| return | Node | | |
 +
 +<code vb>Set ls = ListStream("​{AA:​a,​BB:​b,​CC:​c}"​)
 +ls.toFirst
 +d ls.node()
 +<​Variant()> ​ (
 +    [#1] => <​String>​ '​AA'​
 +    [#2] => <​String>​ '​a'​
 +    [#3] => <​Long>​ 0
 +)</​code>​
 +
 === setPos() === === setPos() ===
 setPos() ist im Gegensatz zu [[#pos]] kein Property sondern eine Funktion. Diese führt set pos aus und gibt den neuen ListSTream zurück setPos() ist im Gegensatz zu [[#pos]] kein Property sondern eine Funktion. Diese führt set pos aus und gibt den neuen ListSTream zurück
Line 2321: Line 2441:
     Debug.Print "​newLs",​ ls2.pos ​   ' 1</​code>​     Debug.Print "​newLs",​ ls2.pos ​   ' 1</​code>​
 ==== Statische Hilfsmethoden ==== ==== Statische Hilfsmethoden ====
-Das sind zusätzliche Funktionen, die nicht direkt auf die Liste bezogen sind.+Das sind zusätzliche Funktionen, die nicht direkt auf die Liste bezogen sind. Sie werden intern genutzt, können aber auch anderwertig praktisch sein 
 + 
 +=== isList() === 
 +Eine Prüfung ob ListStream die Variable als Liste und somit als Quelle akzeptiert. 
 +^ Parameter ^ Typ ^ Standard ^ Beschreibung ^ 
 +| list | Variant | | Variable die geprüft werden soll | 
 +| return | Boolean | | Formatierter Wert oder eine Liste mit den Formatierten Werten | 
 + 
 +<code vb>?​ListStream.isList(array(1,​2,​3)) 
 +True 
 + 
 +'Json wird als Liste erkannt 
 +?​ListStream.isList("​[1,​2,​3]"​) 
 +True 
 + 
 +?​ListStream.isList(null) 
 +False 
 + 
 +?​ListStream.isList("​123"​) 
 +False</​code>​
  
 === var2CodeStr() === === var2CodeStr() ===
-Gibt den Value in VBA-Code Form zurück. Kann für Evals etc. benutzt werden+Gibt den Value in VBA-Code Form zurück. Kann für Evals etc. benutzt werden
 +Akzeptiert auch alle Listen wie sie mit der Methode isList() als True zurückgegeben wird
 ^ Parameter ^ Typ ^ Standard ^ Beschreibung ^ ^ Parameter ^ Typ ^ Standard ^ Beschreibung ^
 | item | Variant | | Wert oder Array von Werten der zu Code-String umgewandelt werden soll | | item | Variant | | Wert oder Array von Werten der zu Code-String umgewandelt werden soll |
Line 2344: Line 2484:
  
 ? ListSTream.var2CodeStr(null,​vbString,​sqlNullToEmpty,​ "​N/​A"​) ? ListSTream.var2CodeStr(null,​vbString,​sqlNullToEmpty,​ "​N/​A"​)
-'​N/​A'​</​code> ​   ​+'​N/​A'​
  
 +Set dict = ListStream("​[1,​b]"​).add(DateTime.timeDT).add(null).list
 +? ListStream.var2CodeStr(dict,​ vbString)
 +'​1',​ '​b',​ '​01.02.2023 11:​54:​55',​ NULL
 +</​code> ​   ​
 +
 +=== castValue() ===
 +<code vb>d ListStream.castValue(date,​ vbString)
 +<​String>​ '​01.02.2023'</​code>​
 +
 +=== emptyArray() ===
 +<code vbd>d ListStream.createEmptyArray(vbDate)
 +<​Date()> ​ ()
 +
 +d ListStream.createEmptyArray(vbString,​ 2, 5)
 +<​String()> ​ (
 +    [#5] => <​String>​ ''​
 +    [#6] => <​String>​ ''​
 +)
 +</​code>​
  
 ---- ----
  
vba/classes/liststream.1674041486.txt.gz · Last modified: 18.01.2023 12:31:26 by yaslaw