VBA Ariawase memo

### Summary
01. Ariawase is cool VBA library ( by @igeta )
02. Example of core functions


### Ariawase.Core

```
Core
├── Collections
│   ├── ArrConcat
│   ├── ArrFlatten
│   ├── ArrIndexOf
│   ├── ArrLen
│   ├── ArrRank
│   ├── ArrSlice
│   ├── ArrUniq
│   ├── Pop
│   ├── Unshift
│   ├── Arr2DToJagArr
│   ├── JagArrToArr2D
│   ├── ArrToClct
│   ├── ClctToArr
│   ├── CreateDictionary
│   ├── ArrCompare
│   ├── ArrEquals
│   └── BitFlag
│
├── Strings
│   ├── LeftA
│   ├── RightA
│   ├── SepA
│   ├── StringWidth
│   ├── ToStr
│   ├── CreateRegExp
│   ├── ReMatch
│   ├── ReMatchGlobal
│   ├── ReReplace
│   └── ReTrim
│
├── Numeric
│   ├── Around
│   ├── IncrPre
│   ├── IncrPst
│   ├── IsInt
│   ├── Max
│   └── Min
│
├── Date
│   ├── BeginOfMonth
│   ├── EndOfMonth
│   ├── BeginOfWeek
│   └── EndOfWeek
│
├── Display
│   ├── Formats
│   └── Dump
│
├── Equality
│   ├── Eq
│   ├── Equals
│   └── Compare
│
├── Eval
│   ├── EvalJS
│   └── EvalVBS
│
└── Others
    ├── CreateStdRegProv
    └── Init
```

###Collections

```vb
Sub test()
    
    '２つの配列を一つの配列にします
    Debug.Print Dump(ArrConcat(Array(1, 2, 3), Array(10, 20, 30)))
    'Array(1%, 2%, 3%, 10%, 20%, 30%)
    
    'ネストを一段解除した配列にします
    Debug.Print Dump(ArrFlatten(Array(Array(1, 2, 3))))
    'Array(1%, 2%, 3%)
    
    '該当する文字（数字）の配列の場所を返します（なければ -１）
    Debug.Print Dump(ArrIndexOf(Array("A", "B", "C"), "B"))
    '1&
    
    '配列の長さを返します
    Debug.Print Dump(ArrLen(Array(1, 2, 3)))
    '3&
    
    '配列の次元を返します
    Debug.Print Dump(ArrRank(Array(1, 2, 3)))
    '1%
    
    '配列をスライスします
    Debug.Print Dump(ArrSlice(Array(1, 2, 3, 4, 5), 1, 3))
    'Array(2%, 3%, 4%)
    
    '配列の重複してる要素をまとめます
    Debug.Print Dump(ArrUniq(Array(1, 1, 1, 2, 2, 2)))
    'Array(1%, 2%)
    
    'コレクションの最後の要素をとりだします
    Debug.Print Dump(Pop(ArrToClct(Array(1, 2, 3))))
    '3%
    
    'コレクションの最初の要素を取り出します
    Debug.Print Dump(Unshift(ArrToClct(Array(1, 2, 3))))
    '1%

    'ジャグ配列をつくります
    Dim jagArray: jagArray = Array(Array("A"), Array("B"))
    'jagArray(0)(0) = "A"
    'jagArray(1)(0) = "B"
    
    'ジャグ配列から２次元配列をつくります
    Dim arr2D: arr2D = JagArrToArr2D(jagArray)
    'arr2D(0,0) = "A"
    'arr2D(1,0) = "B"
    
    '２次元配列からジャグ配列をつくります
    Dim jArray: jArray = Arr2DToJagArr(arr2D)
    'jArray(0)(0) = "A"
    'jArray(1)(0) = "B"

    '配列からコレクションをつくります
    Dim clct: Set clct = ArrToClct(Array(1, 2, 3))
    'Item1 = 1
    'Item2 = 2
    'Item3 = 3
    
    'コレクションから配列をつくります
    Debug.Print Dump(ClctToArr(clct))
    'Array(1%, 2%, 3%)
    
    '(key,value)という指定でディクショナリーをつくります
    Dim dict: Set dict = CreateDictionary("One", 1, "Two", 2, "Three", 3)
    'Item 1 = ("One, 1)
    'Item 2 = ("Two, 2)
    'Item 3 = ("Three, 3)

    'ビット演算をおこなう
    Debug.Print Dump(BitFlag(False, True))
    '1&
    
End Sub
```


