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:39:51]
yaslaw [ByReference]
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 711: 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 722: 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 2321: 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 2335: 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 2358: 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.1674041991.txt.gz · Last modified: 18.01.2023 12:39:51 by yaslaw