###Strings

```vb
Sub test()
    
    Dim str: str = "本日は晴天なり！"
    
    '文字列を左から指定の文字数で切り出します
    Debug.Print Dump(LeftA(str, 5))
    '"本日"
    
    '文字列を右から指定の文字数で切り出します
    Debug.Print Dump(RightA(str, 5))
    '"り！"
    
    '文字列を指定の文字数で２つに分け配列で返します
    Debug.Print Dump(SepA(str, 5))
    'Array("本日", "は晴天なり！")
    
    '文字列の長さをかえします
    Debug.Print Dump(StringWidth(str))
    '16$
    
    '文字列にします
    Debug.Print Dump(ToStr(99))
    '"99"
    
    'オブジェクトの場合はオブジェクト名称をかえします
    Debug.Print Dump(ToStr(CreateDictionary("One", 1)))
    '"Dictionary"
    
    Dim str2: str2 = "本日は晴天なり！晴天なり！"
    
    '正規表現オブジェクトを参照なしにつくります
    Dim reg: Set reg = CreateRegExp("晴天")
    Debug.Print reg.test(str2)
    'True
    
    '正規表現を使用します
    
    Debug.Print Dump(ReMatch(str2, "晴天"))
    'Array("晴天")
    
    Debug.Print Dump(ReMatcheGlobal(str2, "晴天"))
    'Array(Array("晴天"), Array("晴天"))
    
    Debug.Print Dump(ReReplace(str2, "晴天", "雨天"))
    '"本日は雨天なり！晴天なり！"
    
    Debug.Print Dump(ReTrim(str2, "晴天.*"))
    '"本日は"
    
End Sub
```

### Numeric

```vb
Sub test()
    
    '数字を丸めます
    Debug.Print Dump(ARound(1.2345, 1))
    'CDec(1.2)
    
    'よくわかってません。。。。
    Debug.Print Dump(IncrPre(1)) '2%
    Debug.Print Dump(IncrPst(1)) '1%
    
    '数字の場合trueをかえします
    Debug.Print Dump(IsInt(1)) 'true

    '最大値・最小値をかえします
    Debug.Print Dump(Max(1, 2, 3)) '3%
    Debug.Print Dump(Min(1, 2, 3)) '1%

End Sub
```

### Date

```vb
Sub test()

    '月・週の初末をかえします

    Dim day As Date: day = #10/24/2016#
    
    Debug.Print Dump(BeginOfMonth(day))
    '#10/1/2016#
    
    Debug.Print Dump(EndOfMonth(day))
    '#10/31/2016#
    
    Debug.Print Dump(BeginOfWeek(day))
    '#10/23/2016#
    
    Debug.Print Dump(EndOfWeek(day))
    '#10/29/2016#
    
End Sub
```

### Display

```vb
Sub test()
    
    '指定したフォーマットで出力します
    Debug.Print Dump(Formats("{0:MM/dd}", #10/24/2016#))
    '"10/24"
    
    'Debug.Printで出力できない分も出力します
    Debug.Print Dump(Array(1, 2, 3))
    'Array(1%, 2%, 3%)
    
End Sub
```

### Equality

```vb

    'よくわかってません。。。。

```

### Eval

```vb

    'よくわかってません。。。。

```

### Others

```vb

    'よくわかってません。。。。

```



### Ariawaseはこちらから

[Ariawase](https://github.com/vbaidiot/Ariawase)

### その他

`Ariawase Core`モジュールの関数一覧の作り方

```shell

$ cat core.bas | grep "Public Function" | awk -F' ' '{print $3}' | sed -e 's/(.*//g'
```